比较const指针和非const指针?

5

比较const指针和非const指针。该比较是否合法?在进行此类比较时需要特别注意什么。谢谢。


我同意@SteveWellens的观点:问问你的编译器 :-) - Andy Prowl
你能澄清一下你所说的“const和non-const指针”的含义吗?通常情况下,const-ness几乎不阻止任何东西(除了赋值和执行丢弃const的操作);一个“int * const”(常量指针)和一个“int *”(非常量指针)实际上是相同的。你是指“指向const和non-const数据的指针”,例如“const int *”与“int *”吗? - ruakh
2
@SteveWellens:这并不总是判断某个东西是否“合法”的好方法;它最多只能告诉你,“存在一个编译器,在其中此比较不会总是出现问题”。 - ruakh
1
@SteveWellens:效率低下总比出错好,如果你只是参考编译器,那么经常会出现错误。此外,生产力的下降只会在学习时发生。最终,你会对正确性有信心。 - Benjamin Lindley
2
@SteveWellens:在这段时间里,你难道没有意识到今天行得通的方法明年可能就不行了吗?如果你为了交付产品而时间紧迫,那没问题,尽你所能去做。但这是一个学习良好、可靠编程实践的地方。很显然,OP并不急于交付产品,否则他不会询问一些明显可以轻松测试的东西。他有时间提问,我们也有时间回答,但你却在打击他的积极性,让他认为如果某件事今天行得通,它将永远行得通。 - Benjamin Lindley
显示剩余5条评论
2个回答

11

指向 T 的指针可以隐式转换为指向 const T 的常量指针;同样地,指向 T 的指针也可以隐式转换为指向 const T 的指针。当您尝试比较指向常量指针的指针时,编译器将执行这两种转换中的任何一种或两种都会进行。与比较两个非常量指针或两个常量指针相比,这里没有任何更加危险的情况。


-3

const 的作用如下:

const char* p

承诺不会更改它。理论上,一个非 const 指针不应该指向同一代码中的同一位置,这是良好编码实践的规则。实际上,您可能会将某些东西设置为 const,因为这样可以使您的生活更轻松,但从本质上讲并不是真正的 const 概念。在这种情况下,您可能需要进行比较。正如所提到的,取决于您使用的编译器以及其设置,它可能或可能不喜欢这样的比较。如果这令您烦恼,可以在比较之前强制将其转换为非 const,例如:

if ((char*)const_p == non_const_p)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接