这行代码意味着什么

时间:2017-06-27 03:48:17

标签: c++ c++11 c++14

C ++ 11及其后有很多变化。我只是遇到了这行代码,我以为我创建了一个默认为零的空数组,我刚刚在数组的开头添加了一个元素99.但它打印了42.我真的很困惑。

int a1 []{};
a1[0] = 99;
cout<<"a1 is " << a1[0];

控制台:

a1 is 42

2 个答案:

答案 0 :(得分:3)

这不是标准的C ++程序。 C&amp; C中不允许使用零大小的数组。 C ++。如果您使用的是-pedantic-errors&amp;,请使用g++命令行选项clang++编译器严格按标准确认&amp;禁用任何编译器扩展。

查看实时演示hereClang++

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 []{};

此代码无效。

作为扩展,一些编译器提供(在不太兼容的模式下)零大小的数组。在这种情况下,您只需读取/写入与空数组相邻的字节,这恰好不会崩溃......