以下示例中给出的构造有什么不幸之处?

What is unfortunate about the construction given in the following example?

本文关键字:什么      更新时间:2023-10-16

"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(。

在某些情况下,引用临时(即使具有延长的生存期(可能是合法的,并且可以正确使用。

很难检测到所有滥用案例以禁止它们。