I/O manipulators | ||||
Print functions(C++23) | ||||
C-style I/O | ||||
Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
Streams | ||||
Abstractions | ||||
File I/O | ||||
String I/O | ||||
Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
Synchronized Output | ||||
(C++20) | ||||
Types | ||||
Error category interface | ||||
(C++11) | ||||
(C++11) |
Global objects | ||||
Member functions | ||||
basic_istream::basic_istream | ||||
(C++11) | ||||
Formatted input | ||||
Unformatted input | ||||
Positioning | ||||
Miscellaneous | ||||
(C++11) | ||||
Member classes | ||||
Non-member functions | ||||
explicit basic_istream(std::basic_streambuf<CharT, Traits>* sb); | (1) | |
protected: basic_istream(const basic_istream& rhs)= delete; | (2) | (since C++11) |
protected: basic_istream( basic_istream&& rhs); | (3) | (since C++11) |
1) Constructs thebasic_istream
object, assigning initial values to the base class by callingbasic_ios::init(sb). The value ofgcount()
is initialized to zero.
2) The copy constructor is protected, and is deleted. Input streams are not copyable.
3) The move constructor copies the value ofgcount()
fromrhs, sets the gcount() value ofrhs to zero, and usesbasic_ios<CharT, Traits>::move(rhs) to move all basic_ios members, except for therdbuf()
, fromrhs into*this. This move constructor is protected: it is called by the move constructors of movable input stream classesstd::basic_ifstream andstd::basic_istringstream, which know how to correctly move the associated stream buffer.
sb | - | streambuffer to use as underlying device |
#include <iostream>#include <sstream> int main(){std::istringstream s1("hello");std::istream s2(s1.rdbuf());// OK: s2 shares the buffer with s1 // std::istream s3(std::istringstream("test")); // ERROR: move constructor is protected// std::istream s4(s2); // ERROR: copy constructor is deletedstd::istringstream s5(std::istringstream("world"));// OK: move ctor called// by derived class std::cout<< s2.rdbuf()<<' '<< s5.rdbuf()<<'\n';}
Output:
hello world