Остается ли объект cout единственным экземпляром, т.е. он никогда не копируется?

Cout когда-либо копируется неявно?

Например, передается ли объект cout второму перегруженному оператору в приведенном ниже коде, а объект cout внутри его реализации является одним и тем же объектом или является копией cout?

Насколько я понимаю, первая реализация верна, потому что оператор << работает для любого объекта ostream, например, он будет работать для объектов ofstream для записи в файлы.

//First implementation
ostream& operator<<(ostream& os, const Date& dt)
{
    os << dt.mo << '/' << dt.da << '/' << dt.yr;
    return os;
}

//Second implementation
ostream& operator<<(ostream& os, const Date& dt)
{
    cout << dt.mo << '/' << dt.da << '/' << dt.yr;
    return cout;
}

//using second implementation on object date
cout<<date;

2 ответа

Решение

Ваш пример не копирует ostreamВы используете ссылки везде. Если вы посмотрите на std::cout, вы увидите, что он не копируемый ( здесь и здесь)

std::istream а также std::ostream объекты не могут быть скопированы. поскольку std::cout является ostream объект (его тип является производным от std::ostream), его нельзя скопировать.

Другие вопросы по тегам