std::basic_istream::basic_istream
cppreference.com
[] |
Google. . , . , . |
<metanoindex/>
<tbody> </tbody> explicit basic_istream( std::basic_streambuf<CharT,Traits>* sb); |
(1) | |
protected: basic_istream( const basic_istream& rhs ) = delete; |
(2) | |
protected: basic_istream( basic_istream&& rhs ); |
(3) | ( C++11) |
1)
basic_istream , , basic_ios::init(sb). gcount() .:
Constructs the
basic_istream object, assigning initial values to the base class by calling basic_ios::init(sb). The value of gcount() is initialized to zero.2)
, . .
3)
gcount() rhs, gcount () , basic_ios<charT, traits>::move(rhs), basic_ios , rdbuf(), rhs *this. : std::basic_ifstream std::basic_istringstream, , streambuffer.:
The move constructor copies the value of
gcount() from rhs, sets the gcount() value of rhs to zero, and uses basic_ios<charT, traits>::move(rhs) to move all basic_ios members, except for the rdbuf(), from rhs into *this. This move constructor is protected: it is called by the move constructors of movable input stream classes std::basic_ifstream and std::basic_istringstream, which know how to correctly move the associated streambuffer.| sb | streambuffer
|
#include <sstream>
#include <iostream>
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 deleted
std::istringstream s5(std::istringstream("world")); // OK: move ctor called by derived class
std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n';
}
:
hello world