固有的不可移植的特性

不可移植的特性是指因机器而异的特性,当将具有这种特性的程序迁移到不同的机器上时需要重新编写。

位域

类可以将非静态成员定义为位域,一个位域中含有指定数量的二进制位,一般用无符号类型来保存一个位域。unsigned type name:位域的二进位数;unsigned\ type\ name:位域的二进位数;类中连续定义的位域会被压缩在同一整数的相邻位来压缩存储。

取地址符不能用于位域,因此指针无法指向位域。另外,最好使用无符号类型,因为存储在带符号类型的位域是根据机器而定的。

可以直接对位域进行赋值,但一般还是会使用位运算符操作超过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++同时编译一个文件。


固有的不可移植的特性
https://lhish.github.io/project/hide/固有的不可移植的特性/
作者
lhy
发布于
2024年6月30日
许可协议