Namespaces
Variants

std::basic_ios<CharT,Traits>:: tie

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

1) Gibt den aktuell gebundenen Stream zurück. Wenn kein gebundener Stream vorhanden ist, wird ein Nullzeiger zurückgegeben.
2) Setzt den aktuell verbundenen Stream auf str . Gibt den vorherigen verbundenen Stream zurück. Falls kein Stream verbunden war, wird ein Nullzeiger zurückgegeben. Wenn str nicht null ist und tie ( ) durch Durchlaufen der verknüpften Liste der verbundenen Stream-Objekte ausgehend von str - > tie ( ) erreichbar ist, ist das Verhalten undefiniert.

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
  1. 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-Objekts flush() auf seinem verknüpften Stream auf, und dieser flush() -Aufruf erstellt ein weiteres Sentry-Objekt, dessen Konstruktor wiederum flush() 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.