tow*_*owi 3 c++ iostream flush stream
我注意到在许多源代码文件中,人们可以看到cout在cin 没有显式刷新的情况下在写入之前写入:
#include <iostream>
using std::cin; using std::cout;
int main() {
int a, b;
cout << "Please enter a number: ";
cin >> a;
cout << "Another nomber: ";
cin >> b;
}
Run Code Online (Sandbox Code Playgroud)
执行此操作时,用户输入的42[Enter]73[Enter]内容很好(g ++ 4.6,Ubuntu):
Please enter a number: 42
Another number: 73
Run Code Online (Sandbox Code Playgroud)
这是定义的行为,即标准是否说cout在cin读取之前以某种方式刷新了?我可以在所有符合要求的系统上预期这种行为吗?
或者应该在这些消息后明确说明cout << flush?
默认情况下,流std::cout被绑定std::cin:指向的流stream.tie()在每次正确实现输入操作之前被刷新.除非您更改了绑定的流std::cin,否则std::cout在使用之前无需刷新,std::cin因为它将隐式完成.
在std::istream::sentry使用输入流构造a时,会发生刷新流的实际逻辑:当输入流未处于故障状态时,stream.tie()刷新指向的流.当然,这假设输入运算符看起来像这样:
std::istream& operator>> (std::istream& in, T& value) {
std::istream::sentry cerberos(in);
if (sentry) {
// read the value
}
return in;
}
Run Code Online (Sandbox Code Playgroud)
标准流操作以这种方式实现.当用户的输入操作未以此样式实现并使用流缓冲区直接进行输入时,不会发生刷新.当然,错误在输入操作符中.
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |