C++中变量的持续性、链接性和作用域详解
2012-11-14 18:38
302 查看
持续性:变量在内存中是否存在(即何时分配内存,何时释放内存)
自动:程序开始执行相关函数或代码块时被创建,执行完函数或代码块时被释放
静态:程序整个运行过程中都存在
动态:new分配时创建,delete时释放
注意:
未被初始化的静态变量全部被置为0
只能使用常量表达式来初始化静态变量(包括字面值常量 const常量 enum常量 和sizeof操作符)
作用域:变量是否可见
局部:(代码块)从声明位置到定义它的代码块的结尾可见
全局: (文件) 从声明位置到文件结尾之间可见
特殊:函数原型作用域:包含参数列表的括号内可用
类中声明的成员作用域为整个类
名称空间中声明的变量作用域是整个名称空间
注意:作用域解析操作符::表示使用全局版本
链接性:变量如何共享
无链接性:不能共享(即只在代码块内有效)
内部:只能由同一个文件中的函数共享
外部:可在文件间共享
注意:
在其他文件中使用 extern 重新声明已经定义过的外部变量,使其在其他文件中可见
原始声明称为 定义声明 ,extern声明称为 引用声明
变量的持续性、链接性和作用域可由下表进行判断:
注意:
外部变量和自动变量同名时、局部变量与全局变量同名时:新定义暂时隐藏旧定义
不同文件间的同名的全局静态变量相互覆盖(自己的隐藏其他文件的)
静态局部变量只进行一次初始化,再次调用该函数时不再初始化
寄存器变量:register声明,放在CPU寄存器中,无内存地址,但编译器不一定会满足要求
自动:程序开始执行相关函数或代码块时被创建,执行完函数或代码块时被释放
静态:程序整个运行过程中都存在
动态:new分配时创建,delete时释放
注意:
未被初始化的静态变量全部被置为0
只能使用常量表达式来初始化静态变量(包括字面值常量 const常量 enum常量 和sizeof操作符)
作用域:变量是否可见
局部:(代码块)从声明位置到定义它的代码块的结尾可见
全局: (文件) 从声明位置到文件结尾之间可见
特殊:函数原型作用域:包含参数列表的括号内可用
类中声明的成员作用域为整个类
名称空间中声明的变量作用域是整个名称空间
注意:作用域解析操作符::表示使用全局版本
链接性:变量如何共享
无链接性:不能共享(即只在代码块内有效)
内部:只能由同一个文件中的函数共享
外部:可在文件间共享
注意:
在其他文件中使用 extern 重新声明已经定义过的外部变量,使其在其他文件中可见
原始声明称为 定义声明 ,extern声明称为 引用声明
变量的持续性、链接性和作用域可由下表进行判断:
位置 | 持续性 | 链接性 | 作用域 |
函数定义内声明的变量 (自动变量)(关键字auto) | 自动 | 无链接性 | 局部 |
函数定义内,并且使用static声明 | 静态 | 无链接性 | 局部 |
函数定义外,并且使用static声明(或const) | 静态 | 内部 | 全局 |
函数定义外声明 (外部变量) | 静态 | 外部 | 全局 |
new创建的变量 | 动态 |
外部变量和自动变量同名时、局部变量与全局变量同名时:新定义暂时隐藏旧定义
不同文件间的同名的全局静态变量相互覆盖(自己的隐藏其他文件的)
静态局部变量只进行一次初始化,再次调用该函数时不再初始化
寄存器变量:register声明,放在CPU寄存器中,无内存地址,但编译器不一定会满足要求
相关文章推荐
- C++变量的存储持续性、作用域和链接性
- 详解C/C++语言中Static 变量 或者 static函数的作用
- C++中static、const、static const修饰变量作用详解
- C++中static、const、static const修饰变量作用详解(转)
- C++中static、const、static const修饰变量作用详解
- static作用(修饰函数、局部变量、全局变量) C/C++中static关键字详解
- c++存储持续性、作用域和链接性
- 【C++】学习笔记四十五——存储持续性、作用域、链接性
- 【C++ Primer Plus 9.2】 存储持续性、作用域和链接性
- C++Primer Plus 第九章-存储持续性、作用域和链接性
- C++内存模型与名称空间(存储持续性、作用域、链接性、动态内存分配、命名空间)
- C++的存储持续性(自动、静态、动态),作用域,链接性
- C++之浅谈存储持续性、作用域和链接性
- 变量的持续性、链接性和作用域
- C/C++中作用域详解
- C++ 成员变量的初始化顺序问题详解
- 基于C++全局变量的声明与定义的详解
- C/C++作用域详解
- C和C++中static作用详解
- 详解volatile在C++中的作用volatile的介绍