|
|
1
9
本标准§8.5.3/5中有相关规定。确定了三种基本情况。第一个涉及初始值设定项(在您的例子中为“3”),它要么是左值,要么是类类型。因为这两种情况都不是真的,所以第三种情况是:使用不具有类类型的rvalue初始化const引用。本案例包含在8.5.3/5中的最后一个项目符号中: 否则,将使用非引用副本初始化规则(8.5),从初始值设定项表达式创建并初始化cv1 T1类型的临时副本。然后将引用绑定到临时对象。如果T1与T2相关,则cv1必须与cv2相同或大于cv2;否则,程序的格式就不正确。 编辑:重读一遍,我认为IBM是对的。我之前考虑过复制临时文件的可能性,但这不是问题的根源。要使用§8.5中规定的非参考副本初始化创建临时副本,需要使用副本选择器。特别是,在这一点上,它相当于一个表达式,如:
这基本上相当于: tx=T(a); 而且
|
|
|
2
3
C++允许足够聪明的编译器避免复制临时对象,这是违反
仿佛
标准允许的规则。我不熟悉IBM的AIX C++编译器,但听起来好像是在思考
但是为什么呢
|
|
|
3
1
我的直觉是杰瑞 answer 是正确的,但仍有一些问题。 有趣的是,这一节的前一段涉及一个核心问题( 391 )。该问题与参数为同一类类型时有关。明确地:
核心问题的变化 仅影响rvalue temporary具有相同类类型的位置。以前的措辞是:
这最后一行就是我们要做的
我不能在杰里对这个问题的解释中找到错误
|
|
|
4
0
如果您尝试命名临时对象,会发生什么情况?
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |