cppreference.com列举了两种强制删除复制/移动操作的情况。我对第二种情况感兴趣,如下所示:
在对象的初始化中,当初始化器表达式是与变量类型相同的类类型(忽略cv限定)的prvalue时。
因此,以下初始化将强制删除复制操作:
T x = T();
实际上,当删除T的副本构造函数时,此初始化不会在C ++ 14中进行编译,但是会在c ++ 17中进行编译(请参见示例),如cppreference.com中所述。
但是我在[class.copy.elision]中找不到支持此报价的报价。
那是因为措辞在[dcl.init] /17.6.1中
否则,如果目标类型是(可能是cv限定的)类类型:
- 如果初始化程序表达式是prvalue,并且源类型的cv不合格版本与目标程序的类相同,则使用初始化程序表达式初始化目标对象。[示例:
T x = T(T(T()))
; 调用T的默认构造函数初始化x。—结束示例]
保证复制省略涉及对价值类别的行为和交互方式的巧妙改变。因此,它分布在标准中的多个位置。您可以通过查看原始提案来查看它们
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句