const 的阅读: 常量指针? 指针常量?

const 的阅读: 常量指针? 指针常量?#

  • const int*int* const 到底哪个是常量指针, 哪个是指针常量?

  • const int function()int function() const 的意思是什么?

会出现这样的问题是因为教学会将 const 放在左边, 即 const int value, 从而让人混淆.

east const#

实际上 const int valueint const value 完全等价, 因此我建议始终将 const 放在右边, 这称为 east const.

这样一来, const 的阅读就被简化为一句话: const 始终作用于左边的内容.

int const

const 作用于 int, 即 int 不可修改.

int const*

const 作用于 int, 即不能通过该指针对指向的 int 对象进行修改.

int* const

const 作用于 *, 即不能修改该指针对象的内容, 指针存储了指向对象的地址, 存储的地址不可改变即意味着不能切换该指针指向的对象.

int const&

const 作用于 int, 即不能通过该引用对引用的 int 对象进行修改.

int& const

错误: const 只能作用于对象, 而 引用不是对象.

int const function()

const 作用于返回值 int, 即函数的返回值是 int const.

class Widget { int function() const; };

const 作用于函数 function(), 即函数本身是 const 的, 即 const 成员函数, 不能通过该函数修改类的数据.

常量指针? 指针常量?#

理解了 const 的阅读后, 这两个中文术语的阅读就成了一道语文语法题.

常量指针

"常量指针" 是偏正短语, 其中 "常量" 是修饰语, 而 "指针" 是中心语. 与 const 作用于左边相反, 中文修饰语是作用于右边, 调换为作用于左边则是 "指针 常量", 即 T* const.

指针常量

"指针常量" 是偏正短语, 其中 "指针" 是修饰语, 而 "常量" 是中心语. 与 const 作用于左边相反, 中文修饰语是作用于右边, 调换为作用于左边则是 "常量 指针", 即 T const*.