gpt4 book ai didi

c++ - 为什么用户提供的默认构造函数会导致未初始化的成员?

转载 作者:行者123 更新时间:2023-12-01 13:50:25 26 4
gpt4 key购买 nike

请考虑以下代码:

#include <iostream>

struct A{ // with implicit default constructor
int number;
};

struct B{
int number;
B(){}; // user-provided default constructor
};

int main()
{
A aa = {};
B bb = {};

std::cout << "aa.number: " << aa.number << std::endl;
std::cout << "bb.number: " << bb.number << std::endl;
}

Running the code online
导致以下输出:
aa.number: 0
bb.number: 19715

为什么 bb.number 未初始化?
我认为使用 ={} 可以保证零初始化?

最佳答案

I thought that zero initialisation is guaranteed by using ={} ?



仅当类型“正确”时才成立,即 B不是。 B bb = {};将默认构造一个 B和你的默认构造函数, B(){}; , 不初始化 number所以无论如何, number永远不会被初始化,因为这是您的默认构造函数的工作方式。如果你有一个“正确”的构造函数,比如
B() : number(0) {};
// or use
int number = 0;
B(){};

然后你会得到 number 的零初始化默认构造时。
A 不是这种情况因为 Aaggregate如果是空的花括号初始化列表,则带有某些保证,例如零初始化, {} 的技术名称。 , 用来。

关于c++ - 为什么用户提供的默认构造函数会导致未初始化的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60321264/

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