std::basic_ostream<CharT,Traits>:: basic_ostream
From cppreference.net
<
cpp
|
io
|
basic ostream
|
explicit
basic_ostream
(
std::
basic_streambuf
<
CharT, Traits
>
*
sb
)
;
|
(1) | |
|
protected
:
basic_ostream ( const basic_ostream & rhs ) = delete ; |
(2) | (desde C++11) |
|
protected
:
basic_ostream ( basic_ostream && rhs ) ; |
(3) | (desde C++11) |
1)
Construye el objeto
basic_ostream
, asignando valores iniciales a la clase base mediante la llamada a
basic_ios::init(sb)
.
2)
El constructor de copia está protegido y está eliminado. Los flujos de salida no son copiables.
3)
El constructor de movimiento utiliza
basic_ios
<
CharT, Traits
>
::
move
(
rhs
)
para mover todos los miembros de
basic_ios
, excepto
rdbuf()
, desde
rhs
hacia
*
this
. Este constructor de movimiento está protegido: es llamado por los constructores de movimiento de las clases de flujo de salida movibles
std::basic_ofstream
y
std::basic_ostringstream
, que saben cómo mover correctamente el búfer de flujo asociado.
Parámetros
| sb | - | búfer de flujo a utilizar como secuencia de salida |
| rhs | - | basic_ostream desde el cual inicializar |
Notas
Debido a que
basic_ios::init(sb)
establece
badbit
cuando
sb
es un puntero nulo, y debido a que
basic_ostream::sentry
no hace nada si el flujo ya está en estado de fallo, escribir en un flujo construido desde un puntero nulo
sb
es una operación nula.
Ejemplo
Ejecutar este código
#include <iostream> #include <sstream> #include <utility> int main() { // ERROR: el constructor de copia está eliminado // std::ostream myout(std::cout); // OK: comparte el buffer con cout std::ostream myout(std::cout.rdbuf()); // ERROR: el constructor de movimiento está protegido // std::ostream s2(std::move(std::ostringstream() << 7.1)); // OK: se llama al constructor de movimiento a través de la clase derivada std::ostringstream s2(std::ostringstream() << 7.1); myout << s2.str() << '\n'; std::ostream dev_null{nullptr}; // ver Notas anteriores dev_null << "no-op"; }
Salida:
7.1