为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
繁星淼淼 2019-12-16 16:12:10
我想不是,但是我想确认。有什么用const Foo&&,Foo类类型在哪里?
查看完整描述

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上调用它(例如,太简单了)以上示例)。



查看完整回答
反对 回复 2019-12-17
?
凤凰求蛊

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限定函数的任何用途。



查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 454 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信