Nic*_*ick 21 c++ lvalue rvalue-reference language-lawyer c++11
在尝试理解右值引用的工作原理时,我最终得到了这段代码:
int* iptr = nullptr;
int*&& irr = iptr;
Run Code Online (Sandbox Code Playgroud)
编译上面的代码会出现以下错误:
错误:对'int*'类型的rvalue引用不能绑定到'int*'类型的左值
我理解这是正确的,但为什么下面的代码,我使用a void*而不是int*编译绑定,编译没有任何问题?运行时行为是正确的还是我应该期望未定义的行为?
int* iptr = nullptr;
void*&& irr = iptr;
Run Code Online (Sandbox Code Playgroud)
son*_*yao 20
这是良好的形式.
int*并且void*是不同的类型; 你不能直接绑定int*引用void*.的int*需要被转换为void*第一,它是临时对象,并且可以结合到右值参考.(PS临时的生命周期延长到参考的生命周期.)
注意,irr不绑定iptr; 所以对它的任何修改都与之无关iptr.
这不是特别的void*,对于其他类型也会发生同样的事情,例如
char c;
int&& r = c; // a temporary int is constructed from c and then bound to r;
// its lifetime is extened to the lifetime of r
Run Code Online (Sandbox Code Playgroud)
Igo*_* R. 11
除了@songyuanyao回答:你可以iptr通过以下方式制作一个右值static_cast:
int* iptr = nullptr;
int*&& irr = static_cast<int *>(iptr);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |