将右值分配给'const auto&'时会发生什么情况
What happens when assigning an rvalue to 'const auto&'
在这种情况下会发生什么?
// 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 第二个上下文是当引用绑定到临时引用时。引用的临时 绑定或作为引用绑定到的子对象的完整对象的临时对象保留 在引用的生命周期内,除了...[一些不适用于您的案件的例外情况]
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 发生注入类名时会发生什么情况?(C++)
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 重新分配向量时,向量中的内存会发生什么情况
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 使用 Google 基准测试时返回值会发生什么情况?
- 正在连接的等待条件变量的线程会发生什么情况?
- 如果未定义的C++行为符合 C 定义的行为,会发生什么情况?
- 在什么情况下,使用'const T*'输入参数比'const T&'更可取?
- 如果字符串在 C/C++ 中没有 NUL 字符(以防编译器允许它通过)会发生什么情况?
- 将虚拟方法定义为私有方法时会发生什么情况?
- 什么是'auto my_var ='与"自动my_var="的沟通?
- 如果我将"reference to vector"分配给"vector"会发生什么情况
- 将右值分配给'const auto&'时会发生什么情况