将rvalue分配给' const auto&'

时间:2017-03-17 23:45:14

标签: c++ c++11 reference lvalue rvalue

在这种情况下会发生什么?

// assume WeakPtr is valid and has not expired
const auto& something = WeakPtr.lock();
something->doStuff();

这是未定义的吗?

这种情况会改变吗?

std::shared_ptr<Something> getSomething() { return mSomething.lock(); }
const auto& something = getSomething();

这是怎么回事?

std::vector<int> getInts() { return std::vector<int>{ 1, 2, 3 }; }
const auto& ints = getInts();

在每种情况下const auto&意味着我想绑定对象的引用,但在每种情况下我都将它绑定到临时右值对象。我邀请灾难吗?

1 个答案:

答案 0 :(得分:1)

  

这是未定义的吗?

每个案例都有明确的定义。

  

在这种情况下会发生什么?

在每种情况下,临时对象的生命周期都会延长,以匹配const引用的生命周期,如标准的[class.temporary]部分所述。

  

[class.temporary](标准草案)

     

4有两种情况下,临时人员在不同时刻被摧毁,而不是   表达。第一个背景是...... [与您的案例无关]

     

5第二个上下文是指引用绑定到临时的。引用所在的临时值   绑定或临时,即绑定引用的子对象的完整对象仍然存在   在参考文件的生命周期中,除了...... [一些不适用于您的案例的例外]