我讀過可以通過更改緩衝區來通過ifstream讀取cin,但是安全嗎?什麼是做這種方式的缺點:從ifstream中讀取stdin/cin安全嗎?
file.ios::rdbuf(cin.rdbuf());
感謝
C++: UNIX - defaulting ifstream variable to standard input
iostream - C++: assign cin to an ifstream variable? - Stack Overflow
我讀過可以通過更改緩衝區來通過ifstream讀取cin,但是安全嗎?什麼是做這種方式的缺點:從ifstream中讀取stdin/cin安全嗎?
file.ios::rdbuf(cin.rdbuf());
感謝
C++: UNIX - defaulting ifstream variable to standard input
iostream - C++: assign cin to an ifstream variable? - Stack Overflow
是的,它是安全的,這是整個原因,rdbuf
功能存在。
這也是iostreams狗慢的主要原因之一。一個ifstream
對象不一定附加到一個文件。一個stringstream
對象可能被附加到一個文件。很多多態性,大量的虛擬調用,沒有優化的機會。
但是,無論您是否重新綁定流,您都會爲這些缺點付出代價。
我最初的例子是錯誤的,你可以查看編輯嗎?我有一些使用ifstream的代碼,而我想通過cin代替。我正在考慮'file.ios :: rdbuf(cin.rdbuf());'但我不知道這沒關係。只要代碼沒有打開或關閉文件,它可以嗎? – loop
不同意情緒。 'rdbuf'中的虛擬調用不會減慢文件I/O,格式化的I/O也不會那麼快。如果您正在執行未格式化的I/O,則可以直接調用'streambuf'方法來跳過抽象成本。 – MSalters
MSalters,不同意所有你想要的,我有探查器數據構成我的陳述的基礎。請注意,我所說的電話不在rdbuf中。然而,沒有多態的pimpl機制,rdbuf就不能存在。 –
不要打擾我(或其他人)的鏈接!提取**你的**關注並在這裏展示它們! –
好的我會編輯問題 – loop