gpt4 book ai didi

c++ - C++ 中引用成员默认初始值设定项的生命周期是多少?

转载 作者:行者123 更新时间:2023-12-04 07:23:26 24 4
gpt4 key购买 nike

请考虑这个简短的代码示例:

#include <iostream>

struct A
{
A() { std::cout << "A() "; }
~A() { std::cout << "~A() "; }
};

struct B { const A &a = A(); };

int main()
{
B x;
std::cout << ". ";
auto y = B();
std::cout << ". ";
auto z = B{};
std::cout << ". ";
}
GCC 在这里打印 ( https://gcc.godbolt.org/z/a83bn54qT ):
A() ~A() . A() ~A() . A() . ~A() 
意思是 A的生命周期-对象初始化引用 xy很短,但在 z生命周期延长到范围结束。
您能否从 C++ 标准的角度解释为什么会这样?

最佳答案

由于代码格式错误,无法保证生命周期延长。
[class.base.init]/11 :

A temporary expression bound to a reference member from a defaultmember initializer is ill-formed. [Example 8:

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

— end example]

关于c++ - C++ 中引用成员默认初始值设定项的生命周期是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68358294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com