[英]C++17: non-const reference to temporary from method returning *this
我确定之前有人问过这个问题,但我的谷歌搜索技能不足以找到我的案例。 简单地说,下面的 C++ 代码有效吗?
struct A {
int a;
static A foo() { return {5}; }
A& bar() { return *this; }
A(A&) = delete;
};
int main() {
A& a = A::foo().bar();
a.a = 7;
return a.a;
}
通常,我应该只被允许存储对临时对象的 const 引用,但我不确定 C++17 是否放宽了这一点。 我试图阅读规范,但感到困惑。
clang、gcc 和 msvc 似乎能够编译它,但是如果我删除aa = 7;
: https://godbolt.org/z/n7vGT44Y5 。
bar()
不返回临时值,它返回引用。
A::foo()
返回一个临时的,它的生命周期在完整表达式结束时结束。 所以a
是一个悬空引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.