“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/

10-11 18:44