c++ - 为什么我不能使用 std :cin as an argument

标签 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;
}

最佳答案

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 都可以用作表达式。 例如,将流隐式转换为 bool 值以检查它们是否处于成功(良好)状态是很常见的。 (例如,if(std::cin >> x){//...)

关于c++ - 为什么我不能使用 std :cin as an argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368640/

相关文章:

流运算符的 C++ 问题

c++ - C++ 中的沙漏添加参数

c++ - C++ iostream 中的奇怪 BUG?

c++ - 以位计数递增顺序遍历整数的每个位掩码

c++ - 从文本文档中提取键+短语的规则

c++ - 如何使用 IloCplex::readSolution() 并在查询 cplex 类实例后获取 var。值(value)观和其他值(value)观?

c++ - SWIG 将流从 python 传递到 C++

c++ - C/C++ 可在 32 位和 64 位机器上执行

c++ - 使用 GCC 编译但链接 LLVM LLD 时 LTO 是否有效?

c++ - 将 SQLite 与 std::iostream 一起使用