我的指针导致“多次使用相同类型的限定符”警告?
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' 的初始化导致指针悬空”