回答
空類的大小不爲零(最可能是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