固有的不可移植的特性
不可移植的特性是指因机器而异的特性,当将具有这种特性的程序迁移到不同的机器上时需要重新编写。
位域
类可以将非静态成员定义为位域,一个位域中含有指定数量的二进制位,一般用无符号类型来保存一个位域。类中连续定义的位域会被压缩在同一整数的相邻位来压缩存储。
取地址符不能用于位域,因此指针无法指向位域。另外,最好使用无符号类型,因为存储在带符号类型的位域是根据机器而定的。
可以直接对位域进行赋值,但一般还是会使用位运算符操作超过1位的位域。
需要注意的事,位域只能使用在类中。
volatile
有的数据元素可能是由程序之外的别的什么在控制,此时我们就需要将这样的对象声明为volatile的,告诉编译器不应该对这样的对象进行优化。
volatile是一个很类似const的修饰符,当对于一个对象声明时,它内部的所有的成员也将被声明为volatile。
另外,volatile只有被形参也是volatile的函数调用。当声明volatile时,指针和引用本身也可以是volatile的,如果是volatile的,那么引用或指向的也必须是volatile的。
由于合成的拷贝控制的参数是const非volatile的,因此无法拷贝控制volatile的对象,因此必须自行定义。
extern
有的时候我们希望能够扩展c++的功能,去使用别的语言写的函数,这个时候就需要靠extern来声明这些函数。
如果是单个的,只要在声明前加上extern “语言字符串常量名”即可。如果多个声明,则要在””后用大括号包裹。这个多个声明也可以是一个include,其中的所有普通函数声明都认为是该语言编写的。
此外,函数所使用的语言本身也算是函数类型的一部分,因此假如说要用函数指针指向这些函数,就必须给这些函数指针也声明extern。
需要注意的是,extern这句语句是对于这句语句中的所有函数都声明,不管是返回类型还是形参时函数都会被声明上,因此如果要分开来处理可能就需要通过类型别名的方式。
当我们给一个正常的函数声明上extern时,相当于将这个函数给别的语言用。
可以通过#ifdef __cplusplus预处理器来方便c和c++同时编译一个文件。