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) (начиная с C++11)
protected :
basic_istream ( basic_istream && rhs ) ;
(3) (начиная с C++11)

1) Создает объект basic_istream , присваивая начальные значения базовому классу путем вызова basic_ios :: init ( sb ) . Значение gcount() инициализируется нулем.

2) Конструктор копирования защищён и удалён. Входные потоки не подлежат копированию.

3) Конструктор перемещения копирует значение gcount() из rhs , устанавливает значение gcount() для rhs в ноль и использует basic_ios < CharT, Traits > :: move ( rhs ) для перемещения всех членов basic_ios, за исключением rdbuf() , из rhs в * this . Данный конструктор перемещения является защищённым: он вызывается конструкторами перемещения перемещаемых классов входных потоков std::basic_ifstream и std::basic_istringstream , которые знают, как корректно переместить связанный буфер потока.

Параметры

sb - streambuffer для использования в качестве базового устройства

Пример

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("hello");
    std::istream s2(s1.rdbuf()); // OK: s2 разделяет буфер с s1
//  std::istream s3(std::istringstream("test")); // ОШИБКА: конструктор перемещения защищен
//  std::istream s4(s2);                         // ОШИБКА: конструктор копирования удален
    std::istringstream s5(std::istringstream("world")); // OK: вызван конструктор перемещения
                                                        //     производным классом
    std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n';
}

Вывод:

hello world