if (read(read(cin, data1), data2))
问题是 C ++ Primer 5th Edition 的练习。函数read
的定义如下:
std::istream &read(std::istream &is, Sales_data &item)
{
double price = 0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return is;
}
if语句中的条件是做什么的?我无法理解这一点。
答案 0 :(得分:1)
read
函数返回输入流,它类似于常见用法:
int v1, v2;
if (std::cin >> v1 >> v2)
//...
我想在本书的这个阶段,尚未引入运算符重载,如果运算符<<
为类Sales_data
重载,则会更清楚。
答案 1 :(得分:1)
if语句中的条件是做什么的?我无法理解 这一点。
你不应该要求练习的解决方案;这减少了学习效果。再次阅读章节和功能,看看你是否能发现重点。
如果你用不同的方式写出来也许会有所帮助:
std::istream& a = read(cin, data1);
std::istream& b = read(a , data2);
if (b)
// ...
答案 2 :(得分:0)
在这种情况下,函数read
采用std::istream
对象引用并返回相同的类型。这样做是为了read
可以被称为级联。考虑:
cin >> a >> b;
您认为a >> b
应如何运作?只是cin.operator>>(int&)
返回cin
对象本身。因此,通过理解,read
遵循相同的方法。