【发布时间】:2016-12-06 22:40:46
【问题描述】:
几年前,我读到使用 {} 和 {0} 初始化 POD 在 c++ 中存在一些细微差别,可能会在代码中引入悲观。
D3D11_TEXTURE2D_DESC dsd = {};
D3D11_TEXTURE2D_DESC dsd2 = { 0 }:
虽然我知道 {0} 肯定是从 c 继承的东西,并且 {} 是在 c++11 中引入的东西,但它们都应该在编译期间被翻译成同一个 memset() 调用:
memset(&dsd, 0, sizeof(dsd));
然而,两种大括号初始化样式中的一种在内存初始化未对齐的情况下做了一些事情,有没有人想知道哪种样式更好以及为什么?
【问题讨论】:
-
在你继续前进之前,请跳到 Godbolt,亲自看看这些东西究竟做了什么。随意设置测试结构而不是 D3D11_TEXTURE2D_DESC。
-
{}的使用至少从 C++03 开始就存在了。 -
如果要初始化的零值多于变量,您将获得诊断信息。如果您的零较少,编译器会将其视为有足够的零来初始化所有成员。
-
我投票决定将此问题作为离题结束,因为它要求根据广泛的提示和关联猜测您可能遇到的问题。
标签: c++ c++11 compilation