J'ai une fonction qui prend un ostream
en tant qu'argument, écrit des données dans le flux, puis renvoie une référence à ce même flux, comme suit :
#include <iostream>
std::ostream& print( std::ostream& os ) {
os << " How are you?" << std::endl;
return os;
}
int main() {
std::cout << "Hello, world!" << print( std::cout ) << std::endl;
}
La sortie de ce code est :
How are you?
Hello, world!0x601288
Cependant, si je sépare les expressions de chaînage en deux déclarations, comme ceci
int main() {
std::cout << "Hello, world!";
std::cout << print( std::cout ) << std::endl;
}
alors j'obtiens au moins l'ordre correct dans la sortie, mais j'obtiens toujours une valeur hexagonale :
Hello, world! How are you?
0x600ec8
J'aimerais comprendre ce qui se passe ici. Est-ce qu'une fonction normale a la priorité sur operator<<
et c'est pourquoi l'ordre de sortie est inversé ? Quelle est la bonne façon d'écrire une fonction qui insère des données dans un fichier de données ? ostream
mais cela peut aussi s'enchaîner avec operator<<
?