空类和空函数的大小?

时间:2010-06-20 11:32:38

标签: c++ c

以下代码中的解决方案

Class A{}
void func(){}

printf("%d,%d",sizeof(A),sizeof(func));

3 个答案:

答案 0 :(得分:6)

空类的大小不为零(最可能为1),以便在不同的地址处有两个类的对象。

http://www2.research.att.com/~bs/bs_faq2.html#sizeof-empty更好地解释了

 class A{};
 void func(){}

 std::cout<<sizeof(A)<<std::endl<<sizeof(&func));// prints 1 and 4 on my 32 bit system

答案 1 :(得分:3)

您正在使用无法完成的功能的大小。您需要在名称前加上&,以获取指向该函数的指针的大小。您还需要将sizeof值转换为类型int,这是printfd说明符所期望的值

printf("%d,%d", (int)sizeof(A), (int)sizeof(&func));

至于具体的价值观----不知道它们之外的是什么大于或等于1。这取决于编译器。

答案 2 :(得分:0)

sizeof(func),您可能意味着sizeof(&func),这是函数指针的大小(以字节为单位)。

A对象的大小而言,标准只说:

  

类类型的完整对象和成员子对象应具有非零大小。

符合脚注94:

  

基类子对象不受限制。

脚注的原因是允许编译器优化,称为empty member optimization,它通常用于模板库中以访问类类型的例程(例如,分配器类类型的分配器例程),而不需要该类类型的成员对象。