回答
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