以下示例中给出的结构有什么不幸之处?
What is unfortunate about the construction given in the following example?
“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
示例最后一行的构造有什么不幸?
我在整个参考资料中搜索了允许的其他 "unfortunate" 行为,但我可以找到 none。
如果在这种特定情况下不幸,是否可以不将其定为非法?
在这两种情况下,A::v
都是悬挂引用(从 42 临时引用,或构造函数的参数 v
)。
在某些情况下引用临时(即使延长了生命周期)可能是合法的并且可以正确使用。
很难检测到所有滥用案例以禁止它们。
“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
示例最后一行的构造有什么不幸?
我在整个参考资料中搜索了允许的其他 "unfortunate" 行为,但我可以找到 none。
如果在这种特定情况下不幸,是否可以不将其定为非法?
在这两种情况下,A::v
都是悬挂引用(从 42 临时引用,或构造函数的参数 v
)。
在某些情况下引用临时(即使延长了生命周期)可能是合法的并且可以正确使用。
很难检测到所有滥用案例以禁止它们。