2016-11-14 30 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”。

相关问题