空类|空数组

sizeof

sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用。

32位计算机中,一个指针变量的返回值必定是4(等于计算机内部地址总线的宽度。)。

结构体sizeof存在字节对齐。

C99标准规定,函数、不能确定类型的表达式以及位域成员不能被计算sizeof值。

但可以对函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。

char foo1(){}
void foo2(){}
sizeof(foo1());//OK
sizeof(foo2());//error
位域成员

C/C++中以一定区域内的位(bit)为单位来表示的数据成为位域,位域必须指明具体的数目。
一个位域必须存储在同一个字节中,不能跨两个字节,故位域的长度不能大于一个字节的长度。
取地址操作符&不能应用在位域字段上。
位域的作用主要是节省内存资源,使数据结构更紧凑。

类的大小

  • 为类的非静态成员数据的类型大小之和。
  • 类的大小与它当中的构造函数,析构函数,以及其成员函数无关。
  • 如有虚函数,有一个指向虚函数的指针,故多4字节(32位系统)。

空类的大小

sizeof的结果为1

C++的选择是,自动给空类插入一个char类型,类对象实例化后可通过地址区分。

空类的作用

使用函数重载的方法,在参数中加入一个空类域作为区分不同的函数的方法,编译

的时候直接选择,而不是在运行的时候选择,这是非常提高效率的。

空数组

sizeof的结果为0

空数组名是一个指针,(不占类的空间)指向一个位置:

对于结构体中,空数组名这个指针指向了前面一个成员结束的第一个空间。

对于非结构体,空数组名这个指针指向的内容,与前一个对象的指针的内容一样。

#include <iostream>
using namespace std;
int main()
{
    int i, j, a[0], k, m;
    cout << &i << endl << &j << endl << &a << endl << &k << endl << &m << endl;
    return 0;
}

64位PC g++编译器输出如下:
0x28ff1c
0x28ff18
0x28ff18
0x28ff14
0x28ff10

Tips:使用VSDebug模式下,int分配12字节,用来存储调试信息。Release模式分配8字节。

类中空数组

sizeof的结果为0

可用于给一个结构体添加一个缓冲区。

空数组是不占内存的,它就像一个指针指向某个地方,但是又不占内存。但是的确

我们的类对象能够借助空数组区分开来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值