std::basic_ostream<CharT,Traits>::operator=
protected: basic_ostream& operator=( const basic_ostream& rhs ) = delete; | (1) | |
protected: basic_ostream& operator=( basic_ostream&& rhs ); | (2) | (с C++11) |
1) Оператор присваивания по копированию защищён и удалён. Потоки вывода не являются CopyAssignable.
2) Оператор присваивания по перемещению меняет все члены данных базового класса, кроме
rdbuf(), на rhs, как если бы вызов swap(*rhs). Этот оператор присваивания по перемещению защищён: он вызывается только операторами присваивания по перемещению производных классов потоков вывода, способных к перемещению std::basic_ofstream и std::basic_ostringstream, которые знают, как правильно присвоить связанные буферы потока по перемещению.Параметры
| rhs | - | объект basic_ostream, значение которого нужно присвоить *this |
Пример
#include <iostream>
#include <sstream>
#include <utility>
int main()
{
std::ostringstream s;
// std::cout = s; // ERROR: copy assignment operator is deleted
// std::cout = std::move(s); // ERROR: move assignment operator is protected
s = std::move(std::ostringstream() << 42); // OK, moved through derived
std::cout << s.str() << '\n';
}Вывод:
42
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 2067 | C++11 | 1. тип параметра перегрузки (1) был basic_ostream&2. тип параметра перегрузки (2) был const basic_ostream&& | 1. добавлено const 2. удалено const |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_ostream/operator%3D