Lorsque l'on travaille avec un C++ std::iostream
(par exemple, std::fstream
o std::stringstream
La norme garantit-elle quoi que ce soit quant aux relations entre les lectures et les écritures effectuées sur le même flux ? En d'autres termes, est-il nécessairement vrai que si j'écris des données dans un fichier std::fstream
puis essayer de lire des données à partir de ce flux, je devrais voir les données que j'ai écrites ? Et dans le cas d'un std::stringstream
? A titre d'exemple, le fonctionnement est-il garanti ?
std::stringstream myStream;
myStream << "137 Hello 2.71828";
int myInt;
std::string myString;
double myDouble;
myStream >> myInt >> myString >> myDouble; // Parse as expected?
Ou qu'en est-il de cette affaire ?
std::fstream myStream("some-file.txt", ios::in | ios::out);
myStream << "137 Hello 2.71828";
int myInt;
std::string myString;
double myDouble;
myStream >> myInt >> myString >> myDouble; // Parse as expected?
Je pose cette question parce que j'ai récemment développé une classe de flux en réseau dans laquelle les lectures et les écritures ne s'influencent pas les unes les autres (puisque les lectures tirent du réseau et les écritures envoient à travers le réseau). En d'autres termes, l'écriture
myNetworkStream << "Hi there!" << endl;
écrit sur le réseau, tandis que
myNetworkStream >> myValue;
lit le réseau. Je ne suis pas sûr que ce comportement soit cohérent avec le contrat général pour les flux. Si je devais deviner, l'une des trois possibilités suivantes s'applique probablement :
- En
iostream
Le contrat ne dit rien sur les lectures et les écritures entrelacées, ni sur l'utilisation de la technologie de l'information. - En général, les
iostream
ne dit rien sur les lectures et écritures entrelacées, mais il y a des dispositions spécifiques dans la spécification qui régissent la façon dont les types standard tels quefstream
ystringstream
travail, ou - En
iostream
Le contrat dit quelque chose à propos des lectures et écritures entrelacées qui fait que ma classe de flux réseau est violée.
J'ai une copie de la spécification, mais la section sur les flux est tellement dense et énigmatique qu'il est pratiquement impossible de la suivre. Si quelqu'un pouvait clarifier exactement comment iostream
sont censés se comporter lorsque l'on mélange des lectures et des écritures, j'apprécierais beaucoup.