C++中数组声明的一个问题

sky*_*oor 0 c++

下面两个代码之间有什么区别.

int a[] = {0,0};
int a[2] = {0,0};
Run Code Online (Sandbox Code Playgroud)

在两种情况下,似乎我都可以为[3]赋值.在任何情况下我都可以访问[3].那有什么区别?

Alo*_*hal 10

没有区别.在第一个中,编译器为您进行计数,如果您决定稍后更改元素的数量,这很好.

您的编译器原谅您分配或使用的a[3]事实并不意味着这样做是正确的.事实上,你甚至无法访问,a[2]因为它只有两个元素,由下标0和1索引.