相关疑难解决方法(0)

关于将const引用绑定到临时的子对象

用代码就好

#include <iostream>

struct P {
    int x;
    P(int x) : x(x) {}
    ~P() { std::cout << "~P()\n"; }
};

int main() {
    auto const& x = P{10}.x;
    std::cout << "extract\n";
}
Run Code Online (Sandbox Code Playgroud)

GCC打印~P() extract,表示临时的生命周期未被引用扩展.

相比之下,Clang(IMO正确)将临时的生命周期延长到引用的生命周期,x因此析构函数将在输出调用main.

请注意,如果我们int使用某种类型(例如string),GCC会突然显示Clang的行为.

这是GCC中的错误还是标准允许的内容?

c++ reference temporary object-lifetime language-lawyer

24
推荐指数
3
解决办法
1203
查看次数