cout << "But global warming - " <<:: warming:
cout << " degrees.\n":
下面是该程序的输出:
Global warming is 0.3 degrees.
Updating global warming to 0.4 degrees.
Global warming is 0.4 degrees.
Local warming - 0.8 degrees.
But global warming = 0.4 degrees.
Global warming is 0.4 degrees.
2. 程序说明
程序清单9.5中程序的输出表明,main()和update()都可以访问外部变量warming。注意,update()修
改了warming,这种变化在接下来使用该变量时显现出来。
update()函数使用关键字 extern对 warming变量进行重新声明。该关键字的意思是“通过以前被外部
定义的名称使用该变量”。由于即使省略该声明,update()的功能也相同,因此该声明是可选的。它指出该
函数被设计成使用外部变量。原来的声明:
double warming = 0.3:
称为定义声明(defining declaration)或简称为定义(definition)。它给该变量分配存储空间。重新声明:
extern double warming:
称为引用声明(referencing declaration),或简称为声明(declaration)。它不给变量分配存储空间,因为它
引用已有的变量,只能在引用其他地方(或函数)定义的变量的声明中使用关键字extern。基本上,该声
明指出,使用外部定义的变量 warming。在引用声明中指定的类型应与定义声明中相同;另外,不能在引
用声明中初始化变量:
extern double warming - 0.5: // INVALID
仅当声明将为变量分配存储空间时(即定义声明),才能在声明中初始化变量。毕竟,初始化指的是在
分配内存单元时给它赋值。
local()函数表明,定义与全局变量同名的局部变量后,局部变量将隐藏全局变量。例如,local(函数
显示warming的偵时,将使用warming的局部定义。
C++比C语言进了步 -- 它提供了作用域解析操作符(:)。当放在变量名称前面时,该操作符表示
使用变量的全局版本。因此,local()将warming显示为0.8,但将 :: warming显示为0.4。后面介绍名称空间
和类时,将再次介绍该操作符。
全局变量和局部变量
既然可以选择使用全局变量或局部变量,那么到底应使用哪种呢?首先,全局变量很有吸引力 -- 因
为所有的函数能访问全局变量,因此不用传递参教,但易于访问的代价很大 -- 程序不可靠。计算经验表
明,程序越能避免对教据进行不必要的访问,就越能保持数据的完整性。通常情况下,应使用局部变量,
应在需要知晓时才传递数据,而不应不加区分地使用全局变量来使数据可用。读者将会看到,OOP在数据
隔离方面义向前迈进了一步
不过,全局变量也有它们的用处。例如,可以让多个函数使用同一个数据块(如月份名数组或原子量
数组)。外部存储尤其适于表示常量数据,因为这样可以使用关键字const来防止数据被修改。
const char * const months [12] =
"January". "Yebruary". "March". "April", "May",
"June", "July", "August", "September", "October",
"November". "December"
在上述范例中,第一个const防止字符串被修改,第二个const确保数组中每个指针始终指向它最初指
向的宇符串
1
文章讲述了C++中全局变量和局部变量的区别,强调了extern关键字在函数间共享变量的作用,以及如何通过作用域解析操作符控制数据访问。同时讨论了何时选择全局变量和局部变量,以及常量数据的存储方式。

1932

被折叠的 条评论
为什么被折叠?



