這一直困擾我一段時間:與printf,你提供formmatters來指示如何解釋參數,但cout不需要這個。 cout如何知道根據正確的類型讀取變量?cout如何知道如何格式化不同的類型?
回答
它被稱爲函數重載。在C++中,只要具有相同的名稱(operator<<
就是這種情況下的名稱),只要它們採用不同的參數集,就可以擁有任意數量的函數。 cout
並不指示如何解釋參數,編譯器會這樣做。或者說,編譯器決定調用哪個函數,並且該函數規定參數的格式。編譯器知道每個參數的類型,並相應地調用相應的函數。
例如,這叫ostream::operator<<(int)
cout << 10;
,這就要求ostream::operator<<(double)
,這是一個完全不同的功能
cout << 3.14;
我們可以用ADL來打擾他嗎?說,爲什麼他不需要在工作之前使用std :: operator <<'?
啊,這是有道理的。所以如果你有一個自定義的類,你希望能夠做出決定,那麼你可以簡單地重載<<以你的類作爲參數的定義。 這是一個完全不同的問題哈哈,但是如何在編譯器級別上進行重載? – user2142343
哦,gcc只是使用typeid並且運行了函數已被重載的類型的switch語句? – user2142343
- 1. 如何通過使用Image類知道圖像類型/格式
- 2. 同一類型的對象cout,cerr,clog表現如何不同?
- 3. COUT格式化
- 4. protobuf -net不知道如何序列化類型爲= object的datamember
- 5. 不知道如何同時
- 6. 如何格式化DateTime數據類型
- 7. 如何知道NSManagedContext中NSManagedObject的類型
- 8. C如何知道期望的類型?
- 9. 如何知道matlab的圖像類型
- 10. 如何知道鏈接器的類型
- 11. 如何知道變量的類型?
- 12. 如何知道UIImage的格式? (IOS)
- 13. 如何知道字體的格式
- 14. NetBeans不知道如何格式化JS代碼,我該如何解決?
- 15. 如何知道繼承的泛型類型的基類型?
- 16. 如何知道手機類型?
- 17. 如何知道列數據類型?
- 18. var如何知道未定義類型?
- 19. EF6如何知道派生類型?
- 20. 如何知道文件類型?
- 21. 如何反序列化不知道的類型,而不是普通的情況
- 22. 如何知道單元格的數據類型
- 23. 反序列化JSON.NET不知道類型
- 24. 如何在處理不同類型的GET時格式化我的REST API
- 25. 如何使用浮點值格式化cout的輸出?
- 26. 如果我們不知道Container類型元素的類型,如何實現Iterator?
- 27. hadoop在流模式下如何知道您的密鑰類型
- 28. 有誰知道如何格式化Jquery Datepicker
- 29. 我不知道如何訪問不同子類中的變量
- 30. cout如何區分基本類型?
哪個編譯器? – hexafraction
它是C++。沒有更多,沒有更多。 'operator <<'是一個函數,它需要參數。參數有類型。這就是'它'知道的。神祕結局。 – sehe