常见问题搜集(整理中。。。)

目录

1. 指针数组,数组指针

2. 静态库与动态库

3. 空类默认有哪些函数

4. 哪些函数可以成为虚函数,哪些函数不可以成为虚函数?

5. 内存对齐

6. Class哪些静态成员可以在类内部初始化?

7. constexpr

8. 堆和栈的区别


1. 指针数组,数组指针

指针数组,数组指针


2. 静态库与动态库


3. 空类默认有哪些函数


4. 哪些函数可以成为虚函数,哪些函数不可以成为虚函数


5. 内存对齐

(1)第一类成员在offset为0的地方,后边每个成员,必须从该成员的整数倍,或者子成员整数倍(32位机器4字节对齐)开始对齐。

(2)如果有嵌套,那么要从嵌套里内部最大元素整数倍开始存。

(3)定义收尾,必须是最大元素的倍数,不足要补齐。

(4)static对象,函数,不影响占用空间。

(5)如果有虚函数,虚函数表指针在结构体首部(8字节),那么也会影响后续存储。

参考

谈一谈C++的内存对齐


6. Class哪些静态成员可以在类内部初始化?

        从c11开始,部分静态成员变量也可以在类内部初始化。

C++哪种静态成员变量可以在类内初始化


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。

参考:C++之constexpr详解


8. 堆和栈的区别

堆与栈区别 - 牛犇犇的文章 - 知乎


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值