为了账号安全,请及时绑定邮箱和手机立即绑定

为什么C ++中空类的大小不为零?

为什么C ++中空类的大小不为零?

C++
慕哥9229398 2019-11-27 10:33:27
为什么会输出以下内容1?#include <iostream>class Test{};int main(){    std::cout << sizeof(Test);    return 0;}
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

该标准不允许大小为0的对象(及其类),因为这将使两个不同的对象具有相同的内存地址成为可能。这就是为什么即使空类的大小也必须至少为1的原因。


查看完整回答
反对 回复 2019-11-27
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

C ++标准保证任何类的大小至少为一个。C ++标准规定,任何对象都不应与另一个对象具有相同的内存地址。这样做有几个很好的理由。


为了保证new始终会返回指向不同内存地址的指针。


避免被零除。例如,指针算术(其中许多由编译器自动完成)涉及除以sizeof(T)。


但是请注意,这并不意味着一个空的基类将为派生类的大小加1:


struct Empty { };


struct Optimized : public Empty {

    char c;

};


// sizeof(Optimized) == 1 with g++ 4.0.1

Bjarne Stroustrup也谈到了这一点。


查看完整回答
反对 回复 2019-11-27
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

没有任何数据成员和成员函数的类,此类类型的类称为空类。空类的对象的大小始终为1个字节。

当我们那时创建任何类的对象时,对象总是具有3个特征,即

  1. 行为

  2. 身分识别

那时我们创建空类的对象时,该对象的状态为空。该对象的行为也不是什么,但是编译器会为该对象分配一个唯一的地址。计算机中的内存始终以字节的形式组织,在对象地址位置可用的最小内存为1字节。这就是为什么空类的对象的大小为1个字节的原因。


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 528 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信