Cin和方法声明

时间:2012-03-04 18:01:07

标签: c++ cin

我在接受输入时看到了这个(myDetails是一个结构):

cout << "Enter your weight: ";
(cin >> myDetails.weight).get();

我的问题是我不明白。如何将整个语句变成一个对象,并有一个名为get()的方法?我可以理解cin有一个叫做get()的方法,cin创建的括号是什么?

2 个答案:

答案 0 :(得分:6)

运营商&gt;&gt;这里只返回对std :: cin的引用,所以你正在调用get()。括号是必要的,这样你就不会试图在myDetails.weight上调用get()。

更一般地说,流提取操作符通常具有以下签名:

std::istream& operator>>(std::istream& is, thing& rhs);

然后他们返回他们的第一个参数以支持链接。这与&gt;&gt;的事实相结合。是左关联的,允许你写例如。

std::cin >> a >> b;

相当于:

operator>>(operator>>(std::cin, a), b);

答案 1 :(得分:1)

  

整个语句如何变得像一个对象,并有一个名为get()的方法?

因为这不仅仅是一个陈述;这是一个表达。 operator>>的重载istream返回istream&,表示表达式cin >> x,无论是单独使用还是作为更广泛的完整表达式,将评估为istream&(具体而言,是对cin本身的引用)。

这就是链接的工作方式:cin >> x >> y(cin >> x) >> y相同,因此您可以看到这仅在(cin >> x)评估为cin时有效;你的例子是一样的,区别在于你正在调用成员.get()而不是成员operator>>