2013-02-07 98 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)