为什么我不能用std:cin作为参数

时间:2016-05-21 22:31:59

标签: c++ iostream

学习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;
}

3 个答案:

答案 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