为什么if语句中未定义的参数不会导致segfault或其他错误

Why do undefined parameters in an if statement not cause a segfault or another error?

本文关键字:segfault 错误 其他 语句 if 未定义 参数 为什么      更新时间:2023-10-16

例如:

array[2]={1,2};
myInt=5;
if (array[myInt-6]==2)
   cout << true << endl;
else
   cout << false << endl;

if语句中数组中引用的值显然超出了界限。当我编译并运行这个时,我会得到false输出,这是有道理的,因为条件不是true,但我想知道为什么没有错误输出。

因为未定义的行为是未定义的。任何事情都有可能发生,包括看起来有效。

编译器和运行时都不需要诊断。你必须自己处理绑定检查。

C++不是一种内存安全的语言,因此您的工作是避免此类问题,而不是编译器或运行时的问题。

下一个问题。

调用array[-1]不是错误,它几乎只是*(array - 1)的简写,即数组前一个int地址处的值。假设操作系统已经将这个地址分配给了你的程序,你只会得到一些随机的数据,转换成一个int

因为存储在那个位置的数据每次都可能是相同的,所以你会得到相同的行为——这没有多大意义。如果你想强迫这样的事情导致错误,那么使用标准模板库的容器可能是最简单的,例如向量