38-低级编程
18.7.3 低级编程
低级编程中的“低级”指的是抽象程度,而不是编程质量。低级意味着接近于计算机硬件和机器语言使用的比特和字节。对嵌入式编程和改善操作的效率而言,低级编程很重要。C++11给低级编程人员提供了一些帮助。
变化之一是放松了POD(Plain Old Data)的要求。在C++98中,POD是标量类型(单值类型,如int或double)或没有构造函数、基类、私有数据、虚函数等的老式结构。以前的理念是,POD是可安全地逐字节复制的东西。这种理念没变,但C++11认识到,在满足C++98的某些约束的情况下,仍可以是合法的POD。这有助于低级编程,因为有些低级操作(如使用C语言函数进行逐字节复制或二进制I/O)要求处理对象为POD。
另一项修改是,允许共用体的成员有构造函数和析构函数,这让共用体更灵活;但保留了其他一些限制,如成员不能有虚函数。在需要最大限度地减少占用的内存时,通常使用共用体;上述新规则在这些情况下给程序员有更大的灵活性和功能。
C++11解决了内存对齐问题。计算机系统可能对数据在内存中的存储方式有一定的限制。例如,一个系统可能要求double值的内存地址为偶数,而另一个系统可能要求其起始位置为8的整数倍。要获悉有关类型或对象的对齐要求,可使用运算符alignof()(参见附录E)。要控制对齐方式,可使用说明符alignas。
constexpr机制让编译器能够在编译阶段计算结果为常量的表达式,让const变量可存储在只读内存中,这对嵌入式编程来说很有用(在运行阶段初始化的变量存储在随机访问内存中)。