Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在rdbuf()中感到困惑 这是我的简单代码: #包括 int main() { int foo; std::cin.rdbuf(std::cout.rdbuf()); std::cin>>foo;//这一行将发生什么?我输入的内容将进入cout的缓冲区,然后进入foo,对吗? }_C++ - Fatal编程技术网

C++ 在rdbuf()中感到困惑 这是我的简单代码: #包括 int main() { int foo; std::cin.rdbuf(std::cout.rdbuf()); std::cin>>foo;//这一行将发生什么?我输入的内容将进入cout的缓冲区,然后进入foo,对吗? }

C++ 在rdbuf()中感到困惑 这是我的简单代码: #包括 int main() { int foo; std::cin.rdbuf(std::cout.rdbuf()); std::cin>>foo;//这一行将发生什么?我输入的内容将进入cout的缓冲区,然后进入foo,对吗? },c++,C++,我所想的是,上面的代码会将cin的缓冲区设置为cout的缓冲区,所以当我输入一些数字时,它也会被输出。我想我对自己的节目感到困惑。有人能告诉我节目里发生了什么吗 另外,如果我在末尾再添加一行:std::cout我在想,但不确定foo没有被输入的原因是因为在您将cin的缓冲区设置为cout之后,该行 std::cin >> foo; 实际上会变成 std::cout >> foo; 其中>>运算符的使用不正确,因此foo不会发生任何变化 然后,当你使用 std::cou

我所想的是,上面的代码会将
cin
的缓冲区设置为
cout
的缓冲区,所以当我输入一些数字时,它也会被输出。我想我对自己的节目感到困惑。有人能告诉我节目里发生了什么吗


另外,如果我在末尾再添加一行:
std::cout我在想,但不确定foo没有被输入的原因是因为在您将cin的缓冲区设置为cout之后,该行

std::cin >> foo;
实际上会变成

std::cout >> foo;
其中>>运算符的使用不正确,因此foo不会发生任何变化

然后,当你使用

std::cout << foo;

std::cout流负责格式化并将IO委托给streambuf(因此,streambuf的作用不仅仅是缓冲,它还执行IO)


因此,使用
std::cin.rdbuf(std::cout.rdbuf())
您要求cin使用cout的streambuf进行输入,这可能还没有准备好进行输入。所以
std::cin>>foo将失败。

完美的解释,非常感谢:)
std::cout << foo;