1、普通const常量
1、定义全局const常量,该常量的作用局限于定义该常量的原文件中,若外部文件需要使用该常量,则需加extern关键字。
//test1.cpp
const int a=0; //作用域限于文件
extern const int b=0 //可以供外部使用
. .....
//test2.cpp
extern const int a; //错误
extern const int b; //正确,声明外部常量
2、const修饰指针
1、指向常量的指针 int const *p //不能通过指针p修改所指对象的值;
2、指向变量的常量指针 int *const p=a //不能修改指针p所指的对象;
3、指向常量的常量指针 char const *const p="abc" //即不能通过指针p修改所指的内容,也不修改指针p所指的对象。
(可以用指向常量的指针指向非常量对象,也可以用指向非常量的指针指向常量对象)
3、const修饰引用
const引用即指向const对象的引用,可以初始化为不同类型对象的引用或者初始化为右值;
非const引用只能绑定到与该引用同类型的对象上。
4、const成员函数
const修饰类成员函数,改变了隐含的this形参的类型,为一个指向const对象的指针,因而,该成员函数不能修改调用它的对象。
5、const形参与函数重载
可以基于函数的引用形参是指向const对象还是指向非const对象,实现函数重载:
1、如果传递const对象,则只有带const引用形参的版本才是该调用可行的函数,如果形参是普通引用,则不能将const对象传递给这个形参;
2、如果是传递的是非const对象,则任意一种函数皆可行,但是,将const引用初始化为非const对象,需要转化,而非const形参的初始化则是精确匹配。