C ++ 11及其后有很多变化。我只是遇到了这行代码,我以为我创建了一个默认为零的空数组,我刚刚在数组的开头添加了一个元素99.但它打印了42.我真的很困惑。
int a1 []{};
a1[0] = 99;
cout<<"a1 is " << a1[0];
控制台:
a1 is 42
答案 0 :(得分:3)
这不是标准的C ++程序。 C&amp; C中不允许使用零大小的数组。 C ++。如果您使用的是-pedantic-errors
&amp;,请使用g++
命令行选项clang++
编译器严格按标准确认&amp;禁用任何编译器扩展。
查看实时演示here。 Clang++
说
source_file.cpp:7:14: error: zero size arrays are an extension [-Werror,-Wzero-length-array]
int a1 []{};
^
1 error generated.
答案 1 :(得分:0)
如果使用g++ -std=c++11 -pedantic -W -Wall
编译该代码,则会收到错误:
test.cpp:6:12: error: zero-size array ‘a1’
int a1 []{};
此代码无效。
作为扩展,一些编译器提供(在不太兼容的模式下)零大小的数组。在这种情况下,您只需读取/写入与空数组相邻的字节,这恰好不会崩溃......