[英]C++: Are iostream operator<< and operator>>s for primitive types virtual?
就像ifstream
和istringstream
繼承自istream
,我希望istream
(或更確切地說, basic_istream
)將為以下原始類型聲明operator>>
:
virtual istream& istream::operator>>(char &c); virtual istream& istream::operator>>(int &i);
快速瀏覽一下源代碼表明情況並非如此-這些功能看起來不是虛擬的。 我想念什么嗎?
[上下文是我正在嘗試滾動執行二進制I / O,糾正字節序等的istream。]
不,它們不是虛擬的。 基本流功能內部有一些虛擬函數,但這是在輸入/輸出實際數據的部分內部,而不是類型轉換為字符串的格式,這是在operator>>
實際發生的事情。
編輯:我相信所有虛擬功能都是從公共接口“隱藏”的。 basic_streambuf::pubseekpos
至少在gcc提供的標頭中作為對虛擬seekpos
的調用。
它們不是虛擬的,但是所有派生類都使用istream/ostream
重載。 所有stream
類都在內部使用一個緩沖區,該緩沖區是basic_streambuf或從其派生的 。 basic_streambuf
具有許多虛擬函數,因此根據streambuf
編寫stream
類不是什么大問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.