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) | (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