7

看看这个代码片段

struct S{ int i; int j;};

int main()
{
   assert(S().i ==  S().j) // is it guaranteed ?
}

为什么?

4

3 回答 3

10

有保证吗?

是的,这是有保证的。S().i和的值S().j0()意味着值初始化。(这意味着i并且j将被零初始化,因为S它是一个没有用户定义的默认构造函数的类)

于 2010-12-07T16:12:11.490 回答
0

来自 C++ 标准 ISO/IEC 14882:2003(E) 第 3.6.2 点

具有静态存储持续时间(3.7.1)的对象应在任何其他初始化发生之前进行零初始化(8.5)。

所以这是有效的,因为两个变量都是零初始化的。

于 2010-12-07T16:48:39.273 回答
-1

从技术上讲,是的。它们将被初始化为 0 (至少在大多数编译器的非调试版本下。Visual Studio 的编译器通常会将未初始化的变量初始化为调试版本中的特定模式)

但是,如果您正在进行代码审查,如果您因未明确初始化变量而被大喊大叫,请不要感到惊讶。

于 2010-12-07T17:17:18.043 回答