混淆在rdbuf()

时间:2011-12-30 13:43:17

标签: c++

这是我的简单代码:

#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永远不会得到输入。那么整体上发生了什么?

2 个答案:

答案 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,它将是未初始化的,因此是一个随机数。

相关问题