我正在研究爲某些數學類(矩陣,向量等)提供ostream
運算符。朋友已經注意到ostream
運算符的gcc標準庫實現std::complex
包括內部使用一個字符串流將它傳遞給實際ostream
之前的輸出格式:在ostream函數中使用stringstream
/// Insertion operator for complex values.
template<typename _Tp, typename _CharT, class _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
{
basic_ostringstream<_CharT, _Traits> __s;
__s.flags(__os.flags());
__s.imbue(__os.getloc());
__s.precision(__os.precision());
__s << '(' << __x.real() << ',' << __x.imag() << ')';
return __os << __s.str();
}
這種模式升壓可見也。我們試圖確定這是否值得關注。有人擔心它涉及到爲字符串流包含一個額外的頭文件,並且可能會避免字符串流中需要額外的堆分配。
最合理的建議是,如果客戶端需要該功能,那麼他們可以創建字符串流並自行進行預傳。
任何人都可以幫助我理解爲什麼這將被認爲是良好的做法,我是否應該採用它?