繁体   English   中英

C++17:从返回 *this 的方法中对临时对象的非常量引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM