1、宏参数的连接
#---字符串 #n == "n"
##---连接两个参数 a##b == ab
2、const的使用
const int *a=.. 指针指向内容为常量 *a=1;//(error)
int* const a=.. 指针本身为常量 a=&b;//(error)
3、const 与 #define的区别
#define 在编译时做文本替换,Compile-Time概念,生命周期终止于编译期。存在于程序的代码段,在实际程序中只是一个命令中的参数,并没有真实存在。
const 存在于程序的数据段,Run-Time概念,在堆栈中分配空间,在程序中确实存在并可以被调用,有数据类型,宏常量无数据类型。
4、C++中const的作用
1)定义常量
2)修饰函数形式参数。当传入参数为自定义类型或抽象类型时,将值传递改为 (A a) ----> (A const &a),可以提高效率;
具体原因:第一种形式需要构建临时对象用于复制参数a,而临时对象的构造、复制、析构都需要消耗时间。第二种用引用传递不需要产生临时对象。光引用传递可能改变a的值,所以加const.
3)修饰函数的返回值;
const char *GetChar(){....}
char* ch=GetChar();//error
const char* ch=GetChar();//correct 返回值只能赋给const修饰的同类型指针
4)修饰类的成员函数(函数定义体);类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。那就是常量(即 const)对象可以调用 const 成员函数,而不能调用非const修饰的函数。
int GetChar() const;
5、static作用
1)在函数体内,一个被声明为static的变量在函数被调用的过程中维持其值不变。
2)在一个模块内,函数体外声明的static变量,可以被模块内各个函数访问。模块外不行。是一个本地变量。
3)在一个模块声明的static函数,可以被模块内其他函数调用,模块外不行,是一个本地函数。
http://blog.csdn.net/hackbuteer1/article/details/7487694
6、sizeof 计算变量字节数大小
32位 指针变量大小固定是4字节
char 1字节
int 4字节
short 2
double 8
sizeof计算数组大小 数组在内存中占字节数;若数组是函数传入参数,则被认为是指针,大小是4
7、sizeof计算类/结构体大小
字节对齐:结构体总大小是最宽数据类型的整数倍
/带虚函数 多一个虚函数指针成员 +4字节
/空类 编译器安插一个char给该类,用来标记其每一个对象。因此大小为1字节;一个空类继承了另一个空类,大小仍然是1字节。一个空类虚继承了另一个空类,编译器为其安插一个指向父类的指针,则其大小为4;一个空类虚继承另外两个空类,大小为8;一个包含静态变量的类,静态变量的大小不计算在类的大小中。
/计算联合体大小union 联合体大小取决于它所有成员中占用空间最大的大小。(字节对齐)
/CPU对齐 #pragma pack(x)修改编译器对齐方式(默认对齐为8),对齐时选择编译器对齐方式与自身大小中较小的一个。
8、内联函数