回答
C++要求所有类型的大小都大于0.如果类型的的大小为0,则数组索引和其他指针数学会出错。
class EmptyClass { };
std::cout << sizeof(EmptyClass); // Prints "1" (typically)
甲compressed_pair
是优化不要求额外的存储一种类型的,因为0的尺寸是被禁止的仅具有一个尺寸为1两种元素的元组。
if (sizeof(compressed_pair<int,EmptyClass>) == sizeof(int))
{
std::cout << "EmptyClass was compressed."; // (This will print)
}
这是通过Empty Base Optimization实现的。这两种类型都放在一个类包装器中,如果一个类型为“空”,那么该类将成为另一个类型的父类型。
为什么要采用'compressed_pair'类的大小。它不会返回一个可以通过':: [name_of_type]'访问的类型吗?... – 0x499602D2 2013-04-24 22:02:57
@ 0x499602D2(除非我很困惑)它说明'EmptyClass'的存在不会增加' compressed_pair'作为一个整体。 – 2013-04-24 22:14:29
'compressed_pair'的大小如何与'int'的大小相同我基本上是想说。 – 0x499602D2 2013-04-24 22:16:18
- 1. IEnumerable和数组有什么区别?
- 2. int和char数组有什么区别?
- 3. CPU和芯片组有什么区别?
- 4. 组件和指令有什么区别?
- 5. malloc和数组有什么区别
- 6. 数组和ArrayList有什么区别?
- 7. 字典和数组有什么区别?
- 8. 组件和凉亭有什么区别?
- 9. 数组和散列有什么区别?
- 10. 有什么区别`和$(Bash中有什么区别?
- 11. 行,记录和元组有什么区别?
- 12. Django中urlpatterns的url()和元组有什么区别?
- 13. 数组元素的id和index有什么区别?
- 14. OCaml中的记录和元组有什么区别
- 15. 反转元组和反转列表有什么区别?
- 16. 有什么区别? :和||
- 17. &&和||有什么区别?
- 18. “/”和“/ *”有什么区别?
- 19. 有什么区别:。!和:r!?
- 20. ==和===有什么区别?
- 21. Appender和〜有什么区别?
- 22. $ @和$ *有什么区别?
- 23. is和=有什么区别?
- 24. #.00和#。##有什么区别?
- 25. `==`和`is`有什么区别?
- 26. '=='和'==='有什么区别?
- 27. /和/#/有什么区别?
- 28. | 0和~~有什么区别?
- 29. `&`和`ref`有什么区别?
- 30. ==和===有什么区别?
std :: pair是两个元素的元组。元组可以是任意数量的元素(任何类型)。我可以想象compressed_pair上的文档可以解释其他任何内容。 (但是我认为它会进行一些与存储相关的优化) – GRAYgoose124 2013-04-24 18:10:52
@ GRAYgoose124:就是那个_empty base optimization_。 – 2013-04-24 18:16:28
那么,即使对于两个元素,是不是会提供必要的“压缩”? – rubenvb 2013-04-24 18:17:22