C++ 特性总结(一)

1 代码编译过程:
源代码 -> 编译器 -> 目标代码 -> 链接器 -> exe
其中,链接过程为链接库代码和启动代码,目标代码为中间生成的 .obj文件

2 define与typedef
define定义的时候不进行检查,只是一个别名作用,作用域在全局
typedef定义的时候会进行类型检查功能,同样有别名作用,不能在函数里用typedef,其typedef有自己的作用域

3 程序内存分配区域
栈:编译器自动分配释放,局部变量,函数参数等
堆:由程序员控制释放(malloc,new)
全局(static):全局变量,静态变量,程序结束后释放
文字常量:常量字符串
程序代码区:放函数体的二进制代码

4 new malloc区别
位置new 在自由存储区(free store),malloc在堆
返回类型安全性new返回对象类型指针,malloc内存分配成功时返回void*然后再强转成需要的。
**内存分配失败时:**new 抛出bac_alloc异常,不会返回NULL, maclloc失败返回null
分配时内存大小的指定:new 无需,会根据类型信息自行计算,malloc需要显示指出。
构造与析构函数:new delete有,malloc无
是否可重载:malloc/free不可重载
总结: malloc就是比较原始,啥都要自己定义下,malloc就像有模块直接用就用。但malloc不一定就比new差,有各自适用的地方。

5 ++i, i++
++i相当于

i = i + ;
return i;

i++相当于

int j = i;
i = i + 1;
return j;

6 struct ,class区别
默认的public private权限

7 union
可以有多个成员,大小由最大的成员决定。
共享一个内存,一次只能使用一个成员。

8 extern

extren int a// 声明
int a// 定义
extern int a  = 0; // 定义
int a = 0; // 定义

9 const

const 使变量只有读取属性(不一定就不能改)C++ 特性总结(一)_第1张图片
图片源自:怀想天空

10 volatile
volatile 影响编译器的编译结果,具体就是 volatile变量可能发生变化,与volatile有关的就不进行编译优化,避免出错。
出错点可能在于:每次使用的时候都会从i的地址读取数据进行操作,优化就是使第2次后不从i进行操作,那么volatile的作用就是把上次都的数据放在最后一次使用的k中,这样就对特殊地址能够进行稳定访问。

11 restrict
告述编译器,对象已经被指针所引用,不能通过除该指针外所有其他直接或间接的方式修改该对象的内容。
作用:本质是一个安全性的操作,防止多指针使其发生改变。

12 匿名结构体
作用:防止结构体中多重嵌套(安全性)

13 ifdef endif
作用:在不同环境(win, linex)下,一些变量,函数等的不同

14 泛型
在写一些可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同时,可以有void *的方法来进行泛型编程。
但是泛型编程是一定安全,系统对其只有有限的检车。
如写一个sawp,泛型的做法能够避免写过多的多态代码

template <typename T>
void MySwap(T &a, T &b){
	T c = a;
	a = b;
	b = c;
}

15 exit()
头文字:stdlib.h
exit(0):正常退出
exit(1): 非正常
对象:OS, return结束的时候也会调用exit

你可能感兴趣的:(C++ 特性总结(一))