Я только начинаю изучать базовый синтаксис С++, и меня немного смущает фрагмент кода, с которым я столкнулся.
Для класса, созданного с именем MyString, была определена перегрузка оператора как:
ostream& operator<<(ostream& os, const MyString& s)
{
os << s.data;
return os;
}
Затем в некоторой функции драйвера оператор:
cout << s3 << endl;
Выполняется, где s3 имеет тип объекта MyString. Результат выводит значение s3.
Я не совсем понимаю, как работает это утверждение. После возни с ним кажется, что конструктор копирования вызывается один раз, а затем деконструируются 3 объекта. Как именно работает эта линия? Похоже, что оператор принимает ссылку на ostream и MyString, но тоже не endl? Кроме того, почему может быть вызван только 1 конструктор копирования, когда используются два экземпляра «‹‹»? Может быть, я даже не задаю правильных вопросов, или мои вопросы даже не имеют смысла, потому что я действительно сбит с толку тем, что происходит в этих строках. Если это так, может ли кто-нибудь изложить просто общее объяснение того, что происходит?