2013-02-07 102 views
2

比较const和非const指针。比较合法吗?任何特殊照顾这种比较。谢谢。比较const和非const指针?

+5

你为什么不试试。 –

+0

我同意@SteveWellens:问你的编译器:-) –

+0

你能澄清你的意思是“const和非const指针”吗?通常常量几乎不会阻止任何东西(除非赋值,显然,并采取放弃const的操作);一个“int * const”(常量指针)和一个“int *”(非常量指针)实际上是相同的。你的意思是“指向常量和非常量数据的指针”,如'const int *'与'int *'中的一样? – ruakh

回答

8

一个指向T可以隐式转换成一个const指针T;类似地,一个指针T可以隐式转换成指针const T。当您尝试比较指向常量指针的指针时,编译器将根据需要执行这些转换中的一种或两种转换。没有什么比比较两个非const指针或两个const指针更有风险了。

-2

常量的目的在

为const char * p

是保证,你将不会改变它。从理论上讲,非常量指针不应该指向同一代码中的相同位置,因为这是一个很好的编码实践。在实践中,你最终可能会做出一些常量,因为这会让你的生活变得更加简单,但从概念上讲它并不是一个真正的常量。在这种情况下,您可能需要进行比较。如前所述,根据你使用的编译器和它的设置,它可能会也可能不会喜欢这样的比较。万一它可能不是,迫使投给一个非const如果这个比较之前困扰着你,像这样的,例如:

如果((的char *)const_p == non_const_p)