回答
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. 数组和ArrayList有什么区别?
- 2. 数组和散列有什么区别?
- 3. IEnumerable和数组有什么区别?
- 4. 字典和数组有什么区别?
- 5. int和char数组有什么区别?
- 6. 组件和凉亭有什么区别?
- 7. 有什么区别`和$(Bash中有什么区别?
- 8. ==和===有什么区别?
- 9. ==和===有什么区别?
- 10. 有什么区别? :和||
- 11. ==和===有什么区别?
- 12. '=='和'==='有什么区别?
- 13. `&`和`ref`有什么区别?
- 14. 有什么区别:。!和:r!?
- 15. | 0和~~有什么区别?
- 16. Appender和〜有什么区别?
- 17. xtype和别名有什么区别?
- 18. 有什么区别
- 19. 有什么区别
- 20. 有什么区别?
- 21. 有什么区别?
- 22. 有什么区别?
- 23. 有什么区别
- 24. 有什么区别?
- 25. 有什么区别?
- 26. 有什么区别
- 27. 有什么区别
- 28. 元素和元素ID有什么区别?
- 29. 二元搜索树和二元树树有什么区别?
- 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