vla*_*don 12 c++ undefined-behavior rvalue-reference language-lawyer c++11
更新问题为什么这两个右值引用示例有不同的行为?:
源代码:
int a = 0;
auto && b = a++;
++a;
cout << a << b << endl;
Run Code Online (Sandbox Code Playgroud)
版画 20
是否b在a++通话后使用未定义的行为(UB)?也许我们不能使用,b因为它指的是暂时的?
Ker*_* SB 13
代码很好.b指的是一个生命周期扩展的对象a++,它是表达式的结果,它是一个不同的对象a.(将临时对象绑定到引用会将对象的生命周期延伸到引用的生命周期.)您可以使用和修改这两个对象.
不,它不是未定义的行为(UB).没关系 - 你可以在这里修改临时的内容(只要引用对临时的生命周期有效,在这种情况下,对rvalue引用的绑定会将rvalue的生命周期延长到引用的生命周期).
一个更普遍的问题是; 是通过右值引用修改临时UB吗?不,不是UB.移动语义,其中"移动"对象"窃取""移动"对象的内容,依赖于此定义.
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |