c++ --作用域与可见域

专题--作用域与可见域

一、作用域  

  c++作用域可分为5类:函数原型作用域、块作用域、类作用域、文件作用域和全局(程序)作用域(跨文件)。

1. 函数原型作用域(最小的作用域)

  函数原型:int func(int x); 这是一个函数声明,函数形参x 的作用域就时所谓的函数原型作用域。

2. 块作用域

  一对大括号 { ... } 内的一段程序,块中声明的标识符作用域就是块作用域。

3. 类作用域

  类成员的作用域。

4. 文件作用域(static

  全局静态变量具有全局作用域,从声明处开始,到文件(.cpp文件)结尾处结束。

5. 全局(程序)作用域(extern

  全局变量具有全局作用域,只要在使用前对其进行声明(可定义性声明/引用性声明),便可在程序(有若干个文件组成)的任意位置使用全局变量。

二、可见域

  作用域指的是变量理论上有效的源代码区域,而可见域指的是该变量实际的内存区域。如果没有屏蔽发生,可见域和作用域应该是等价的

  只有在可见域内才能对变量进行合法的访问。

  引用声明不能提供全局可见性(不具备跨文件性质),这意味着,在使用全局变量之前,必须在当前文件或当前块中进行引用声明。

  内部静态变量(局部static)的作用域、可见域及屏蔽法则和自动变量一样,但外部静态变量需要注意:在一个文件中声明的外部静态变量(全局static),将屏蔽其他文件中定义的同名全局变量。但是,不允许在同一个文件中定义同名的全局变量和外部静态变量

  默认情况下,函数是全局的,可以在不同的文件中共享。和全局变量一样,使用函数前必须要对其进行声明(包含有函数声明的头文件)。

  可使用static关键字将函数声明为文件内部的,这样,只能在本文件中使用该函数,在函数定义和声明中都要使用static关键字。static函数将屏蔽其他文件中外部定义的同名函数


原文地址:https://www.cnblogs.com/cygalaxy/p/7103674.html