“ 15.6.2初始化基和成员”(N4713)节具有以下第11项的示例:
struct A {
A() = default; // OK
A(int v) : v(v) { } // OK
const int& v = 42; // OK
};
A a1; // error: ill-formed binding of temporary to reference
A a2(1); // OK, unfortunately
示例最后一行中的构造有什么不幸?
我在整个参考书中搜索了其他允许的“不幸”行为的出现,但找不到。
如果在此特定情况下不幸,是否可以将其定为非法?
答案 0 :(得分:6)
在两种情况下,A::v
都是悬空引用(临时值42,或构造函数的参数v
)。
在某些情况下,引用临时文件(甚至延长使用寿命)可能是合法的,并且可以正确使用。
很难发现所有滥用案例以禁止它们。