导图社区 第九章内存模型与名称空间
C 自学笔记 第九章内存模型与名称空间,整理了单独编译、存储连续性、作用域和链接性、 定位new运算符、名称空间的知识,快来看看。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
第九章 内存模型与名称空间
1. 单独编译
1. 定义
1. 头文件
包含结构声明和使用这些结构的函数的原型
1. 函数原型
2. #define / const定义的符号常量
注意特定的链接属性
3. 结构声明
4. 类声明
5. 模板声明
6. 内联函数
2. 源代码文件
包含与结构有关的函数的代码,以及相关函数的定义
3. 源代码文件
包含调用与结构相关的函数的代码
4. 防护方案
#ifndef
#endif
2. 存储连续性、作用域和链接性
自动存储持续性
函数定义内声明的变量
一般作用域为局部
静态存储持续性
函数外定义的变量,以及使用关键字static定义的变量
作用域为局部还是全局取决于定义
动态存储持续性
new运算符分配的内存
2. 作用域和链接
作用域scope
名称在文件(翻译单元)的多大范围可见
链接性linkage
名称如何在不同单元间共享
3. 自动存储性持续性
函数内定义的参数和变量的存储持续性为自动,作用域为局部,没有链接性
4. 静态持续变量
1. 静态变量初始化为零
零初始化的
2. 三种链接性
外部链接性
必须在代码块外面声明它
内部链接性
必须在代码块外面声明它,并加上static限定符
无链接性
在代码块内声明它,并加上static限定符
5. 静态持续性、外部链接性
通常称为外部变量
存储持续性为静态,作用域为整个文件
2. 单定义规则
定义声明
注意在函数中定义与全局变量同名的局部变量后,局部变量将隐藏全局变量
引用声明
关键字extern
6. 静态持续性、内部链接性
static限定符作用于整个文件的变量,变量的链接性将为内部的
注意文件定义了静态外部变量时,其名称与另一个文件声明的常规外部变量相同,则在该文件中,静态变量将隐藏常规外部变量
7. 静态存储连续性、无链接性
将限定符用于在代码块中定义的变量,使局部变量的存储连续性为静态的——函数不活动时,该变量仍然 存在
8. 说明符与限定符
1. cv限定符
volatile
使硬件可能修改其中的内容
改善编译器的优化能力
原本编译器进行优化
变量的值在俩次使用之间不会发生变化
使用该关键字将取消这种优化
const
2. mutable
可特别的使某一变量可修改const 的值
3. const
默认情况下全局变量的链接性为外部的
const全局变量的链接性为内部的,相当于static
意思为,如果const放在头文件内的话,每个源代码文件都有属于自己的一组常量
可以用extern关键字来声明它,从而变成链接性为外部的
9. 函数和链接性
默认情况下
函数存储连续性——静态的
函数链接性——外部的
可在文件间共享
可使用static来将链接性设置为内部的
注意静态函数将覆盖外部定义
可以用::来使用外部函数
10. 语言链接性
3. 定位new运算符
1. 存储方案与动态分配
new运算符
只受new和delete运算符控制
不受作用域和链接性规则控制
2. 使用new运算符初始化
在new后加入小括号
图
3. new分配内存失败时
返回空指针
发出异常
4. new:运算符、函数和替换函数
p263
5. 定位new运算符
定义
能够指定需要使用的位置,访问特定的地址
pd2 = new (buffer)double[n]
定位运算符new 将位于delete的管辖之外
4. 名称空间
1. 特点
传统的c++名称空间
作用域
变量对于程序而言可见的范围
新的名称空间特性
方法
通过定义一种新的声明区域来创建命名的名称空间
以此来提供声明名称的区域
并不会与其他名称空间的名称发生冲突
2. using声明和using编译指令
1. using声明将特定的名称添加到它所属的声明区域中
使用作用域解析符 ::
2. using编译之旅将使其中所有的名称均可用
using namespace XXX
3. 二者之间的区别
若在函数中存在某名称,则不能使用using声明导入相同的名称
而using编译指令则可以,并且局部名称将隐藏名称空间名,不过可以使用作用域解析运算符来引出名称空间中的变量
4. 未命名的名称空间
因名称空间没有名称,因此不能显示使用using编译指令或者using声明来指出它的使用
但它在函数内仍然起作用,可以将它作为一种没有链接性,静态变量的替代品
文件
头文件
coordin.h
#include "coordin.h"
源代码文件
file1.cpp
file2.cpp