C++ Primer Plus 第9章 内存模型和名称空间

第九章 内存模型和名称空间

1.程序一般分为3部分:
头文件:包含结构声明和使用这些结构的函数的原型
源代码文件:包含与结构有关的函数的代码
源代码文件:包含调用与结构相关的函数的代码

2,头文件常包含内容:
函数原型
使用#define或const定义的符号和常量
结构声明
类声明
模板声明
内联函数

3.防止多次包含同一个头文件
预处理器编译指令
#ifndef XXXX_H_
#define XXXX_H_
...
#endif

4.C++使用3中方案存储数据
自动存储持续性  在所属函数内创建,跟随函数执行完毕被释放
静态存储持续性  在函数外定义的变量和使用static修饰的变量
动态存储持续性,自由存储,堆 使用new申请

5.作用域(scope)描述了名称在翻译单元的多大范围内可见
链接性(linkage)描述了名称如何在不同单元间共享

6.函数原型作用域中使用的名只在参数列表的括号内可见
所以原型的变量标识可有可无

7.对自动变量进行管理,方法是流出一段内存,称为栈
栈是后进先出LIFO,使用栈底和栈顶指针,就可以管理自动变量了

8.如果没有初始化静态变量,将会对静态数组和结构的每一个成员设置为0

9.
存储描述     持续性      作用域 链接性  如何声明
自动          自动        代码块 无     在代码块
寄存器        自动        代码块 无     代码块,用register
静态,无链接性 静态       代码块 无     代码块,使用static
静态,外部链接 静态       文件   外部   不在任何函数内
静态,内部链接 静态       文件   内部   不在任何函数内,使用关键字static

10.对于静态变量,会先执行零初始化,然后再计算初始化表达式

11.单定义规则,变狼只能有一次定义。当然,是指在同一个作用域内。另外,局部变量会覆盖同名全局变量

12.作用域解析运算符::,对变量使用,就是叫编译器使用该变量的全局版本

13.mutable修饰变量,指出即使结构或类的对象是const,修饰的成员变量也可以被修改

14.在全局中声明的const变量,他的链接性是内部的,相当于使用了static

15.C++编译器会对函数名称做名称修饰,而C不会、为使用C库的函数
extern "c"{}
extern "c++" {}

16.new定位运算符P321

17.名称空间

声明区域:可以在其中声明的区域
潜在作用域,从声明点到声明区域结束

名称空间可以是全局的,可以在另一个名称空间内,不能再代码块内

名称空间是开放的,可以多次将不同成员加入名称空间内

namespace Name{}

using声明 如using std::cout
using编译指令 如using namespace std

对名称空间可以嵌套

未命名的名称空间他的链接性是内部的

一个名称空间包含另一个名称空间,则声明大的名称空间相当于声明了两个名称空间

18.名称空间及其前途
指导原则
使用已命名的名称空间中声明的变量,而不是外部全局变量
使用已命名的名称空间中声明的变量,而不是静态全局变量
开发了一个函数库或类库,应当放在一个名称空间内
仅当使用using编译指令作为旧代码使用名称空间的权宜之计
不要在头文件中使用using编译指令。如确定要使用,应当放在#include 之后
导入名称,优先使用作用域运算符或using声明的方法
对于using声明,优先将作用域设置为局部而不是全局

9.6编程练习 有时间就做

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值