2014-02-25 96 views

回答

1

是的,它是安全的,這是整個原因,rdbuf功能存在。

這也是iostreams狗慢的主要原因之一。一個ifstream對象不一定附加到一個文件。一個stringstream對象可能被附加到一個文件。很多多態性,大量的虛擬調用,沒有優化的機會。

但是,無論您是否重新綁定流,您都會爲這些缺點付出代價。

+0

我最初的例子是錯誤的,你可以查看編輯嗎?我有一些使用ifstream的代碼,而我想通過cin代替。我正在考慮'file.ios :: rdbuf(cin.rdbuf());'但我不知道這沒關係。只要代碼沒有打開或關閉文件,它可以嗎? – loop

+0

不同意情緒。 'rdbuf'中的虛擬調用不會減慢文件I/O,格式化的I/O也不會那麼快。如果您正在執行未格式化的I/O,則可以直接調用'streambuf'方法來跳過抽象成本。 – MSalters

+0

MSalters,不同意所有你想要的,我有探查器數據構成我的陳述的基礎。請注意,我所說的電話不在rdbuf中。然而,沒有多態的pimpl機制,rdbuf就不能存在。 –