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

时间:2018-09-03 10:31:36

标签: c++ constructor reference temporary-objects

“ 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

示例最后一行中的构造有什么不幸

我在整个参考书中搜索了其他允许的“不幸”行为的出现,但找不到。

如果在此特定情况下不幸,是否可以将其定为非法?

1 个答案:

答案 0 :(得分:6)

在两种情况下,A::v都是悬空引用(临时值42,或构造函数的参数v)。

在某些情况下,引用临时文件(甚至延长使用寿命)可能是合法的,并且可以正确使用。

很难发现所有滥用案例以禁止它们。