C++ Primer_4th学习笔记(2)


2.3.6. 名字的作用域

....

2.3.7. 在变量使用处定义变量

一般来说,变量的定义或声明可以放在程序中能摆放语句的任何位置。变量
在使用前必须先声明或定义。
通常把一个对象定义在它首次使用的地方是一个很好
的办法。
在对象第一次被使用的地方定义对象可以提高程序的可读性。读者不需要返
回到代码段的开始位置去寻找某一特殊变量的定义,而且,在此处定义变量,更
容易给它赋以有意义的初始值。


2.4. const 限定符

定义const 对象

定义一个变量代表某一常数的方法仍然有一个严重的问题。即 bufSize 是
可以被修改的。bufSize 可能被有意或无意地修改。const 限定符提供了一个解
决办法,它把一个对象转换成一个常量。
const int bufSize = 512; // input buffer size
定义 bufSize 为常量并初始化为 512。变量 bufSize 仍然是一个左值(第
2.3.1 节),但是现在这个左值是不可修改的。任何修改 bufSize 的尝试都会
导致编译错误:
bufSize = 0; // error: attempt to write to const object

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

在全局作用域(第 2.3.6 节)里定义非 const 变量时,它在整个程序中都
可以访问。我们可以把一个非 const 变更定义在一个文件中,假设已经做了合
适的声明,就可在另外的文件中使用这个变量:
// file_1.cc
int counter; // definition
// file_2.cc
extern int counter; // uses counter from file_1
++counter; // increments counter defined in file_1
与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义
该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。
通过指定 const 变更为 extern,就可以在整个程序中访问 const 对象:
// file_1.cc
// defines and initializes a const that is accessible to other files
extern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses bufSize from file_1
// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
// ...
本程序中,file_1.cc 通过函数 fcn 的返回值来定义和初始化 bufSize。
而 bufSize 定义为 extern,也就意味着 bufSize 可以在其他的文件中使用。
file_2.cc 中 extern 的声明同样是 extern;这种情况下,extern 标志着
bufSize 是一个声明,所以没有初始化式。
我们将会在第 2.9.1 节看到为何 const 对象局部于文件创建。
非 const 变量默认为 extern。要使 const 变量能够在其他的
文件中访问,必须地指定它为 extern。

Exercise
2.23:
下列哪些语句合法?对于那些不合法的,请解释为什么不
合法。
(a) const int buf;
(b) int cnt = 0;
const int sz = cnt;
(c) cnt++; sz++;

【解答】
(a) 不合法。因为定义const 变量(常量)时必须进行初始化,而buf 没有初
始化。
(b) 合法。
(c) 不合法。因为修改了const 变量sz 的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值