1.初始化const 对象
目的:把一个对象转换成常量,不能被修改。
const int bufsize=512;//定义后必须初始化
bufsize=0;//不能被修改
2.const 对象怎样在全文件中被使用
const对象在默认的状态下,只能被本文件使用,但有时候在一个文件中定义const变量,在其他多个文件中能够声明和使用,采用在const 变量前加上extern关键字,这样就能实现上述的功能。
//file_1.cc
extern const int bufsize=fcn();
//file_1.h
extern const int bufsize;
解析:file_1.cc定义并初始化bufsize,因为bufsize是常量,必须用extern加以限定才能被其他文件使用。file_1.h头文件的声明也是由extern 限定,其作用是指明bufsize的定义在其他文件中出现。
3.const的引用
①、必须用与该引用同类型的对象初始化(但是有一种情况除外,在②中介绍)
int ival=1024;
int &refval=ival;//refval和ival是同一个类型
解析:引用在定义后要初始化,需要初始化的对象的类型必须和引用的类型保持一致。
const int ci=1024;
const int &r1=ci;//正确,引用及其对应的对象都是常量
r1=42;//错误,r1是对常量的引用
int &r2=ci;//错误,试图让一个非常量引用指向一个常量对象。
解析:因为不允许直接为ci赋值,也不能通过引用去改变ci的值,所以对r2的初始化是错误的,因为与普通的引用不同的是:对常量的引用不能被用作修改所绑定的对象。
②、在初始化常量引用时允许用任意表达式作为初始值,只要表达式的结构能够转换成引用的类型。
//ri 引用int型的数
double dval=3.14;
const int &ri=dval;
解析:上面的代码经过一下转换:
const int temp=dval;//由双精度浮点数生成一个临时的整型常量
const int &ri=temp;//ri绑定这个临时变量
4.指针和const限定符
①、指向const 对象的指针
a、指针指向const对象,不允许用指针来改变所指向的const对象的值。
例如:
const double pi=3.14;//pi是常量,其值不能改变 double *ptr=pi//错误:ptr是普通指针 const double *ptr=pi//ptr可以指向双精度常量 *ptr=42;//不能给ptr赋值
b、把一个const对象的地址赋给一个普通的非const对象的指针
例如:
const double pi=3.14159;
double *ptr=pi//ptr是普通变量
const ddouble *cptr=pi//正确
c、允许把非const对象的地址赋给指向const对象的指针
例如:
double dval=3.14;
const double *cptr=&dval;//正确
②、const指针(const point)
例如: int errnumb=0;
int *const curerr=&errnumb;//curerr将一直指向errnumb
const double pi=3.14159;
const double *const pip=pi//pip是一个指向常量对象的常量指针
解析:离curerr最近的符号是const,意味着curerr本身是一个常量对象,声明符中下一个符号是“*”,说明curerr是一个常量指针,最后该语句的基本类型是int型对象;与之相似,pip是一个常量指针,所指向的对象是一个双精度浮点型常量。