2016-11-14 34 views
0

從我瞭解的有關使用const類型限定符和指針的知識來看,它取決於您在何處使用它。我的指針導致「相同類型限定符多次使用」警告?

const MyType * 

意味着該位置不能被修改,但該位置的值可以。

MyType const * 

意味着位置可以修改,但不是位置上的值。

由此,我會看到沒有理由爲以下不爲有效時,

const MyType const * 

要定義一個指針,其位置是固定的,以及爲其值指出不能被修改。但是,這是拋出「相同類型限定符多次使用」。我應該忽略這個嗎?我對指針語境中常量語義的理解是否有缺陷?

+0

你如何使用限定符?你能提供更好的背景嗎? – user31264

回答

5

您對語法略有誤解。事實上

const MyType * 

MyType const * 

意味着同樣的事情:底層MyType對象是恆定的。爲了使指針本身不變的語法是:

MyType * const 

因此,如果你想既要恆定,你可以使用:

MyType const * const 

或者:

const MyType * const 

一個方式來記住這是:不變的東西是關鍵字const(指針爲*或對象爲MyType)左側的東西,除非存在對左邊沒有任何影響:在這種情況下,這是右邊的事情。

+1

請參閱[你如何閱讀C聲明?](http://stackoverflow.com/q/89056/4892076)和右手順時針規則 – jaggedSpire

+0

我有一種感覺,我一定是失去了一些東西。感謝您提供詳細而簡潔的說明! – ophilbinbriscoe

2

const MyType *MyType const *是一樣的東西。它們都是指向const的指針,即指針是const。因此,對於const MyType const *,您將得到該錯誤,因爲const限定符在同一事件中使用兩次。

你想可能是什麼MyType const * const(注意const*的位置),這是一個常量指針爲const,即指針本身而指向都是常量。您可以從右到左讀取它作爲「const指向const MyType」。

相關問題