Hao*_*est 6 c++ pointers constants
我知道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)
这是什么意思?
变体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的变量排序.
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |