记录自己遇到的一些C++基础面试题目
基础部分
override
和final
的区别override
是用来标识派生类需要重写的方法;final
是用来标识派生类不能重写的方法sizeof
的用法
首先应该明确sizeof是一个C语言关键字而不是一个函数,用于计算数据空间的字节数,其计算发生在编译时刻。sizeof
运算符的结果部分依赖于其作用的类型:- 对char或者类型为char的表达式执行sizeof运算,结果为1
- 对引用执行sizeof运算结果得到被引用对象本身所占空间的大小
- 对指针执行sizeof运算得到指针本身所占空间的大小
- 对解引用指针执行sizeof运算得到指针所指向的对象所占空间大小,指针不需要有效
- 对数组执行sizeof运算得到整个数组所占空间大小,等价于对数组中所有元素各执行一次sizeof运算并求和。注意:sizeof运算不会把数组转化成指针来处理
- 对string对象或者vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间
类型 | 大小 |
---|---|
int *p | sizeof(p) = 4;//sizeof(*p) 相当于sizeof(int) |
int a[10] | sizeof(a) = 4*10 |
char a = “hello” | sizeof(a) = 6; //结尾处有\0 |
double (a)[3][6]; | sizeof(a) = 4; //a为指针 |
sizeof(a) = 72; // \a为有3*6个元素的数组 | |
sizeof(*a) = 24; // \*a为数组一维的6个指针 | |
sizeof(**a) = 4; // \**a为数组一维的第一个指针 | |
sizeof(**a) = 8; // ****a为double类型的变量 |