const 限定符

/*
 *  const 限定符
*/

//下列语句有两个地方不妥,且都和 6 作为循环上界有关。
for(int i = 0; i<6; ++i){
		// ...
}
//    第一个问题是程序可读性不强,不知道i 和 6比较的意义,6的作用何在?
//6 被称作 魔数(magic number),它的意义在上下文中没有体现出来,就好象是魔术般的从空中出现。
//    第二个问题是程序的可维护性。假设这个程序很大,上述这个语句中6会频繁的出现,且6 被赋予的意义除了作为循环上界还可能有其他目的,如果要改///变这个循环上届,则每次必须确定6 的意义,改错了会导致程序崩溃。
//    
//    解决这个问题的方法是使用一个初始化为6的对象(这里指的对象就是内存中
//具有类型的局域,也就是说,计算左值就会产生对象,对于是内置类型,类类型,
//是有名字还是没名字,是只可读还是可写都是对象)。
int buffer_size = 6;
for(int index = 0; index != buffer_size; ++index){
		//....
}
//    通过对变量命名增加可读性,循环现在对对象测试,而不是对字面值常量6测试.
//然而定义一个变量表示一个重要的常数仍然有个严重的问题。即该变量是可以被修改
//的。const限定符提供一个办法,它可以将该对象(变量)转换成一个常量。

const int buffer_size = 6;

//变量buffer_size仍然是个左值,但是这个左值是不可以修改的
buffer_size = 1024;  //error: attempt to write to const object
//因为const常量定义后不能被修改,所以定义时必须要初始化:
const int i, j = 0; //error: i is uninitialized const 

//const 对象默认为文件的局部变量

//全局作用域下,非const变量在整个程序中都可以被访问
//file_1.cc
int counter; //definition in the file_1
//file_2.cc
extern int counter; 
++counter;  //increments counter defined in file_1

//通过指定const变更为 extern,就可以在整个程序中使用
//file_1.cc
extern const int con_val = func(); //defines and initializes a const 
//file_2.cc 
extern const int con_val; //use con_val from file_1, it's just a statement.
//use con_val defined in file_1
for(index = 0; index != con_val; ++index){
		//...
}

//非const变量默认为extern。要使const变量能够在其他文件中被访问,就必须指定它为extern。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值