以下if语句中的条件是做什么的?

时间:2014-11-08 15:21:18

标签: c++

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语句中的条件是做什么的?我无法理解这一点。

3 个答案:

答案 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遵循相同的方法。