3 回答
TA贡献1872条经验 获得超3个赞
我想不出可以直接使用的情况,但可以间接使用它:
template<class T>
void f(T const &x) {
cout << "lvalue";
}
template<class T>
void f(T &&x) {
cout << "rvalue";
}
template<class T>
void g(T &x) {
f(T());
}
template<class T>
void h(T const &x) {
g(x);
}
在T 克为T const的,所以˚F的x是一个常量Ť&&。
可能会导致f发生编译错误(当它试图移动或使用对象时),但是f可以使用rvalue-ref,以便在不修改rvalue的情况下不能在lvalues上调用它(例如,太简单了)以上示例)。
TA贡献1825条经验 获得超4个赞
除了std :: ref之外,标准库还出于相同目的在std :: as_const中使用const rvalue引用。
template <class T>
void as_const(const T&&) = delete;
获取包装值时,它还用作std :: optional中的返回值:
constexpr const T&& operator*() const&&;
constexpr const T&& value() const &&;
以及在std :: get中:
template <class T, class... Types>
constexpr const T&& get(const std::variant<Types...>&& v);
template< class T, class... Types >
constexpr const T&& get(const tuple<Types...>&& t) noexcept;
大概是为了在访问包装的值时保持值的类别以及包装器的恒定性。
这对是否可以在包装的对象上调用const rvalue ref限定函数有所不同。也就是说,我不知道const rvalue ref限定函数的任何用途。
- 3 回答
- 0 关注
- 454 浏览
添加回答
举报