未使用的默认成员初始值设定项如何改变C++中的程序行为?

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

#include <iostream>

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

struct B { const A &a; };

struct C { const A &a = {}; };

int main()
{
    B b({});
    std::cout << ". ";

    C c({});
    std::cout << ". ";
}

GCC 在这里打印(https://gcc.godbolt.org/z/czWrq8G5j)

A() ~A() . A() . ~A() 

这意味着A-object 初始化引用的生命周期b很短,但c生命周期会延长到作用域结束。

structsB和structs 之间的唯一区别在于C默认成员初始值设定项,它在 main() 中未使用,但行为仍然不同。你能解释一下为什么吗?

以上是未使用的默认成员初始值设定项如何改变C++中的程序行为?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>