const
的阅读: 常量指针? 指针常量?#
const int*
和int* const
到底哪个是常量指针, 哪个是指针常量?const int function()
和int function() const
的意思是什么?
会出现这样的问题是因为教学会将 const
放在左边, 即 const int value
, 从而让人混淆.
east const
#
实际上 const int value
与 int 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*
.