#include <iostream>
int main()
{
int foo;
std::cin.rdbuf(std::cout.rdbuf());
std::cin>>foo; // what'll happen at this line? whatever I'll input will go to cout's buffer then to foo , right?
}
我以为上面的代码会将cin
的缓冲区设置为cout
的缓冲区,所以当我输入一些数字时,它也会被输出。我想我对自己的程序感到困惑。谁能告诉我程序中发生了什么?
另外,如果我在结尾添加一行:std::cout<<foo;
,那么它会输出随机数,这意味着foo永远不会得到输入。那么整体上发生了什么?
答案 0 :(得分:6)
流负责格式化并将IO委托给streambuf(因此它不仅仅是缓冲,它还执行IO)。
所以对于std::cin.rdbuf(std::cout.rdbuf())
,你要求使用cout的streambu来进行输入,这可能还没有准备好做输入。所以std::cin>>foo
会失败。
答案 1 :(得分:0)
我在想,但我不确定,没有输入foo的原因是因为在你将cin的缓冲区设置为cout后,该行
std::cin >> foo;
实际上会变成
std::cout >> foo;
其中使用&gt;&gt;运算符不正确,所以foo没有任何反应。
然后,当你使用
std::cout << foo;
它将输出foo,它将是未初始化的,因此是一个随机数。