我在接受输入时看到了这个(myDetails是一个结构):
cout << "Enter your weight: ";
(cin >> myDetails.weight).get();
我的问题是我不明白。如何将整个语句变成一个对象,并有一个名为get()的方法?我可以理解cin有一个叫做get()的方法,cin创建的括号是什么?
答案 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>>
。