标签:
一、关于初始化
1. const对象一旦创建后就不能再改变,所以const对象必须初始化。
2. const对象可以执行普通类型的绝大多数操作,但是不能执行改变其内容的操作。
const int i = getsize(); //正确:运行时初始化 const int i = 100; //正确:编译时初始化 i=500; //错误:不能改变const常亮 const int k; //错误:k未初始化
二、默认情况下,const对象只在文件内有效
当以编译时初始化的方式定义一个const对象时,就如对下面bufSize的定义一样,编译器将在编译过程中把用到该变量的地方全部替换为对应的值。也就是说,编译器会找到代码中所有bufSize的地方,替换为512.
为了执行上述变换,编译器必须知道变量的初始值。如果程序包含多个文件,则每个用了const对象的文件都必须得能访问到它的初始值才行。为了做到这一点,就必须在每一个用到该变量的文件中定义它。为了支持这一用法,同时避免对同一变量的重复定义。默认情况下,const对象被设定为只在文件内有效。在多个文件中出现同名的const对象时,等同于与不同文件中分别定义了独立的变量。
有时候有的const变量,初始值不是常量表达式,但又确实有必要在文件间共享,那么可以像普通变量一样采用extern关键字。
解决办法是,对于const变量不管是声明还是定义,都加上extern关键字,这样只需要定义一次就好了,如下所示。
//file1.cpp 中定义并初始化了一个常量,该常量要被其他文件共享。 extern const int bufSize = fcn(); //file1.h头文件 extern const intobufSize = fcn();
三、const引用
把引用绑定到const对象上,称之为常量引用。
const int i=0; const int& r1=i; //正确,引用及其对应对象都时常量。 r1 = 32; //错误,r1是常量引用 int & r2=i; //错误:不能通过非常量引用指向一个常量对象。
允许将const引用绑定到一个普通变量身上
int i=42; const int& r1=i; // 允许将const int& 绑定到 普通int对象上 const int& r2=42 //正确,r2是一个常量引用。 const int& r3=r1*2; //正确,r3是一个常量引用 int & r4=r1*2; //错误,r4是普通引用
标签:
原文地址:http://www.cnblogs.com/gexinmen/p/5971433.html