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) | |
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 .
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 |
-
↑
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 appelleraflush()sur son flux lié, et ceflush()construira un autre objet sentinelle dont le constructeur appelleraflush()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.