社区
C++ 语言
帖子详情
C++中的空类中有什么?空类的大小为何不是0
xhz1234
2011-08-16 11:41:44
C++空类中有哪些数据成员和成员函数,
C++空类大小为何是1
如果一个文件中定义了超过256个空类会出现什么问题?(这个是面试时,被问到的)
...全文
1216
14
打赏
收藏
C++中的空类中有什么?空类的大小为何不是0
C++空类中有哪些数据成员和成员函数, C++空类大小为何是1 如果一个文件中定义了超过256个空类会出现什么问题?(这个是面试时,被问到的)
复制链接
扫一扫
分享
转发到动态
举报
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;
};
不难解释为何要占一个字节。
换个角度,倘若你不给他分一个字节,在下面你继承这个空类的时候,从哪里确定有这个父类呢?
C++
中
空类
有哪些函数?
空类
的
大小
?
空类
默认包含6个特殊的成员函数:默认构造函数、默认拷贝构造函数、默认析构函数、默认赋值运算符、默认取址运算符和默认取址运算符(const版本)。
空类
的
大小
至少为1字节,用于存储对象的地址。小伙伴们又有疑问了,这
空类
可以拿来干嘛?在代码编写
中
起到什么作用和意义呢?在
C++
中
,
空类
(即没有任何成员变量和成员函数的类)虽然看似简单,但在代码编写
中
却有着重要的作用和意义。二、标记类(Tag Class)
空类
可以用作标记类,用于标记某个对象或数据结构的类型。
为什么
C++
中
空类
和空结构体
大小
为1?
原文链接:http://www.spongeliu.com/260.html 对于结构体和
空类
大小
是1这个问题,首先这是一个
C++
问题,在C语言下空结构体
大小
为0(当然这是编译器相关的)。这里的
空类
和空结构体是指类或结构体
中
没有任何成员。 在
C++
下,
空类
和空结构体的
大小
是1(编译器相关),这是为什么呢?为什么不是0? 这是因为,
C++
标准
中
规定,“no object shall have the...
【
C++
】
空类
的
大小
是多少?0 or 1?
文章目录学习前提1.假设2.分析正确的结论为什么将
空类
的
大小
定为1呢? 学习前提 如何计算类的
大小
1.假设 我们先假设
空类
的
大小
就是0,那用这个
空类
去定义三个对象c1,c2,c3. 首先要知道,这三个对象是不是一样的? 不是呀,这是三个不同的对象 2.分析 但是我们都知道,创建对象要在栈帧上开辟空间 我们假设了
空类
的
大小
是0,发现c1,c2,c3存储在相同的位置上,即这三个对象的地址是一样的,也就是三个一样的对象,而这又是三个不同的对象,说明了我们的假设是有误的 正确的结论
空类
的
大小
不是0
C++
空类
大小
为什么不是0?
C++
中
空类
大小
是1,而不是0。讲解
空类
大小
为什么是1而不是0的原因。
c++
空类
的
大小
我想应该是:成员函数和static成员是属于类层面的,它不属于对象,那对象是什么呢?对象就是定义的变量,而非static成员数据才是每个对象的东西,它们是对象的一部分。简单地说,类只有在实例化的时候才会分配内存空间,即定义变量时(栈上定义或堆上定义),那分配内存空间肯定要有
大小
,而
空类
的
大小
是由编译器定的,这样一个类定义多个对象时,能保证每个对象的地址都是唯一的。注意:然而在 c 语言
中
,空的结构体的
大小
是 0,目前找到的原因是:在C语言
中
引入结构时,当时还没有对象的概念。1,首先什么样的才是
空类
呢?...
C++ 语言
65,180
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章