Constant pointer variables in C++
Possible Duplicate:
What is the difference between const int*, const int * const, and int const *?
我知道C++中指针变量的两种变体。
说我有
1 2 3 | mystruct{ int num; } |
变化1:
变化2:
但是,似乎还有第三种变化,我不确定:
变化3:
1 | mystruct const * m3; |
这是什么意思?
变量3与变量1完全相同。
1 2 3 4 5 | 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 |
我个人更喜欢第二个版本而不是第一个版本,因为这就是编译器解析的内容,当您从右向左读取类型时,它会更清晰。:)而且,这也是我在评论中所做的-直观的,不是吗?
哦,是的,以上都适用于
最后一点,作为以后的参考:这里总是有cdecl.org。只要不在C++类型中混合,就可以找出任何声明的含义。编辑:有趣的是,它在
请看这个链接。你会发现那里有更多的变化,并将学习阅读。原理很简单!
C++中的声明由两部分组成:
decl-specifier-seq init-declarator-list ;
decl说明符seq是一个关键字序列,如
1 2 | int typedef unsigned A; int const B = 1; |
它们和
1 2 | typedef unsigned int A; const int B = 1; |
init declarator list是您声明的实体的逗号分隔序列。这些实体中的每一个都获得decl说明符seq的类型,并对其应用了一些修饰符:
1 | int typedef *A, B[10], *const C; |
这里a获取类型"指向int的指针",b是int的数组,c是指向int的常量指针。
正如您在案例中看到的:
1 | mystruct const *m2 = m1; |