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 &pconst int &p

  • int const &p :左边有东西,作用的就是 (int const) &p,代表a reference to a constant integer, 即p的值不可以被修改(即不能出现p = 5这种操作);

  • const int &p : 它的const左边没东西,因此和右边结合,就是(const int) &pconst修饰int表示a const integer类型的引用。代表a reference to a const integer,因此和上面的是一回事。

int const *aint* const aconst int* a

  • int const *aconstint结合因此这是一个constant integer, 因此这是一个 a pointer to a constant integer,即指针a可以变,但是所指向的那个值不能变。
  • int* const aconst作用于*,说明是一个a constant pointer to a integer,这就表示a所保存的地址是不可以变的,但是这个地址指向的值是可以变的。
  • const int* aconst左边没东西,因此只能作用于int,说明只是一个a pointer to a constant integer,即指针a可以变,但是所指向的那个值不能变,因此和第一个是一回事。

int const aint const a

这俩很简单,分析方法同上:

  • int const aa constant integer
  • const int aa constant integer

完全一致

Reference

C++里 const int 与 int const 有什么区别? - 王国潇的回答 - 知乎 https://www.zhihu.com/question/443195492/answer/1723886545


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!