std::basic_ostream<CharT,Traits>::operator=
De cppreference.com
<tbody>
</tbody>
protected: basic_ostream& operator=( const basic_ostream& rhs ) = delete; |
(1) | |
protected: basic_ostream& operator=( basic_ostream&& rhs ); |
(2) | (desde C++11) |
1) El operador de asignación de copia está protegido y está eliminado (
= delete). Los flujos de salida no son CopyAssignable.2) El operador de asignación de movimiento intercambia todos los datos miembro de la clase base, excepto rdbuf(), con
rhs, como si llamara a swap(*rhs). Este operador de asignación de movimiento está protegido: solo lo llaman los operadores de asignación de movimiento de las clases de flujo de salida movibles derivadas std::basic_ofstream y std::basic_ostringstream, que saben cómo mover y asignar correctamente los búferes de flujo asociados.Parámetros
| rhs | - | El objeto basic_ostream desde el cual asignar a *this.
|
Ejemplo
Ejecuta este código
#include <iostream>
#include <sstream>
#include <utility>
int main()
{
std::ostringstream s;
// std::cout = s; // ERROR: el operador de asignación de copia está eliminado
// std::cout = std::move(s); // ERROR: el operador de asignación de movimiento está protegido
s = std::move(std::ostringstream() << 42); // de acuerdo, se movió mediante derivación
std::cout << s.str() << '\n';
}
Salida:
42
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2067 | C++11 | 1. the parameter type of overload (1) was basic_ostream&2. the parameter type of overload (2) was const basic_ostream&&
|
1. added const2. removed const
|