“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
不幸的 关于示例最后一行中的构造是什么?
我在整个引用资料中搜索了其他允许的“不幸”行为,但我找不到。
如果在这种特殊情况下是不幸的,难道它不会被定为非法吗?
最佳答案
在这两种情况下,A::v
都是悬空引用(临时来自 42,或构造函数的参数 v
)。
在某些情况下,引用临时(即使具有延长的生命周期)可能是合法的并且可以正确使用。
很难检测到所有误用情况来禁止它们。
关于c++ - 以下示例中给出的构造有什么不幸之处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52147940/