std::basic_ostream<CharT,Traits>:: basic_ostream
From cppreference.net
<
cpp
|
io
|
basic ostream
|
explicit
basic_ostream
(
std::
basic_streambuf
<
CharT, Traits
>
*
sb
)
;
|
(1) | |
|
protected
:
basic_ostream ( const basic_ostream & rhs ) = delete ; |
(2) | (начиная с C++11) |
|
protected
:
basic_ostream ( basic_ostream && rhs ) ; |
(3) | (начиная с C++11) |
1)
Создает объект
basic_ostream
, присваивая начальные значения базовому классу путем вызова
basic_ios::init(sb)
.
2)
Конструктор копирования защищен и удален. Потоки вывода не подлежат копированию.
3)
Конструктор перемещения использует
basic_ios
<
CharT, Traits
>
::
move
(
rhs
)
для перемещения всех членов
basic_ios
, кроме
rdbuf()
, из
rhs
в
*
this
. Этот конструктор перемещения является защищённым: он вызывается конструкторами перемещения перемещаемых классов выходных потоков
std::basic_ofstream
и
std::basic_ostringstream
, которые знают, как правильно переместить связанный буфер потока.
Параметры
| sb | - | буфер потока, используемый в качестве выходной последовательности |
| rhs | - | basic_ostream для инициализации |
Примечания
Поскольку
basic_ios::init(sb)
устанавливает
badbit
когда
sb
является нулевым указателем, и поскольку
basic_ostream::sentry
не выполняет никаких действий, если поток уже находится в ошибочном состоянии, запись в поток, созданный из нулевого указателя
sb
является no-op операцией.
Пример
Запустить этот код
#include <iostream> #include <sstream> #include <utility> int main() { // ОШИБКА: конструктор копирования удален // std::ostream myout(std::cout); // OK: разделяет буфер с cout std::ostream myout(std::cout.rdbuf()); // ОШИБКА: конструктор перемещения защищен // std::ostream s2(std::move(std::ostringstream() << 7.1)); // OK: конструктор перемещения вызывается через производный класс std::ostringstream s2(std::ostringstream() << 7.1); myout << s2.str() << '\n'; std::ostream dev_null{nullptr}; // см. примечания выше dev_null << "no-op"; }
Вывод:
7.1