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 integer
const int a
:a constant integer
完全一致
Reference
C++里 const int 与 int const 有什么区别? - 王国潇的回答 - 知乎 https://www.zhihu.com/question/443195492/answer/1723886545
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!