看看这个代码片段
struct S{ int i; int j;};
int main()
{
assert(S().i == S().j) // is it guaranteed ?
}
为什么?
有保证吗?
是的,这是有保证的。S().i
和的值S().j
是0
。()
意味着值初始化。(这意味着i
并且j
将被零初始化,因为S
它是一个没有用户定义的默认构造函数的类)
来自 C++ 标准 ISO/IEC 14882:2003(E) 第 3.6.2 点
具有静态存储持续时间(3.7.1)的对象应在任何其他初始化发生之前进行零初始化(8.5)。
所以这是有效的,因为两个变量都是零初始化的。
从技术上讲,是的。它们将被初始化为 0 (至少在大多数编译器的非调试版本下。Visual Studio 的编译器通常会将未初始化的变量初始化为调试版本中的特定模式)。
但是,如果您正在进行代码审查,如果您因未明确初始化变量而被大喊大叫,请不要感到惊讶。