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() 의 값은 0으로 초기화됩니다.

2) 복사 생성자는 protected로 선언되었으며 삭제되었습니다. 입력 스트림은 복사할 수 없습니다.

3) 이동 생성자는 rhs 로부터 gcount() 값을 복사하고, rhs 의 gcount() 값을 0으로 설정하며, basic_ios < CharT, Traits > :: move ( rhs ) 를 사용하여 rdbuf() 를 제외한 모든 basic_ios 멤버를 rhs 에서 * this 로 이동시킵니다. 이 이동 생성자는 protected로 선언되어 있습니다: 이동 가능한 입력 스트림 클래스인 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")); // ERROR: 이동 생성자가 protected임
//  std::istream s4(s2);                         // ERROR: 복사 생성자가 삭제됨
    std::istringstream s5(std::istringstream("world")); // OK: 파생 클래스에서 호출된
                                                        //     이동 생성자
    std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n';
}

출력:

hello world