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()
инициализируется нулем.
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