C++中的空类中有什么?空类的大小为何不是0

xhz1234 2011-08-16 11:41:44
C++空类中有哪些数据成员和成员函数,
C++空类大小为何是1
如果一个文件中定义了超过256个空类会出现什么问题?(这个是面试时,被问到的)
...全文
1216 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gavinli1991 2013-05-01
  • 打赏
  • 举报
回复
lz,那1个字节是用来占一个空间,获取这个地址的,地址才是唯一标识符,你别把地址跟空间大小混乱了。
xhz1234 2011-08-20
  • 打赏
  • 举报
回复
谢谢各位,但是还是不太理解!请各位再详细点!空类里面除了4个成员函数外,到底还有什么
FrankHB1989 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 supermegaboy 的回复:]

主要原因如2楼所述,但不一定是一字节,标准并无规定最高派生对象的大小只能是一字节,而是至少一字节。
[/Quote]
+1,不过要排除bit-field。
顺便,标准明确规定基类子对象大小可以是0字节,即通常所说的EBO。
zmshy2128 2011-08-16
  • 打赏
  • 举报
回复
第一个问题: C++空类中有哪些数据成员和成员函数?
可以有静态成员变量、静态成员函数、虚函数、也可以包含普通函数(里边可以调用虚函数和静态成员数)。一般空类作为虚基类,其虚函数可视为基类对各继承类的接口约定。
第二个问题:C++空类大小为何是1
前面已回答
第三个问题:
只有sb考官才出这样的问题,就像问a = ++a+a++ 一样的问题。
飞天御剑流 2011-08-16
  • 打赏
  • 举报
回复
主要原因如2楼所述,但不一定是一字节,标准并无规定最高派生对象的大小只能是一字节,而是至少一字节。
Jxiaoshen 2011-08-16
  • 打赏
  • 举报
回复
每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以大小为1.
http://apps.hi.baidu.com/share/detail/32205414
机智的呆呆 2011-08-16
  • 打赏
  • 举报
回复
百度一下,你就知道
机智的呆呆 2011-08-16
  • 打赏
  • 举报
回复
我觉得第一个问题
空类里有 默认构造函数 析构函数 拷贝构造函数 拷贝复制运算符 这几个函数,是编译器要隐式声明的,如果这些函数被用到了,编译器还要隐式定义。
zmshy2128 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiangzhiya 的回复:]
空类中如果有虚函数,那么这个类的大小就为4,这还是空类吗?请指教
[/Quote]

我在4楼的回答有误了,呵呵。

看来应该是:可以有静态成员变量、静态成员函数、也可以包含普通函数(里边可以调用静态成员变量、静态成员函数、实际上功能等同于 静态成员函数)。

那么这个类也基本也没什么用了,无非是将全局变量和全局函数封装在一个类中,还不如将其封装在一个名字空间中。
黯然飘香 2011-08-16
  • 打赏
  • 举报
回复
空类中如果有虚函数,那么这个类的大小就为4,这还是空类吗?请指教
吾子墨鸿 2011-08-16
  • 打赏
  • 举报
回复
第三个问题比较奇怪。。。。
pathuang68 2011-08-16
  • 打赏
  • 举报
回复
那个1字节是个“占位符”。
一叶之舟 2011-08-16
  • 打赏
  • 举报
回复
前两个问题4楼已经回答了,
第三个问题,没什么意义,如果非要说有什么问题,只能说你在程序定义了太多无用的东西而已。
godblessing_hr 2011-08-16
  • 打赏
  • 举报
回复
你定义了一个空类后,其实空类里面会自动生成一些内容的
class Empty {
public: Empty(); // 缺省构造函数
Empty(const Empty& rhs); // 拷贝构造函数
~Empty(); // 析构函数 ---- 一般非虚的(除非继承体系有虚函数)
Empty &operator=(const Empty& rhs); // 赋值运算符
Empty* operator&(); // 取址运算符 const Empty* operator&() const;
};
不难解释为何要占一个字节。
换个角度,倘若你不给他分一个字节,在下面你继承这个空类的时候,从哪里确定有这个父类呢?

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧