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++之对象的使用(二):四种对象生存期和作用域、static 用法总结

一、四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象、静态全局对象 全局对象的构造先于mai...

从零开始学C++之对象的使用(二):四种对象生存期和作用域、static 用法总结

一、四种对象生存期和作用域 栈对象 隐含调用构造函数(程序中没有显式调用) 堆对象 隐含调用构造函数(程序中没有显式调用),要显式释放 全局对象、静态全局对象 全局对象的构造先于m...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C++中变量的作用域和生命周期

#include "iostream.h" void main() { int m=1,n=2,k=3; cout<<"m="<<m<<"n="<<n<<"...

C++ 局部变量的作用域 --- 以酒店房间为比喻说明

问题:Can a local variable’s memory be accessed outside its scope? 有一段局部变量的内存,可以从其范围之外访问它么? 如下代码: ...

28.c/c++程序员面试宝典-继承时的类作用域

c/c++程序员面试宝典-继承时的类作用域

C/C++中作用域详解

作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的...

【C++ Primer Plus 9.2】 存储持续性、作用域和链接性

9.2 存储持续性、作用域和链接性(C++存储数据的方案)了解:C++存储数据的方案;9.2.1 存储持续性、作用域、链接不同的C++存储方式是通过存储持续性、作用域和链接性描述的。 1. 存储持...

c++中变量的作用域

全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 局部变量也只有局部作用域,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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