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) | (seit C++11) |
|
protected
:
basic_ostream ( basic_ostream && rhs ) ; |
(3) | (seit C++11) |
1)
Konstruiert das
basic_ostream
-Objekt, weist den Basisklassen initiale Werte zu durch Aufruf von
basic_ios::init(sb)
.
2)
Der Kopierkonstruktor ist geschützt und gelöscht. Ausgabestreams sind nicht kopierbar.
3)
Der Move-Konstruktor verwendet
basic_ios
<
CharT, Traits
>
::
move
(
rhs
)
um alle
basic_ios
-Member, außer
rdbuf()
, von
rhs
nach
*
this
zu verschieben. Dieser Move-Konstruktor ist geschützt: Er wird von den Move-Konstruktoren der beweglichen Ausgabestromklassen
std::basic_ofstream
und
std::basic_ostringstream
aufgerufen, die wissen, wie der zugehörige Streambuffer korrekt verschoben wird.
Parameter
| sb | - | Streambuffer, der als Ausgabesequenz verwendet wird |
| rhs | - | basic_ostream, von dem initialisiert wird |
Hinweise
Weil
basic_ios::init(sb)
das
badbit
setzt, wenn
sb
ein Nullzeiger ist, und weil
basic_ostream::sentry
nichts tut, wenn der Stream sich bereits in einem Fehlerzustand befindet, ist das Schreiben in einen Stream, der von einem Nullzeiger
sb
konstruiert wurde, eine No-Op.
Beispiel
Diesen Code ausführen
#include <iostream> #include <sstream> #include <utility> int main() { // FEHLER: Copy-Konstruktor ist gelöscht // std::ostream myout(std::cout); // OK: Teilt Puffer mit cout std::ostream myout(std::cout.rdbuf()); // FEHLER: Move-Konstruktor ist geschützt // std::ostream s2(std::move(std::ostringstream() << 7.1)); // OK: Move-Konstruktor wird über die abgeleitete Klasse aufgerufen std::ostringstream s2(std::ostringstream() << 7.1); myout << s2.str() << '\n'; std::ostream dev_null{nullptr}; // siehe Hinweise oben dev_null << "no-op"; }
Ausgabe:
7.1