C++中的常量指针变量

Hao*_*est 6 c++ pointers constants

可能重复:
const int*,const int*const和int const*之间有什么区别?

我知道C++中指针变量的两种变体.

说我有

mystruct{
    int num;
}
Run Code Online (Sandbox Code Playgroud)

变化1:

const mystruct* m1;表示m1中的成员变量不能更改,例如,m1->num = 2会产生错误.

变化2:

mystruct *const m2 = m1;表示一旦m2设置为指向m1,如果随后设置,将产生错误m2 =m3.

然而,似乎有第三种变化,我不确定以下属性:

变化3:

mystruct const * m3;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

Xeo*_*Xeo 7

变体3与变体1完全相同.const适用于左侧的任何内容.如果没有(第一个变体),它适用于它的权利.此外,你错过了一个变种.

const int* pi1; // varyable pointer to constant int
int const* pi2; // again - varyable pointer to constant int
int* const pi3; // constant pointer to varyable int
// you're missign the next
int const * const pi4; // constant pointer to constant int
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢第二个版本到第一个版本,因为这是编译器解析的内容,当你从右到左阅读类型时,它更清晰.:)此外,这就是我在评论中所做的 - 直观,不是吗?

哦,是的,以上所有内容也适用volatile.他们一起被算作cv-qualifiers(cv= const volatile).

作为最后一点,未来的参考文献:总是有cdecl.org.只要不混合使用C++类型,就可以找到可能任何声明的含义.编辑:有趣的是,它扼杀了int const i;.我想我是否需要研究是否在C++中引入了cv-qualifiers的变量排序.