可以将以下两行压缩成一行吗?
int foo;
std::cin >> foo;
答案 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);
}