了解流:此功能如何工作?

时间:2014-10-11 11:30:04

标签: c++ stream operator-overloading

考虑以下功能:

template <class T>
void to_string(const T& val, string& s) {
    ostringstream o;
    o << val;
    s = o.str();
}

我不确定这个功能是如何工作的。我有两个假设,请告诉我哪一个是正确的(如果有的话):

  1. ostringstream的重载次数为operator<<,需要T(不太可能)。

  2. 这是一个带有签名ostream& operator<<(ostream& stream, Sometype& t)的全局函数。这允许将T写入ostringstream,假设它是Sometype

  3. 哪一个更可能是正确的?我假设第二个,但我不确定。

1 个答案:

答案 0 :(得分:3)

对于某些类型(大多数算术类型),ostream中有member function operator<<

对于所有其他类型operator<<必须是非成员函数,并且具有您在第二个项目符号中提出的确切签名。虽然第二个参数在大多数(如果不是全部)情况下都是SomeType const&