为什么是[class.temporary]/2中的Note3?段落(2.1)到(2.6)不应该具有规范地位吗?
[类.临时]/2
临时对象的实现通常会尽可能延迟,以避免创建不必要的临时对象。
[注3:临时对象具体化:
(2.1) 将引用绑定到纯右值时 ([dcl.init.ref], [expr.type.conv], [expr.dynamic.cast], [expr.static.cast], [expr.const.cast] , [expr.cast]),
(2.2) 对类纯右值 ([expr.ref], [expr.mptr.oper]) 执行成员访问时,
(2.3) 当对数组纯右值 ([conv.array], [expr.sub]) 执行数组到指针的转换或下标时,
(2.4)std?::?initializer_list<T>从花括号初始化列表([dcl.init.list])初始化类型对象时,
(2.5) 对于某些未计算的操作数 ([expr.typeid], [expr.sizeof]),和
(2.6) 当具有非cv 类型的纯右void值出现为丢弃值表达式 ([expr.prop]) 时。
— 尾注]
回答
引用的部分([dcl.init.ref] 等)具有规范性的措辞,准确地指定了临时物化发生的时间。此注释仅作为快速参考存在,因此您不必查看整个标准来查找发生临时物化的所有情况。如果它是规范的,那么它充其量是多余的,最坏的情况是相互冲突。使其非规范化可以保留其有用性,同时避免任何潜在问题。
THE END
二维码