Mic*_*len 2 c++ casting reference
在有效的STL项目22中,迈耶斯似乎暗示T&将一个T实例化为临时的; 那是
T x;
T& y = x;
((T)(y)).doSomething();
Run Code Online (Sandbox Code Playgroud)
结果doSomething()是在临时而不是x.
为什么演员必须暂时?
为什么演员必须暂时?
根据标准,(T)(y) 构造一个临时值类型T.
使用强制转换表示法的显式类型转换的行为在C++ 11标准中描述如下:
5.4显式类型转换(强制转换表示法)
1表达式
(T)cast-expression的结果是类型T.结果是左值,如果T是左值引用类型或对函数类型的右值引用,则xvalueT是对象类型的右值引用; 否则结果是一个prvalue.
在你的情况下,
T不是左值参考.
T不是函数类型的右值引用.
T不是对象类型的右值引用.
因此,结果是类型的prvalue T.
如果你进一步研究prvalue和rvalue的定义(第3.10节),结果就是一个临时对象.
使用显式类型转换(功能表示法)构造临时对象.
从C++ 11标准(强调我的):
5.2.3显式类型转换(功能表示法)
1 简单类型说明符(7.1.6.2)或类型名称说明符(14.6)后跟带括号的表达式列表 ,在给定表达式列表的情况下构造指定类型的值.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |