const关键字修饰 相关问题
const关键字修饰 相关问题
const修饰问题很麻烦,一个不错的识别方式是:const默认作用于其左边的东西,否则作用于其右边的东西:
辨别方法
const int*
const只有右边有东西,所以const修饰int成为常量整型,然后*再作用于常量整型。所以这是a pointer to a constant integer(指向一个整型,不可通过该指针改变其指向的内容,但可改变指针本身所指向的地址)
int const *
再看这个,const左边有东西,所以const作用于int,*再作用于int const所以这还是a pointer to a constant integer(同上)
因此上面两个是同一个东西
int* const
这个const的左边是*,所以const作用于指针(不可改变指向的地址),所以这是a constant pointer to an integer,可以通过指针改变其所指向的内容但只能指向该地址,不可指向别的地址。
const int* const
这里有两个const。左边的const的左边没东西,右边有int那么此const修饰int。右边的const作用于*使得指针本身变成const(不可改变指向地址),那么这个是a constant pointer to a constant integer,不可改变指针本身所指向的地址也不可通过指针改变其指向的内容。
int const * const
这里也出现了两个const,左边都有东西,那么左边的const作用于int,右边的const作用于*,于是这个还是是a constant pointer to a constant integer
int const const
左边的const:它左边有int,因此这个const修饰int变为常量整型
右边的const:它左边有个*,因此这个const修饰*,因此这个const作用于指针(不可改变指向的地址)。
此时我们发现现在还剩下一个*,表示是int const * const的指针
因此这就是一个a pointer to (a constant pointer to a constant integer),其实就是指向上边那个的东西的指针。
int const const const
分析同上:这是一个a (constant) pointer to (a constant pointer to a constant integer),就是int const const 不可改变指向地址的形式。
常见的 引用/指针/变量 的例子:
int const &p 和const int &p
int const &p:左边有东西,作用的就是(int const) &p,代表a reference to a constant integer, 即p的值不可以被修改(即不能出现p = 5这种操作);const int &p: 它的const左边没东西,因此和右边结合,就是(const int) &p,const修饰int表示a const integer类型的引用。代表a reference to a const integer,因此和上面的是一回事。
int const *a和int* const a和const int* a
int const *a:const和int结合因此这是一个constant integer, 因此这是一个a pointer to a constant integer,即指针a可以变,但是所指向的那个值不能变。int* const a:const作用于*,说明是一个a constant pointer to a integer,这就表示a所保存的地址是不可以变的,但是这个地址指向的值是可以变的。const int* a:const左边没东西,因此只能作用于int,说明只是一个a pointer to a constant integer,即指针a可以变,但是所指向的那个值不能变,因此和第一个是一回事。
int const a和int const a
这俩很简单,分析方法同上:
int const a:a constant integerconst int a:a constant integer
完全一致
Reference
C++里 const int 与 int const 有什么区别? - 王国潇的回答 - 知乎 https://www.zhihu.com/question/443195492/answer/1723886545
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!