【发布时间】:2017-06-27 03:48:16
【问题描述】:
C++ 11 及之后的版本有很多变化。我刚刚遇到这行代码,我以为我创建了一个默认为零的空数组,我只是在数组的开头添加了一个元素,即 99。但它打印出 42。我真的很困惑。
int a1 []{};
a1[0] = 99;
cout<<"a1 is " << a1[0];
控制台:
a1 is 42
【问题讨论】:
-
int a1 []{};不是 C++ 中的有效声明。代码无效。如果您设法编译并运行它,请将问题指向编译器的作者(或至少在此处指定您使用的编译器)。无论如何,这与 C++ 语言无关,C++11 与否。 -
未定义的行为会产生未定义的结果。
-
唯一的 C++11-ish 是
=在int a1 []{};中的缺失。其他所有内容,包括非法/特定于供应商的部分,在 C++11 之前都是如此。 -
我很想知道为什么UB打印出生命的意义,虽然.....