将右值分配给'const auto&'时会发生什么情况

What happens when assigning an rvalue to 'const auto&'

本文关键字:什么情况 auto const 分配      更新时间:2023-10-16

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

// 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&都意味着我想绑定对对象的引用,但在每种情况下,我都将其绑定到临时 rvalue 对象。 我是在招惹灾难吗?

这是未定义的吗?

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

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

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

[类.临时] (标准草案(

4 在两种情况下,临时人员被摧毁的时间点与完整结束的时间点不同。 表达。第一个上下文是...[与您的案件无关]

5 第二个上下文是当引用绑定到临时引用时。引用的临时 绑定或作为引用绑定到的子对象的完整对象的临时对象保留 在引用的生命周期内,除了...[一些不适用于您的案件的例外情况]