gpt4 book ai didi

C++ 默认初始化和值初始化 : which is which, 在何时以及如何可靠地初始化模板类型成员时调用

转载 作者:IT老高 更新时间:2023-10-28 21:47:06 26 4
gpt4 key购买 nike

我的问题与 this 有点重叠。和其他几个类似的。这些有一些很好的答案,但我已经阅读了它们,但我仍然感到困惑,所以请不要认为这个问题是重复的。

所以,我有以下代码:

class A {
public: int _a;
}

void main()
{
A inst1;
A* inst2 = new A;
A* inst3 = new A();
}

_ainst1inst2 中未初始化,在 inst3< 中初始化为 0/。哪个初始化被称为哪个,为什么代码会这样工作?请考虑到我手头没有 C++ 03 标准,但我有最后的 C++ 11 草案(不过我正在按照 '03 标准编程),所以引用 '03 标准或引用 '11非常欢迎。

P。 S. 这项研究的最初任务是正确地对任意模板类型 T 的成员进行 zeto 初始化。

最佳答案

没那么难:

A x;
A * p = new A;

这两个是默认初始化。由于您没有用户定义的构造函数,这仅意味着所有成员都是默认初始化的。默认初始化像 int 这样的基本类型意味着“没有初始化”。

下一步:

A * p = new A();

这是值初始化。 (我认为在 C++98/03 中不存在这个的自动版本,尽管在 C++11 中你可以说 A x{};,而这个 brace-初始化 变成了值初始化。此外,A x = A(); 尽管是 copy-initializationA x( (A())) 尽管是直接初始化。)

同样,在您的情况下,这只是意味着所有成员都进行了值初始化。基本类型的值初始化意味着零初始化,这反过来意味着变量被初始化为零(所有基本类型都有)。

对于类类型的对象,默认初始化和值初始化都会调用默认构造函数。然后会发生什么取决于构造函数的初始化器列表,并且游戏会递归地为成员变量继续。

关于C++ 默认初始化和值初始化 : which is which, 在何时以及如何可靠地初始化模板类型成员时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106016/

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