比较const指针和非const指针。该比较是否合法?在进行此类比较时需要特别注意什么。谢谢。
指向 T
的指针可以隐式转换为指向 const T
的常量指针;同样地,指向 T
的指针也可以隐式转换为指向 const T
的指针。当您尝试比较指向常量指针的指针时,编译器将执行这两种转换中的任何一种或两种都会进行。与比较两个非常量指针或两个常量指针相比,这里没有任何更加危险的情况。
const 的作用如下:
const char* p
承诺不会更改它。理论上,一个非 const 指针不应该指向同一代码中的同一位置,这是良好编码实践的规则。实际上,您可能会将某些东西设置为 const,因为这样可以使您的生活更轻松,但从本质上讲并不是真正的 const 概念。在这种情况下,您可能需要进行比较。正如所提到的,取决于您使用的编译器以及其设置,它可能或可能不喜欢这样的比较。如果这令您烦恼,可以在比较之前强制将其转换为非 const,例如:
if ((char*)const_p == non_const_p)
const
的操作);一个“int * const”(常量指针)和一个“int *”(非常量指针)实际上是相同的。你是指“指向const和non-const数据的指针”,例如“const int *”与“int *”吗? - ruakh