访问超出数组范围不会给出任何错误

Access to out of array range does not give any error

为什么这样:

#include <iostream>
using namespace std;

int main() {
    int a[1] = {0};
    a[2048] = 1234;

    cout << a[2048] << endl;

    return 0;
}

不会给出任何编译时错误? (海湾合作委员会 4.9.3)

因为这是合法的 C++。
您可以尝试取消引用任何指针,即使它不是由您的程序分配的,您可以尝试访问数组的任何单元格,即使它超出范围,表达式的合法性不依赖于该表达式中涉及的变量。
编译器不必 运行 任何静态分析来检查你是否真的会导致未定义的行为,并且如果它假设你会(即使很明显你会)不应该编译失败).
问题是你不能在编译时检查所有可能的数组访问(那太昂贵了),所以你必须在某处任意画一条线(问题是 "arbitrarily" 这个词,那个不符合标准)。
因此,检查你不会导致未定义的行为是程序员(或特定静态分析工具)的责任。

Access to out of array range does not give any error

这只是因为你运气不好。 :) 你可以称它为"Undefined Behavior"。编译器没有对数组进行任何绑定检查,而您在语句 a[2048] = 1234; 中试图做的是在堆栈上写入一个未使用的内存位置。