变量是否可以在声明的同一行上使用istream进行初始化?

时间:2013-02-16 20:16:15

标签: c++ int cin

可以将以下两行压缩成一行吗?

int foo;
std::cin >> foo;

4 个答案:

答案 0 :(得分:19)

聪明屁股答案:

int old; std::cin >> old;

可怕的答案:

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

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

int old;
std::cin >> old;

答案 1 :(得分:11)

你可以......用

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

但你真的不应该这样做

答案 2 :(得分: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;
}

答案 3 :(得分: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);
}