对const的右值引用有什么用吗?

我想不是,但是我想确认。有什么用const Foo&&Foo类类型在哪里?


繁星淼淼
浏览 455回答 3
3回答

守着一只汪

我想不出可以直接使用的情况,但可以间接使用它:template<class T>void f(T const &x) {&nbsp; cout << "lvalue";}template<class T>void f(T &&x) {&nbsp; cout << "rvalue";}template<class T>void g(T &x) {&nbsp; f(T());}template<class T>void h(T const &x) {&nbsp; g(x);}在T 克为T const的,所以˚F的x是一个常量Ť&&。可能会导致f发生编译错误(当它试图移动或使用对象时),但是f可以使用rvalue-ref,以便在不修改rvalue的情况下不能在lvalues上调用它(例如,太简单了)以上示例)。

凤凰求蛊

除了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限定函数的任何用途。
打开App,查看更多内容
随时随地看视频慕课网APP