簡體   English   中英

C ++:原始類型的iostream運算符<<和operator >>是虛擬的嗎?

[英]C++: Are iostream operator<< and operator>>s for primitive types virtual?

就像ifstreamistringstream繼承自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM