15

下面两行可以浓缩成一行吗?

int foo;
std::cin >> foo;
4

4 回答 4

22

聪明的回答:

int old; std::cin >> old;

可怕的答案:

int old, dummy = (std::cin >> old, 0);

正确答案:old必须先用声明定义,然后才能将其operator>>作为参数传递。在变量声明中获取函数调用的唯一方法是将其放在上面的初始化表达式中。声明变量并将输入读入其中的公认方法是您所写的:

int old;
std::cin >> old;
于 2013-02-16T20:23:57.723 回答
11

你可以...

int old = (std::cin >> old, old);

但你真的不应该这样做

于 2013-02-16T20:32:34.320 回答
3

使用函数:

int inputdata()
{
    int data;
    std::cin >> data;
    return data;
}

然后:

int a=inputdata();

对于数据本身:

int inputdata()
{
    static bool isDataDeclared=false;
    if (isDataDeclared==true)
    {
    goto read_data;
    }
    else
    {
        isDataDeclared=true;
    }
    static int data=inputdata();
    return data;
    read_data:
    std::cin >> data;
    return data;
}
于 2013-02-16T20:52:34.667 回答
1

也许不是针对int,而是针对您自己的类型:

class MyType {
    int value;
public:
    MyType(istream& is) {
        is >> *this;
    }

    friend istream& operator>>(istream& is, MyType& object);
};  

istream& operator>>(istream& is, MyType& object) {
    return is >> object.value;
}

然后您可以使用istream传递给构造函数的类型创建类型:

int main() {
    istringstream iss("42");
    MyType object(iss);
}
于 2013-02-16T21:59:18.730 回答