3 回答

TA貢獻1872條經驗 獲得超4個贊
我想不出可以直接使用的情況,但可以間接使用它:
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 關注
- 486 瀏覽
添加回答
舉報