一、 bool类型
取值为true或者false,可以当做整数用,在不用编译器实现不同。
二、 const限定符
(1)、用const给字面常量起个名字(标识符),这个标识符就称为标识符常量,const修饰的标示符常量必须在定义的时候必须初始化,而且初始化之后不能再重新赋值。
(2)、const和define的比较
#define STR(a) #a <==> STR(ABC) = “ABC”//把参数转化为字符串
#define CAT(a,b) a##b CAT(a,b) = ab //连接两个字符串,根据这个字符串可以定义变量
(5)、C和C++ const之比较
那么C语言和C++的const有什么不同呢,C语言中const变量是只读变量,有自己的存储空间,其值在运行的时候初始化。
C++中的const常量可能分配存储空间,也可能不分配存储空间,C++在编译的时候碰见常量声明时,在符号表中放入这个常量,若发现使用此const常量则直接以符号表中的值替换,编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间。也就是以下两种情况才会给const常量分配空间:
- 对const常量取地址的时候
- const常量为全局变量,需要在其他文件使用的时候
三、内存对齐
为了寻址方便,编译器为每个“数据单元”按排在某个合适的位置上,这就是内存对其。C、C++语言非常灵活,它允许你干涉“内存对齐”
(1)、如何对齐
a)第一个数据成员放在offset为0的位置
b)其它成员对齐至min(sizeof(member),#pragma pack所指定的值)的整数倍。
c)整个结构体也要对齐,结构体总大小对齐至各个成员中最大对齐数的整数倍。
d)#pragma pack(n) 来修改,#pragma pack() 取消修改
四、C++增加的运算符
(1)、::域运算符,作用:类访问自己的成员,访问重名的全局变量
(2)、new,delete运算符用于分配和释放堆空间,例子:
int*p = new int(5);
delete p;
int *p2 = new int[10];
delete[] p2;//释放数组空间一定要加[]</span>
new,delete用于对象上:
new一个新对象,内存分配(operator new)调用构造函数
五、重载,name managling 和extern “C”
(1)、重载
(2)、name managling
C++为了支持重载,需要进行name managling,extern “C”实现C与C++混合编程,如下:
#ifdef __cpluscplus
extern “C”
{
#endif
...//函数声明
#ifdef __cpluscplus
}
#endif
(3)、带默认值的形参
函数声明或者定义的时候,可以给形参赋一些默认值。调用函数时,若没有给出实参,则按指定的默认值进行工作
函数没有声明时,在函数定义中指定形参的默认值
函数既有定义又有声明时,声明时指定后,定义后就不能再指定默认值
重载的函数使用默认值,可能会产生二义性。