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)

Gère le flux associé. Un flux associé est un flux de sortie synchronisé avec la séquence contrôlée par le tampon de flux ( rdbuf() ), c'est-à-dire que flush ( ) est appelé sur le flux associé avant toute opération d'entrée/sortie sur * this .

1) Retourne le flux lié actuel. S'il n'y a pas de flux lié, un pointeur nul est retourné.
2) Définit le flux lié actuel à str . Retourne le flux lié avant l'opération. S'il n'y a pas de flux lié, un pointeur nul est retourné. Si str n'est pas nul et que tie ( ) est accessible en parcourant la liste chaînée des objets de flux liés à partir de str - > tie ( ) , le comportement est indéfini.

Table des matières

Paramètres

str - un flux de sortie à définir comme flux lié

Valeur de retour

Le flux lié, ou un pointeur nul s'il n'y avait pas de flux lié.

Exceptions

Peut lever des exceptions définies par l'implémentation.

Notes

Par défaut, le flux standard std::cout est lié à std::cin et std::cerr . De même, son équivalent large std::wcout est lié à std::wcin et std::wcerr .

Exemple

#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";
}

Sortie :

Result before tie(): "0"
Result after tie(): "Hello"

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 835 C++98 deux flux pouvaient être liés l'un à l'autre [1]
(soit directement, soit via un autre objet flux intermédiaire)
le comportement est indéfini dans ce cas
  1. std::basic_ostream::flush() est une UnformattedOutputFunction , donc elle crée un objet sentinelle lors de son appel. Lorsque flush() est appelé sur un objet flux, le constructeur de l'objet sentinelle appellera flush() sur son flux lié, et ce flush() construira un autre objet sentinelle dont le constructeur appellera flush() sur le flux lié de ce flux et ainsi de suite. Par conséquent, si les flux a et b sont liés (directement ou indirectement) l'un à l'autre, l'appel de a. flush ( ) appellera éventuellement b. flush ( ) , qui appellera éventuellement a. flush ( ) , et résultera en une boucle infinie.