gpt4 book ai didi

c++ - 交错的 cout 和 cin 操作是否需要显式刷新?

转载 作者:太空狗 更新时间:2023-10-29 19:58:35 25 4
gpt4 key购买 nike

我注意到在许多源代码文件中可以看到写入 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;
}

当此执行且用户输入 42[Enter]73[Enter] 时它很好地打印(g++ 4.6,Ubuntu):

Please enter a number: 42
Another number: 73

这是定义的行为吗,即标准是否以某种方式说 coutcin 之前被刷新已读?我可以在所有符合标准的系统上期待这种行为吗?

或者应该放一个明确的cout << flush 在那些消息之后?

最佳答案

std::cout绑定(bind)到 std::cin默认情况下:stream.tie() 指向的流在每次正确实现输入操作之前被刷新。除非你更改了与 std::cin 相关的流, 无需冲洗 std::cout使用前 std::cin因为它将隐式完成。

刷新流的实际逻辑发生在构造 std::istream::sentry 时使用输入流:当输入流未处于故障状态时,stream.tie() 指向的流脸红了。当然,这是假设输入运算符看起来像这样:

std::istream& operator>> (std::istream& in, T& value) {
std::istream::sentry cerberos(in);
if (sentry) {
// read the value
}
return in;
}

标准的流操作就是这样实现的。当用户的输入操作没有以这种方式实现并且直接使用流缓冲区进行输入时,不会发生刷新。当然,错误出在输入运算符中。

关于c++ - 交错的 cout 和 cin 操作是否需要显式刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20293679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com