我正在研究为某些数学类(矩阵,向量等)提供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();
}
这种模式升压可见也。我们试图确定这是否值得关注。有人担心它涉及到为字符串流包含一个额外的头文件,并且可能会避免字符串流中需要额外的堆分配。
最合理的建议是,如果客户端需要该功能,那么他们可以创建字符串流并自行进行预传。
任何人都可以帮助我理解为什么这将被认为是良好的做法,我是否应该采用它?