gpt4 book ai didi

c++ - 即使我没有提到数组的大小,为什么当我编译和运行它时代码工作正常?

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:34 25 4
gpt4 key购买 nike

class array {
public:
int arr[];

array() {
arr[0] = 1;
arr[100] = 2;
}
};

int main() {
array a;
cout << a.arr[0] << a.arr[100] << endl;
return 0;
}

我原以为运行上述代码会出现段错误。但是,即使我没有提到数组大小,它也打印了正确的输出。这是什么原因?

最佳答案

你得到的是未定义的行为。

读取/写入未分配内存不会自动生成段错误,但这当然是“不好的做法”,应该避免。

不可能确切地说出这样的代码会发生什么,该数组将在何处寻址或已经存在的内容,因此 - 未定义的行为。

注意:如@juanchopanza 所述,代码在 C++ 中是非法的,因为 arr 是不完整的类型。由于默认设置,您的编译器可能(并且显然确实)忽略了这一点,但是可以证明相同行为的合法代码是:

class array {
public:
int *arr;
// ...

class array {
public:
int arr[1];
// ...

关于c++ - 即使我没有提到数组的大小,为什么当我编译和运行它时代码工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32963146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com