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

为什么会输出以下内容1?


#include <iostream>


class Test

{

};


int main()

{

    std::cout << sizeof(Test);

    return 0;

}


慕哥9229398
浏览 529回答 3
3回答

MMTTMM

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

眼眸繁星

C ++标准保证任何类的大小至少为一个。C ++标准规定,任何对象都不应与另一个对象具有相同的内存地址。这样做有几个很好的理由。为了保证new始终会返回指向不同内存地址的指针。避免被零除。例如,指针算术(其中许多由编译器自动完成)涉及除以sizeof(T)。但是请注意,这并不意味着一个空的基类将为派生类的大小加1:struct Empty { };struct Optimized : public Empty {&nbsp; &nbsp; char c;};// sizeof(Optimized) == 1 with g++ 4.0.1Bjarne Stroustrup也谈到了这一点。

尚方宝剑之说

没有任何数据成员和成员函数的类,此类类型的类称为空类。空类的对象的大小始终为1个字节。当我们那时创建任何类的对象时,对象总是具有3个特征,即州行为身分识别那时我们创建空类的对象时,该对象的状态为空。该对象的行为也不是什么,但是编译器会为该对象分配一个唯一的地址。计算机中的内存始终以字节的形式组织,在对象地址位置可用的最小内存为1字节。这就是为什么空类的对象的大小为1个字节的原因。
打开App,查看更多内容
随时随地看视频慕课网APP