C++ Primer

    xiaoxiao2021-03-25  64

    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 的值。

    转载请注明原文地址: https://ju.6miu.com/read-33381.html

    最新回复(0)