std::basic_ios<CharT,Traits>:: tie
|
std::
basic_ostream
<
CharT, Traits
>
*
tie
(
)
const
;
|
(1) | |
|
std::
basic_ostream
<
CharT, Traits
>
*
tie
(
std::
basic_ostream
<
CharT, Traits
>
*
str
)
;
|
(2) | |
Verwaltet den gebundenen Stream. Ein gebundener Stream ist ein Ausgabestream, der mit der vom Streampuffer ( rdbuf() ) kontrollierten Sequenz synchronisiert ist, das heißt, flush ( ) wird auf dem gebundenen Stream vor jeder Eingabe-/Ausgabeoperation auf * this aufgerufen.
Inhaltsverzeichnis |
Parameter
| str | - | ein Ausgabestream, der als verbundener Stream festgelegt werden soll |
Rückgabewert
Der gebundene Stream, oder ein null-Zeiger falls kein Stream gebunden war.
Exceptions
Kann implementierungsdefinierte Ausnahmen auslösen.
Hinweise
Standardmäßig ist der Standardstream std::cout mit std::cin und std::cerr verbunden. Ebenso ist sein breiter Gegenpart std::wcout mit std::wcin und std::wcerr verbunden.
Beispiel
#include <fstream> #include <iomanip> #include <iostream> #include <string> int main() { std::ofstream os("test.txt"); std::ifstream is("test.txt"); std::string value("0"); os << "Hello"; is >> value; std::cout << "Result before tie(): " << std::quoted(value) << "\n"; is.clear(); is.tie(&os); is >> value; std::cout << "Result after tie(): " << std::quoted(value) << "\n"; }
Ausgabe:
Result before tie(): "0" Result after tie(): "Hello"
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 835 | C++98 |
zwei Streams konnten miteinander verbunden werden
[1]
(entweder direkt oder über ein anderes intermediäres Stream-Objekt) |
das Verhalten ist in diesem Fall undefiniert |
-
↑
std::basic_ostream::flush()
ist eine
UnformattedOutputFunction
, daher erstellt sie beim Aufruf ein Sentry-Objekt. Wenn
flush()auf einem Stream-Objekt aufgerufen wird, ruft der Konstruktor des Sentry-Objektsflush()auf seinem verknüpften Stream auf, und dieserflush()-Aufruf erstellt ein weiteres Sentry-Objekt, dessen Konstruktor wiederumflush()auf dem verknüpften Stream dieses Streams aufruft und so weiter. Wenn also Streams a und b (direkt oder indirekt) miteinander verknüpft sind, führt der Aufruf von a. flush ( ) letztendlich zum Aufruf von b. flush ( ) , was wiederum a. flush ( ) aufruft und zu einer Endlosschleife führt.