C++作用域总结

在C++中,涉及到作用域的语法很多,经常混淆。所以对作用域与作用域作一个总结,注意这个总结还不完整,当遇到新的语法时再继续补充。


一、全局作用域(global scope)。

概念:定义在函数外部的名字具有全局作用域。具有全局作用域的名字可以在整个程序中访问,即使不同文件也可以访问。


二、如何访问全局作用域的变量?

1. 变量在本文件中定义。

直接访问。

比如:

// file_1.cpp
int counter;   // definition
// file_1.cpp
cout << counter++ << endl;  

2. 变量在其它文件中定义。

在访问前先要声明,然后才可以使用。例如:

// file_1.cpp
int counter;   // definition
// file_2.cpp
extern int counter; // declaration
cout << couter++ << endl; // counter是在文件file_1.cpp中定义的全局变量
声明没有定义变量,只是告诉编译器在其它文件中有counter这个变量。所以在file_2.cpp中,counter是file_1.cpp定义的全局变量。
注意:我们要区分其它文件与Include。如果include了这个文件,就不再是其它文件了。比如下面的例子,这个时候counter对file_2.cpp是可见了。因为file_2.cpp已经包含了文件file_1.cpp。
// file_2.cpp
#include file_1.cpp

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

在全局作用域定义的const变量,只在该文件中是全局变量,在文件外部是不可见的。

// file_1.cpp
const int counter = 10;   // definition
// file_2.cpp
cout << counter++ << endl;  // error, 文件file_1中的counter在file_2中不可见 
有一种办法可以把const变量变为全局变量,其它文件也可以访问。方法是在定义时加上extern修饰符,这样在整个程序中都可以访问该const对象了。

// file_1.cpp
extern const int counter = 10;   // definition
// file_2.cpp
cout << counter++ << endl;  // OK 
当然,file_1.cpp定义的counter必须是在全局作用域定义的。


注意:这里的extern修饰符与普通的extern修饰符作用不同。这里是将const变为整个程序的全局变量,而普通的extern修饰符是声明一个变量。同一个符号在不同的上下文中意思不同甚至完全不同,这就是C++难以掌握的原因之一,所以总结就变得更加重要了。


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

总结的不完整,以后见到涉及作用域的知识点再继续补充。




阅读更多
个人分类: 语言
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

C++作用域总结

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭