为什么g ++不会超出可变长度数组的范围

时间:2015-03-16 03:42:15

标签: c++ g++

我有一段代码如下:

int arr[n];
int i, j, x, y;

for(y = 0; y < n; y++)
    for(x = 0; x < n; x++)
        // do stuff
// x = y = n
std::cout << arr[x][y];

代码是A *实现的一部分,更令人惊讶的是它工作得很好,但我注意到我实际上正在访问我的数组中的一个out of bounds元素。为什么g ++允许我这样做而不抛出任何异常?

1 个答案:

答案 0 :(得分:1)

通过std::out_of_range成员函数访问范围时,std::vector会抛出

at()。 (以及其他一些容器检查情况)。

其他超出范围的访问只会导致未定义的行为。

int arr[n];在标准C ++中是非法的。您正在使用GNU扩展,当您走出界限时,可能还会导致未定义的行为。