我的指针导致“多次使用相同类型的限定符”警告?

Posted

技术标签:

【中文标题】我的指针导致“多次使用相同类型的限定符”警告?【英文标题】:My pointers are causing "same type qualifier used more than once" warnings? 【发布时间】:2016-11-14 15:38:21 【问题描述】:

根据我对将 const 类型限定符与指针一起使用的理解,它取决于你在哪里使用它。

const MyType *

表示位置不能修改,但位置的值可以。

MyType const *

表示可以修改位置,但不能修改该位置的值。

据此,我认为以下内容没有理由无效,

const MyType const *

定义一个指针,它的位置是固定的,并且指向的值不能被修改。但是,这是抛出“多次使用相同类型的限定符”。我应该忽略这个吗?我在指针上下文中对 const 语义的理解是否有缺陷?

【问题讨论】:

如何使用限定符?你能提供一个更大的背景吗? 【参考方案1】:

你对语法有一点误解。其实

const MyType *

MyType const *

意思相同:底层MyType 对象是常量。使指针本身恒定的语法是:

MyType * const

因此,如果您希望两者都保持不变,则可以使用:

MyType const * const

或者:

const MyType * const

记住这一点的一种方法是:不变的东西是紧邻关键字const(指针的*或对象的MyType)左边的东西,除非没有什么可左边:在这种情况下,它是右边的东西。

【讨论】:

见how do you read C declarations?和右手顺时针规则 我有一种感觉,我一定是错过了什么。感谢您提供详细而简洁的说明!【参考方案2】:

const MyType *MyType const * 是同一个东西。它们都表示指向 const 的指针,即指针是 const。所以对于const MyType const *,你会得到错误,因为 const 限定符用于同一件事两次。

你想要的可能是MyType const * const(注意const*的位置),它是一个指向const的const指针,即指针本身和pointee都是const。您可以将其从右到左读取为“指向 const MyType 的常量指针”。

【讨论】:

以上是关于我的指针导致“多次使用相同类型的限定符”警告?的主要内容,如果未能解决你的问题,请参考以下文章

初始化丢弃来自指针目标类型的限定符

Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空”

c语言常量指针赋值给变量指针导致警告

《C专家编程》---不知道的那些事

传递'memcpy'的参数2从指针目标类型中丢弃'volatile'限定符

为啥我的返回类型没有意义?