2011-08-05 120 views
3

我相信我遇到過很多人似乎對const感到困惑的部分原因,那就是術語「」常量指針「這似乎在說,(即使是那些誰瞭解的細微之處)似乎往往意在是有點違反直覺的命名意味着」 指針給const「或:常量討論的常量指針類型,指針常量和術語

const Type * foo; 

然而,當解析沒有先驗知識的約定(由新人),在術語「常量指針」一個可能解析「常量」資格「指針」等指望它的意思是「常量指針到類型」或:

Type * const foo; 

所以我的問題是:

  1. 是「常量指針」爲「const Type *」接受的術語,儘管看似是一個名不副實?
  2. 如果是,在討論中提到的「常量指針類型」或「Type * const」的常規術語是什麼?
+0

我會說它是一個指向const'X'的指針。 你也可以在windows API中看到這個,例如LPCSTR - 指向常量字符串的Long指針。 – Pete

回答

3

是的 - 通常「const指針」是指向const對象的指針,而不是指向const對象的指針,這可能是因爲第一種情況更常見,所以分配是可以理解的它是更短的形式。

正常情況下,對於const-pointer-to-type,您可以只是這樣說,或者使用指示符:T* const。討論這樣的指針是非常罕見的,所以就我所知沒有特別常見的表達。

+3

那麼你如何在討論中通常引用'Type * const'? – Catskul

+0

@Catskul:拼寫出來:「一個常量指針。」它用得少得多,所以說這很麻煩並不是問題。 –

+2

而整個問題與'const引用'和'引用const'是同時發生的,雖然它在C++中並不具有模糊性(引用本身總是const),但它不適合與英語很好地匹配。 – pmr

3

是的,const Type* foo通常被稱爲const指針。

這種常量有一個名字的原因,是因爲這種類型的常量比另一種更粘。如果你得到一個指向const對象的指針,你不能將它轉換爲非const對象。 但是,如果你得到一個本身是const的指針,但指向一個可變對象,你也可以將它複製到一個可寫域。

最後,指向const的指針指出指向的對象是const。它不是,它可以改變,你只需要一個只讀的對象視圖。從這個意義上說,常量比對象本身更適用於指針。

1

const是一個所謂的限定符。它符合接下來的要求。

在const型*變種的情況下,這意味着該類型的值是常數,所以它被稱爲常量(螞蟻)指針。

在類型* const的變種的情況下,這意味着var值是常量,所以它被稱爲指針常量(ANT)。

注意兩者之間的細微差別。

+0

「*它符合下一個要求。*」IMO正是使用「const指針」來表示「const類型指針」的錯誤。使用相同的規則,人們可能會認爲在術語「const指針」中,「const」限定術語中的「指針」,實際上,它沒有。 – Catskul

+0

@catskul:這是微妙之處。我個人並不覺得困惑。 –

+0

@catskul:當有人使用術語const指針時,我會自動承擔const-type-pointer。但是,當一個手段類型指針常量,然後他們應該使用術語指針const(ant) –