未使用的默认成员初始值设定项如何改变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() 中未使用,但行为仍然不同。你能解释一下为什么吗?