回答
空类的大小不为零(最可能是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
你正在服用哪些不能做一个函数的大小的解决方案。您需要在名称前面加上&
以获取指向该函数的指针的大小。你还需要转换sizeof
值为int
类型,这是printf
预计为d
符
printf("%d,%d", (int)sizeof(A), (int)sizeof(&func));
至于具体的数值----这不知道他们是什么超越是大于或等于1
。这取决于编译器。
通过sizeof(func)
,你大概的意思sizeof(&func)
,这是在字节的函数指针的大小。
至于什么样的A
物体的大小,标准只是说:
类类型的完整的对象和成员子对象应具有非零大小。
其通过脚注94合格:
基类的子对象并不受限制。
的原因脚注是允许称为empty member optimization一个编译器的优化,这是常用的模板库中使用,而无需一个构件访问类型的例程(例如一个分配器类类型的分配器例程)该类类型的对象。
不同类型的指针不保证是相同的大小(虽然他们通常在实践中) – 2010-06-20 14:11:55
@Oli Charlesworth:哇,我没有意识到指针大小可能不同,事实上,通过查看C和C++标准,我找不到任何强制两个指针类型的大小相等的东西,然而,从[5.2.10 ]重新解释转换:“指向函数的指针可以显式转换为指向不同类型函数的指针”,我认为这意味着两个* function *指针类型的大小至少是相同的。 – 2010-06-20 18:52:11
数据指针和函数指针*的大小可能不同的一个例子是在具有哈佛架构(即单独的指令和数据存储器)的平台上。 – 2010-06-20 20:07:30
- 1. 为什么空数组的大小为0但空类的大小不是0?
- 2. 空UDP和TCP数据包的大小?
- 3. C++类空类的大小1字节
- 4. PermGen空间中的Java类的大小
- 5. 堆空间大小?
- 6. Python的空/空函数
- 7. 确定内存中函数/存根/名称空间的大小
- 8. 为什么从两个空类派生的空类的大小是2?
- 9. 制作“*”和空格大小相同
- 10. Firebase的数据类空构造函数
- 11. 如何计算可空的大小<T>数据类型
- 12. 理解元空间大小
- 13. String类中的空构造函数
- 14. SimpleJdbcTemplate类和空参数
- 15. JQuery的空函数
- 16. PostgreSQL数据库的大小(表空间大小)更大然后关系
- 17. 虚拟地址空间大小vs物理地址空间大小
- 18. JavaScript中的空值和全局函数
- 19. isset和空函数的奇怪行为
- 20. PHP空间函数类似于ASP空间()
- 21. 空气16 IPA大小超过最大允许大小80MB
- 22. 在sqlite中的空表大小db
- 23. 空的番石榴缓存大小?
- 24. JSR 303 - 定义的大小或空
- 25. MySQL中的空间索引大小
- 26. 闪亮的仪表板空框大小
- 27. oracle中真正的表空间大小
- 28. 虚拟继承和在基类空的虚函数表
- 29. Python类的命名空间和初始化函数
- 30. C++:类和函数的名称空间说明符
PLZ给出同样的原因 – 2010-06-20 11:33:19
你自己试过了吗?顺便说一句,你可以编辑你自己的问题,所以不需要留言。 – Troubadour 2010-06-20 11:35:01
这不是如何声明一个类,为什么在C++中使用'printf',并且'sizeof'不能保证适合'%d'。 – 2010-06-20 11:36:06