C++中的const

 

1. 类型限定符

根据《C语言参考手册》4.4.3中的说明:

类型限定符指定了类型的额外属性,只有当通过左值(指示符)访问具有限定符的对象时,这些限定符才发挥作用。
当限定符在需要一个值而不是一个指示符的上下文环境中使用时,该限定符就不会对类型产生任何影响。也就是说,在表达式 L=R 中,
=操作符的右操作数的类型总是非限定版本的,即使它在声明时使用了类型限定符。
但是,左操作数仍然保持它的限定性,因为它是作为左值使用的。

具有const限定类型的左值表达式的值无法被修改。

const int ic = 37;  // ic是一个整型常量
ic = 5;             // invalid
ic++;               // invalid
int *const p1;      // p是一个常量指针,p的地址不能改变,但可以修改它所指向/引用的对象
int var = 20;
p1 = &var;
*p1 = 123;          // OK, p1可以修改它所引用的对象
p1++;               // invalid, p1的地址不能改变
const int *p2;      // p是一个 "指向常量的指针", p指向的内容不能改变,
                    // p本身可以改变(即指针本身不是常量)
int c1=10;
const int c2=20;
p2 = &c2;          // OK.
p2 = &c1;          // OK.

2. C++中

C++中,除了兼容C的用法外,还多了许多其它的规则。

  • const 可以作用在对象上,const 对象一旦创建后其值不能被改变
  • 只能在const类型的对象上执行不改变其内容的操作
  • 默认情况下,const 对象仅在文件内有效;若要在多个文件之间共享 const 对象,必须在变量定义之前加上 extern 关键字
  • 可以把引用绑定到 const 对象上,称之为 对常量的引用;对常量的引用,本质上是对 const 的引用

3. 顶层 const 和底层 const

  • 顶层 const 表示指针本身是个常量
  • 底层 const 表示指针所指向的对象是个常量

更一般地,顶层 const 可以表示任意的对象是常量。

posted @ 2021-08-06 20:20  Hartmon  阅读(75)  评论(0编辑  收藏  举报