学习C++并且无法理解为什么我不能使用“std :: cin”作为参数。为什么我不能使用std:cin作为参数
#include <iostream>
#include "stdafx.h"
int doubleNumber(int a)
{
return 2 * a;
}
int main()
{
int x;
std::cout << doubleNumber(std::cin >> x);
return 0;
}
学习C++并且无法理解为什么我不能使用“std :: cin”作为参数。为什么我不能使用std:cin作为参数
#include <iostream>
#include "stdafx.h"
int doubleNumber(int a)
{
return 2 * a;
}
int main()
{
int x;
std::cout << doubleNumber(std::cin >> x);
return 0;
}
std::cin >> x
返回对cin
的引用,该引用不会隐式转换为int
。
可以使用,
运营商,像这样:
(std::cin >> x, x)
先运行std::cin >> x
,然后该表达式计算结果为x
。
#include <iostream>
int doubleNumber(int a)
{
return 2 * a;
}
int main()
{
int x;
std::cout << doubleNumber((std::cin >> x, x));
return 0;
}
将它分成两行可能会使它更具可读性。
在任何情况下,std::cin >> x
都可以用作表达式。 例如,将流隐式转换为布尔值以检查它们是否处于成功(良好)状态是很常见的。 (例如,if(std::cin >> x){ //...
)
你大概想通过x
。但cin >> x
的结果是cin
,而不是x
。
该解决方案易于
std::cin >> x;
std::cout << doubleNumber(x);
你不能真正通过cin
如果你真的想因为它是一个流,而不是int
。
而返回类型>>
就是它让std::cin >> x >> y >> z;
这样的东西起作用的方式。
所以没有办法将cin >> x作为参数传递,您在使用它作为参数之前总是需要询问? –
是的,这是正确的。 –
函数不能带流类型的参数吗? (只是问':)。 –
std::cin
是一个全局对象和operator >>
,您发出呼叫的是,再次返回std::cin
的方法,这样你就可以写的东西,如:
std::cin >> x >> y;
我想说的是,std::cin >> x
输出不是你刚输入的价值,就像你期望的那样,但是它本身就是std::cin
。
有关详细信息,请参阅http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt。
非常感谢你,那正是我一直在寻找的:) –