天天看点

【温故而知新】C和C++10:关于const限定符

const关键字来源自constant,即是“常数、常量”的含义。在C/C++中,用于限定一个不能改变其值的变量。const类型的对象必须在定义的时候进行初始化(可以在编译时或者在运行时),并且一旦初始化完成后,这个值就不能再被改变。通常情况下,const对象的有效范围是当前文件;如果多个文件中出现了同名的const变量,则认为是每个文件中都定义了不同的变量。如果希望在多个文件中共享这个对象,则在声明和定义的时候添加extern关键字,指明该对象并非本文件独有,可能被其他文件使用。

const引用:

对于一个const变量,也一样可以对其定义一个引用。我们知道,C++不允许随意改变某个引用所绑定的对象,因此一个对const对象引用不论是引用对应对象还是这个对象的值都不能改变,所以对于const对象的引用也可以称之为“常量引用”。由此带来的一个要求就是,指向该const对象的引用也必须是const类型,如:

定义一个const引用可以绑定一个非const的值,但是不允许通过该引用修改这个值,如:

const和指针:

const与指针的关系相对于引用要复杂一些,因为涉及到指向常量的指针和自身是常量的指针两种关系。两者的区别如下:

如何区别呢?简单地看,最前面的const表示指针所指向的是一个const对象,而*后面的const表示指针不能指向其他的对象,也就是指针本身是const类型的。这两者也分别被称作底层const和顶层const。如果某个对象是const型,那指向这个对象的指针也必须以const定义在最前面。

继续阅读