Namespaces
Variants

std::basic_istream<CharT,Traits>:: basic_istream

From cppreference.net
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