C++作用域总结

原创 2012年03月22日 09:40:44

在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++域作用符详解

c++里的范围有以下几种,全局作用域,名空间作用域,类作用域。编译器在编译时,默认从同级别的范围内开始解析符号,采用由内而外的顺序进行解析函数名。::被称为作用域解析符,用于引入一个作用域。::bin...
  • Bruce_0712
  • Bruce_0712
  • 2016年12月31日 14:53
  • 369

C++学习笔记(初级篇)——作用域与“extern”关键字

作用域,顾名思义,就是指某个标识符在程序中的有效区域。 在C++中,按作用域的大小,一般可分为局部作用域和全局作用域。 1.局部作用域 局部作用域用大括号,即{},来定义,大括号括起来的范围就是一个局...
  • Dr_Neo
  • Dr_Neo
  • 2015年12月11日 19:17
  • 1098

C++之作用域运算符::

C++使用::运算符搞定很多东西,其中最基本的一个用处就是用来决议多继承中的重名成员。::运算符的本质是:左操作数是一个scope,右操作数是这个scope内的名字,可以是 scope,class,m...
  • gyymen
  • gyymen
  • 2016年12月09日 08:33
  • 1451

C++ 指针与作用域

我们知道,野指针指
  • xuzewei_2
  • xuzewei_2
  • 2014年04月08日 19:07
  • 2488

C++ “::” 作用域符 双冒号

一、 :: 是作用域符,是运算符中等级最高的,它分为三种: 1)global scope(全局作用域符),用法(::name) 2)class scope(类作用域符),用法(class::name)...
  • qq_33266987
  • qq_33266987
  • 2016年12月16日 10:09
  • 1798

C++ 函数作用域

变量作用域 局部作用域、全局作用域、文件作用域   局部变量:也称内部变量,声明在函数内(包括main函数),作用域开始于变量声明之处,结束于函数或块结束处;   全局变量:也称外部变量,声明在函数外...
  • ForestRound
  • ForestRound
  • 2016年10月01日 11:42
  • 2213

C++:类作用域

C++:类作用域标签(空格分隔): c++C类作用域 类成员的三种访问形式 类作用域常量 c11 作用域内枚举 全局变量可以在文件的任意位置使用它,但是局部变量只能在其所属的代码块中使用。C++中引入...
  • qq_32583189
  • qq_32583189
  • 2016年09月05日 10:37
  • 2013

C++中全局变量与局部变量作用域问题

C++中定义在函数体外的全局变量有全局作用域,而定义在函数体内的局部变量的作用域则是从变量声明一直到函数结束,那么他们到底具体是什么样子的,我做了一下实验。和大家分享一下实验结果。(额,这三种情况做实...
  • RDmoonlight
  • RDmoonlight
  • 2014年08月08日 01:25
  • 1246

C/C++语言中变量作用域:局部变量,全局变量,文件级变量

C/C++语言中的变量分为全局变量和局部变量。这种划分方式的依据是变量的可见范围或者叫做作用域。1 局部变量局部变量指的是定义在{}中的变量,其作用域也在这个范围内。虽然常见的局部变量都是定义在函数体...
  • smstong
  • smstong
  • 2016年01月14日 15:03
  • 6220

C++作用域 与 四种强制类型转换

C++四种强制类型转换:const_cast,static_cast,dynamic_cast,reinterpret_cast。 const_cast 用来去除数据类型中的const属性。在《C...
  • CamilaJ
  • CamilaJ
  • 2016年11月20日 13:35
  • 171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++作用域总结
举报原因:
原因补充:

(最多只允许输入30个字)