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) был constbasic_ostream&& | 1. добавлен const 2. удалён const |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_ostream/operator%3D