为什么 [class.temporary]/2 中的 Note 3? (2.1) 至 (2.6) 段不应该具有规范地位吗?
Why the Note 3 in [class.temporary]/2? Shouldn't paragraphs (2.1) thru (2.6) have normative status?
临时对象的具体化通常会尽可能延迟,以避免创建不必要的临时对象。
[注3:临时对象被具体化:
(2.1) 将引用绑定到纯右值时 ([dcl.init.ref]、[expr.type.conv]、[expr.dynamic.cast]、[expr.static.cast]、[expr.const.cast], [expr.cast]),
(2.2) 在对 class 纯右值执行成员访问时 ([expr.ref], [expr.mptr.oper]),
(2.3) 在数组纯右值上执行数组到指针转换或下标时 ([conv.array], [expr.sub]),
(2.4)
从 braced-init-list ([dcl.init.list]),
初始化类型 std::initializer_list<T>
的对象时
(2.5)
对于某些未评估的操作数([expr.typeid]、[expr.sizeof])和
(2.6)
当具有 cv void
以外类型的纯右值显示为丢弃值表达式 ([expr.prop]) 时。
—尾注]
引用的部分([dcl.init.ref] 等)具有规范性措辞,可准确指定临时物化发生的时间。此说明仅作为快速参考存在,因此您不必查看整个标准即可找到发生临时物化的所有情况。如果它是规范的,那么它往好里说是多余的,往坏里说是相互冲突的。使其成为非规范性保留其有用性,同时避免任何潜在问题。
临时对象的具体化通常会尽可能延迟,以避免创建不必要的临时对象。
[注3:临时对象被具体化:
(2.1) 将引用绑定到纯右值时 ([dcl.init.ref]、[expr.type.conv]、[expr.dynamic.cast]、[expr.static.cast]、[expr.const.cast], [expr.cast]),
(2.2) 在对 class 纯右值执行成员访问时 ([expr.ref], [expr.mptr.oper]),
(2.3) 在数组纯右值上执行数组到指针转换或下标时 ([conv.array], [expr.sub]),
(2.4) 从 braced-init-list ([dcl.init.list]),
初始化类型std::initializer_list<T>
的对象时
(2.5) 对于某些未评估的操作数([expr.typeid]、[expr.sizeof])和
(2.6)
当具有 cv void
以外类型的纯右值显示为丢弃值表达式 ([expr.prop]) 时。
—尾注]
引用的部分([dcl.init.ref] 等)具有规范性措辞,可准确指定临时物化发生的时间。此说明仅作为快速参考存在,因此您不必查看整个标准即可找到发生临时物化的所有情况。如果它是规范的,那么它往好里说是多余的,往坏里说是相互冲突的。使其成为非规范性保留其有用性,同时避免任何潜在问题。