常问面试题:C++中sizeof的陷阱及应答
来源:互联网 发布:高端男士护肤品知乎 编辑:程序博客网 时间:2024/06/04 17:58
C++中sizeof是经常被问到的一个概念,比如,下面的几个关于sizeof的面试题反复出现在各大IT公司的技术面试当中,我们有必要完全理解并掌握。
注:在曾经面试大公司时,我的确被问到过这样的问题。
测试用例:
摘选自:剑指offer
注:在曾经面试大公司时,我的确被问到过这样的问题。
面试题:定义一个空的数据类型,里面没有任何成员变量和成员函数,对该类型求sizeof,得到的结果是多少?
答案:是1,为什么不是0?空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例时,它必须在内存中占有一定的空间,否则无法使用这些实例(也就不能求sizeof了),至于占用多少内存,由编译器决定,Visual Studio中每个空类型的实例占用1字节的空间。
扩展1:如果在该类型中添加一个构造函数和析构函数,再求sizeof,得到的结果是多少?
答案:还是1。调用构造函数和析构函数只需要知道函数的地址即可,而这些地址只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数而在实例内添加任何额外的信息。
注:不管添加的是构造函数还是析构函数还是其它任何类型的函数,都是这个结果。
扩展2:那如果把析构函数标记为虚函数呢?
答案:C++的编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针,在32位机器上,一个指针占4字节空间,因此求sizeof得到4;如果是64位则为8。测试用例:
- #include <stdio.h>
- struct nullType { };
- struct type1
- {
- type1() {}
- ~type1() {}
- int print() { printf("Alexia"); return 0; }
- };
- struct type2
- {
- type2() {}
- virtual ~type2() {}
- };
- int main()
- {
- printf("sizeof(nullType) = %d\n", sizeof(nullType));
- printf("sizeof(type1) = %d\n", sizeof(type1));
- printf("sizeof(type2) = %d\n", sizeof(type2));
- return 0;
- }
摘选自:剑指offer
0 0
- 常问面试题:C++中sizeof的陷阱及应答
- 常问面试题:C++中sizeof的陷阱及应答
- 常问面试题:C++中sizeof的陷阱及应答
- sizeof不是函数,C语言中sizeof的陷阱
- C++面试题6:sizeof 使用规则及陷阱
- sizeof的陷阱
- sizeof 的陷阱
- C\C++ sizeof 陷阱&&总结
- 神奇的C语言九:sizeof埋下的陷阱
- c语言中sizeof()的特点及用法
- C 中 sizeof的用法
- C中sizeof的用法
- [C++]深入理解sizeof-使用规则及陷阱分析
- C++ sizeof 使用规则及陷阱分析
- C++ sizeof 使用规则及陷阱分析
- C++ sizeof 使用规则及陷阱分析
- C++ sizeof 使用规则及陷阱分析
- C++ sizeof 使用规则及陷阱分析
- 单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)
- java Socket双向交互获取输入信息
- Qt5官方demo解析集36——Wiggly Example
- Hadoop 0.23.x/NameNode federation原理、编译、安装、体验
- 程序员求职面试心经40条——谨记原则
- 常问面试题:C++中sizeof的陷阱及应答
- JAVA 静态代码分析--圈复杂度检查-javancss
- 面试题之发散思维能力:如何用非常规方法求1+2+···+n
- 12.3 拥塞控制流程
- JAVA泛型笔试面试总结
- 链表相关的算法题大汇总 — 数据结构之链表奇思妙想
- 4.1.7 实战 精灵类及其相关类的使用
- 王承恩哭梦
- 百度2015校园招聘面试题回忆录(成功拿到offer)