Namespaces
Variants

std::basic_ostream<CharT,Traits>:: basic_ostream

From cppreference.net
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