C++ primer plus chapter 8
头文件内容
原型
#define const 常量
结构声明
类声明
模板声明
内联函数
<>标准头文件库查找
""工作目录和源代码目录 没有则找标准 自己的头文件用引号
#ifndef CORDIN_H_
#define CORDIN_H_
#endif 其他地方有相同的定义则跳过
自动存储 开始函数被创建结束释放
静态存储 整个程序运行过程存在 static
线程存储 并行任务 放在不同线程中处理 如果 thread_local则声明和线程一样长
动态存储 new 一直在 知道delete 又叫做free store heap(堆)
嵌套内同名声明 新的hide旧的 比如main 定义了a main内部有个wa函数也定义了a 新的a隐藏旧的a
register int count_fast 寄存器存储自动变量 提高访问速度 //现在没啥用
静态持续变量(没有初始化 值为0 0将被强制转化为合适类型 结构成员也会被初始化0):
外部链接 其他文件可用 函数外直接声明 如 int a =3 常规外部变量有外部连接性 静态外部变量隐藏常规外部变量
内部 本文件 函数外文件内用static
无连接 当前函数代码 函数内用static 程序启动时候初始化 以后调用时候不会再次初始化
这三种这个程序都存在 使用固定内存块存储
注意的是 const int finger = 10 是内部的 extern const int finger 但是 extern const int finger = 11 就是外部的了(只有一个文件可以初始化哦).......
violatile 代码没有对程序修改 值也可能变化
const 内存初始化后不能再修改
mutable 即是结构CONST 但是某个成员也可以被修改
函数都是静态的 外部链接 你要内部使用则要在定义和原型前加static
单定义规则适用于非内联函数 程序只能包含一个定义 外部链接的话只能有一个程序定义 内联则不受约束 但是C++要求同一个函数内联定义要相同
现在程序文件内找 找不到去库里找 所以程序员优先而不是库函数(标准库程序员不能用)
spff(double,double) C里面可能就_spff了 而 C++ 可能用_spff_d_d表示
语言连接性 extern "C" void spiff(int) 用C约定来查找
extern "C++" void spaff(int) 用C++约定 ("C++"可以省略)
extern int blem 引用定义 引用已有
extern int blem = 2 声明定义
函数基本都是外部链接
::提供全局变量 如 ::warming采用全局warming 隐藏局部warming
自动内存LIFO 后进先出
动态内存则看怎么用new和delete (程序结束一般也会被释放 系统很蠢则不会)
还有块是静态变量
int *pi = new int(6) *pi设为6 (C++11 可以用大括号)
double * pd = new double (99.99) *pd设为99.99
C++11 支持 大括号列表华
struct where {double x; double y; double z;};
where * one = new where {2.5,5.3,7.2}
int * ar = new int[4] {2,4,6,7};
int * pa = new int[40] 也可以 new(40 * sizeof(int));
delete [ ] pd;
定位运算符
char buff[BUF]
如 pd = new (buffer) double[N] 就会一直用给定的buffer地址
这里不能用delete
声明区域 可以在其中声明的区域 函数外的声明区域在所在文件 函数则是代码块
潜在作用域 潜在作用域从声明点开始 到声明区域结尾 被声明区域包含
名称弓箭 提供一个声明区域 一般是全局的
namespace Jack{
double a;
void c();
}
namespace Jill
{float a;
double c;
void c();
} 两个名称空间的函数不冲突 可以在另外个文件提供 void c的代码
namespace Jill{
void c{
...........
}}
usingJill::a 将a添加到声明区域中 是一个局部变量会覆盖全局
全部导入(using编译) 不会报错 局部会覆盖空间版本 导入指定(声明using) 发生冲突时编译器会报错
可以嵌套
using a::b::c::d;
可以别名 namspace a =std;
如果没有名字只能在当前区域使用 不能用using namespace {int a,double b;}
加static 内部链接静态存储