C/C++笔试常问的坑
2016-03-24 15:14
381 查看
定义一个空的数据类型,里面没有任何成员变量和成员函数,对该类型求sizeof,得到的结果是多少?
用g++编译跑出来是1,据说vs也是,具体原因不明,不过确实不可能是0,0的话一个对象你怎么把它存在内存里呢?但是为什么1个字节就可以区分它了呢?
如果在该类型中添加一个构造函数和析构函数,再求sizeof,得到的结果是多少?
所有的函数都不是作为对象的一部分存储的,因为函数是公有调用的(公有的意思是,所有同类的对象都可以用)。而多态需要虚函数表的支持就不一样了,在3中会说道。
那如果把析构函数标记为虚函数呢?
如果不了解C++多态内部的实现机制的话,建议先google一下~编译器会把类中的每个虚函数做成一张表,然后在每个实例化的对象中放一个指向这个虚函数表的开始位置的指针。所以32位程序,对象会增加4个字节,而我编译了64位的,增加了8个字节。
【未完待续】
10道C++输出易错的笔记,http://blog.csdn.net/lanxuezaipiao/article/details/41774829
法
用g++编译跑出来是1,据说vs也是,具体原因不明,不过确实不可能是0,0的话一个对象你怎么把它存在内存里呢?但是为什么1个字节就可以区分它了呢?
如果在该类型中添加一个构造函数和析构函数,再求sizeof,得到的结果是多少?
所有的函数都不是作为对象的一部分存储的,因为函数是公有调用的(公有的意思是,所有同类的对象都可以用)。而多态需要虚函数表的支持就不一样了,在3中会说道。
那如果把析构函数标记为虚函数呢?
如果不了解C++多态内部的实现机制的话,建议先google一下~编译器会把类中的每个虚函数做成一张表,然后在每个实例化的对象中放一个指向这个虚函数表的开始位置的指针。所以32位程序,对象会增加4个字节,而我编译了64位的,增加了8个字节。
【未完待续】
Reference
常问的C++面试题,http://blog.csdn.net/lanxuezaipiao/article/details/1901383310道C++输出易错的笔记,http://blog.csdn.net/lanxuezaipiao/article/details/41774829
法
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua中调用C++函数示例
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#中的委托数据类型简介
- C++联合体转换成C#结构的实现方法
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题