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