您的位置:首页 > 编程语言 > C语言/C++

C++中变量的持续性、链接性和作用域详解

2012-11-14 18:38 302 查看
持续性:变量在内存中是否存在(即何时分配内存,何时释放内存)
自动:程序开始执行相关函数或代码块时被创建,执行完函数或代码块时被释放
静态:程序整个运行过程中都存在
动态:new分配时创建,delete时释放

注意:

未被初始化的静态变量全部被置为0

只能使用常量表达式来初始化静态变量(包括字面值常量 const常量 enum常量 和sizeof操作符)

作用域:变量是否可见

局部:(代码块)从声明位置到定义它的代码块的结尾可见
全局: (文件) 从声明位置到文件结尾之间可见
特殊:函数原型作用域:包含参数列表的括号内可用
类中声明的成员作用域为整个类
名称空间中声明的变量作用域是整个名称空间

注意:作用域解析操作符::表示使用全局版本

链接性:变量如何共享

无链接性:不能共享(即只在代码块内有效)

内部:只能由同一个文件中的函数共享
外部:可在文件间共享

注意:

在其他文件中使用 extern 重新声明已经定义过的外部变量,使其在其他文件中可见

原始声明称为 定义声明 ,extern声明称为 引用声明

变量的持续性、链接性和作用域可由下表进行判断

位置持续性链接性作用域
函数定义内声明的变量 (自动变量)(关键字auto)自动无链接性局部
函数定义内,并且使用static声明静态无链接性局部
函数定义外,并且使用static声明(或const)静态内部全局
函数定义外声明 (外部变量)静态外部全局
new创建的变量动态
注意:

外部变量和自动变量同名时、局部变量与全局变量同名时:新定义暂时隐藏旧定义

不同文件间的同名的全局静态变量相互覆盖(自己的隐藏其他文件的)

静态局部变量只进行一次初始化,再次调用该函数时不再初始化

寄存器变量:register声明,放在CPU寄存器中,无内存地址,但编译器不一定会满足要求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: