目录
1. 指针数组,数组指针
2. 静态库与动态库
3. 空类默认有哪些函数
4. 哪些函数可以成为虚函数,哪些函数不可以成为虚函数?
5. 内存对齐
(1)第一类成员在offset为0的地方,后边每个成员,必须从该成员的整数倍,或者子成员整数倍(32位机器4字节对齐)开始对齐。
(2)如果有嵌套,那么要从嵌套里内部最大元素整数倍开始存。
(3)定义收尾,必须是最大元素的倍数,不足要补齐。
(4)static对象,函数,不影响占用空间。
(5)如果有虚函数,虚函数表指针在结构体首部(8字节),那么也会影响后续存储。
参考:
6. Class哪些静态成员可以在类内部初始化?
从c11开始,部分静态成员变量也可以在类内部初始化。
7. constexpr
constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化。
constexpr int mf = 20; // 20是常量表达式
constexpr int limit = mf + 1; // mf + 1是常量表达式
constexpr int sz = size(); // 之后当size是一个constexpr函数时才是一条正确的声明语句
必须明确一点,在constexpr声明中如果定义了一个指针,限定符conxtexpr仅对指针有效,与指针所指的对象无关。
const int *p = nullptr; // p是一个指向整形常量的指针
constexpr int* q = nullptr; // q是一个指向整数的常量指针
p是一个指向常量的指针,q是一个常量指针,其中的关键在于constexpr把它所定义的对象置为了顶层const。