请问一下为什么这个代码没有报错 不是已经越界了吗

 #include <iostream>

using namespace std;
class A
{
public:
    void print();
    A(int a)
    {
        c= a;
    }
    int c;
};
void A::print()
{
    cout<<"why why"<<c<<endl;
}
int main()
{
    A *p = new A(3);
    p[2].print();

}

C++语言不会进行越界检查,所以不会报错。好比你开车,低端汽车(奥拓,好比C++)不会对你是否偏离车道检查,撞上墙了或者掉河里了你也只能自认倒霉。
高端汽车(奥迪,好比Java)就有车道偏离预警,可以在你偏离车道的时候提醒你。

c语言是没有越界检查机制的