关于const 限定符总结
来源:互联网 发布:火星时代有网络班 编辑:程序博客网 时间:2024/06/03 12:35
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是一个常量指针,所指向的对象是一个双精度浮点型常量。