gpt4 book ai didi

c++ - C++ 中 {} 和 {0} 的大括号初始化区别

转载 作者:行者123 更新时间:2023-12-01 14:55:26 28 4
gpt4 key购买 nike

几年前,我读到使用 {} 和 {0} 来初始化 POD 在 C++ 中有一些细微的差异,其中可能会在您的代码中引入悲观化。

D3D11_TEXTURE2D_DESC dsd = {};
D3D11_TEXTURE2D_DESC dsd2 = { 0 }:

虽然我知道 {0} 肯定是从 c 继承的东西,而 {} 是 c++11 中引入的东西,但据说两者在编译期间都被翻译为相同的 memset() 调用:
memset(&dsd, 0, sizeof(dsd));

然而,两种大括号初始化风格之一做了一些内存初始化未对齐的事情,有人关心哪种风格更好,为什么?

最佳答案

您引用的语法称为 aggregate initialization .

If the number of initializer clauses is less than the number of members or initializer list is completely empty, the remaining members are value-initialized



由于 POD 的值初始化与零初始化相同,因此您显示的两种语法之间没有区别。

甚至在 C++11 之前就是这种情况——空的初始化列表不是它引入的东西。从 C++11 开始,非 POD 也允许使用该语法。聚合初始化现在是这个新列表初始化的一个特例。

关于c++ - C++ 中 {} 和 {0} 的大括号初始化区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41006259/

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