无效指针是指指向当前程序无法访问的地址的指针,如果试图使用无效指针,那么OS将会阻止它发生,在C++入门第二章中说过
未定义将无效指针用作条件或用于比较
但是我只是试着比较指针,而不是去引用它们,如何在C++入门中解释那个句子?
入门说明说这种行为是未定义的。
在大多数情况下,不定义行为是因为说任何其他的话(例如比较无效指针返回false)将意味着一些性能开销(额外的内存,额外的检查)。 这并不意味着比较不会返回结果。 它意味着编译器可以在那一点上做它想做的任何事情(这包括时间旅行)。
由于编译器在这种情况下被允许做任何事情,所以它可以假设两个指针都是有效的,并跳过围绕它们的有效性检查。 它可以假设结果是它允许它移除大部分代码的任何东西(万一您在if中使用它)。
另外,既然在这一点上没有人能告诉你比较的结果是什么,那么谁又能争辩说程序是正确的(也就是说,它会做你说它应该做的事情)呢?
所以: