2014-10-11 3 views
-3

Рассмотрим следующую функцию:Понимание потоков: как эта функция работает?

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.

Какой из этих, скорее всего, правильный? Я принимаю второй, но я не уверен.

+0

Прочитайте документацию и узнайте –

ответ

3

Для некоторых типов (большинство арифметических) есть member function operator<< в ostream.

Для всех остальных типов operator<< должна быть функцией, не являющейся членом, с точной подписью, которую вы предложили в своей второй броне. Хотя второй параметр - SomeType const& в большинстве (если не во всех) случаях.

Смежные вопросы