可能重复:
C++:空类对象的大小是多少?
为什么以下输出1?
#include <iostream>
class Test
{
};
int main()
{
std::cout << sizeof(Test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Pét*_*rök 115
该标准不允许大小为0的对象(及其类),因为这样可以使两个不同的对象具有相同的内存地址.这就是为什么即使是空类必须具有(至少)1的大小.
wil*_*ell 26
C++标准保证任何类的大小至少为1.C++标准规定没有对象与另一个对象具有相同的内存地址.这有几个很好的理由.
保证new始终返回指向不同内存地址的指针.
为了避免某些划分为零.例如,指针算术(其中许多由编译器自动完成)涉及除以sizeof(T).
但请注意,这并不意味着空基类会将派生类的大小加1:
struct Empty { };
struct Optimized : public Empty {
char c;
};
// sizeof(Optimized) == 1 with g++ 4.0.1
Run Code Online (Sandbox Code Playgroud)
小智 11
没有任何数据成员和成员函数的类这种类的类称为空类.空类对象的大小始终为1个字节.
当我们在那个时候创建任何类的对象时,对象总是得到3个特征,即
当我们在那个时候创建空类的对象时该对象的状态是什么.该对象的行为也没有,但编译器为该对象分配唯一的地址.计算机中的内存始终以字节的形式组织,对象地址位置可用的最小内存为1个字节.这就是为什么空类对象的大小是1个字节的原因.
| 归档时间: |
|
| 查看次数: |
54678 次 |
| 最近记录: |