std::basic_istream<CharT,Traits>:: basic_istream
|
explicit
basic_istream
(
std::
basic_streambuf
<
CharT, Traits
>
*
sb
)
;
|
(1) | |
|
protected
:
basic_istream ( const basic_istream & rhs ) = delete ; |
(2) | (desde C++11) |
|
protected
:
basic_istream ( basic_istream && rhs ) ; |
(3) | (desde C++11) |
1) Construye el objeto
basic_istream
, asignando valores iniciales a la clase base llamando a
basic_ios
::
init
(
sb
)
. El valor de
gcount()
se inicializa a cero.
2) El constructor de copia está protegido y está eliminado. Los flujos de entrada no son copiables.
3) El constructor de movimiento copia el valor de
gcount()
desde
rhs
, establece el valor de gcount() de
rhs
a cero, y utiliza
basic_ios
<
CharT, Traits
>
::
move
(
rhs
)
para mover todos los miembros de basic_ios, excepto el
rdbuf()
, desde
rhs
hacia
*
this
. Este constructor de movimiento es protegido: es llamado por los constructores de movimiento de las clases de flujo de entrada movibles
std::basic_ifstream
y
std::basic_istringstream
, que saben cómo mover correctamente el búfer de flujo asociado.
Parámetros
| sb | - | streambuffer a utilizar como dispositivo subyacente |
Ejemplo
#include <iostream> #include <sstream> int main() { std::istringstream s1("hello"); std::istream s2(s1.rdbuf()); // CORRECTO: s2 comparte el buffer con s1 // std::istream s3(std::istringstream("test")); // ERROR: el constructor de movimiento está protegido // std::istream s4(s2); // ERROR: el constructor de copia está eliminado std::istringstream s5(std::istringstream("world")); // CORRECTO: se llama al constructor de movimiento // por la clase derivada std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n'; }
Salida:
hello world