学习c ++并且无法理解为什么我不能使用“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;
}
答案 0 :(得分:3)
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){ //...
)
答案 1 :(得分:2)
你可能想通过x
。但cin >> x
的结果是cin
,而不是x
。
解决方案很简单
std::cin >> x;
std::cout << doubleNumber(x);
如果您确实想要,则无法实际传递cin
,因为它是一个流,而不是int
。
>>
的返回类型就是允许std::cin >> x >> y >> z;
之类的内容工作的方式。
答案 2 :(得分:1)
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。