使用C ++时 std::iostream
(例如, std::fstream
要么 std::stringstream
,标准是否保证在同一个流上执行读写之间的关系?也就是说,如果我将数据写入一个,那是否正确 std::fstream
,然后尝试从该流中读取数据,我应该看到我写的数据?怎么样的 std::stringstream
?举个例子,这可以保证有效吗?
std::stringstream myStream;
myStream << "137 Hello 2.71828";
int myInt;
std::string myString;
double myDouble;
myStream >> myInt >> myString >> myDouble; // Parse as expected?
或者这个案子怎么样?
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?
我问,因为我最近开发了一个网络流类,其中读取和写入不会相互影响(因为读取从网络拉出并写入通过网络发送)。就是写作
myNetworkStream << "Hi there!" << endl;
通过网络写,而
myNetworkStream >> myValue;
从网络上读取。我不确定这种行为是否与流的一般合同一致。如果我不得不猜测,以下三个中的一个可能持有:
- 该
iostream
合同没有说明交错读写,或者 - 一般来说
iostream
合同没有说明交错读写,但规范中有一些特定的预设来管理标准类型如何fstream
和stringstream
工作,或 - 该
iostream
合同确实说了一些关于交叉读取和写入的事情,这使得我的网络流类违反了。
我有一个规范的副本,但关于流的部分是如此密集和神秘,它几乎不可能遵循。如果有人能够确切地澄清如何 iostream
s应该在你混合读写时表现,我真的很感激。