Cin和施工方案

Cin and method statement

本文关键字:方案 施工 Cin      更新时间:2023-10-16

我在接受输入时看到过这样写的(myDetails是一个结构):

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

我的问题是我不明白。整个语句怎么会变成一个对象,并有一个名为get()的方法?。我可以理解cin有一个名为get()的方法,cin周围的括号是什么?

这里的运算符>>只会返回一个对std::cin的引用,因此您正在调用上的get()。括号是必要的,这样您就不会试图在myDetails.weight.上调用get()

更普遍地说,流提取操作符通常有这样的签名:

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

然后,它们返回第一个参数,以便支持链接。这一点,再加上>>是关联的,允许您编写例如

std::cin >> a >> b;

相当于:

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

整个语句怎么会变成一个对象,并有一个名为get()的方法呢?

因为这不仅仅是一个声明;这是一个表达。istream的重载operator>>返回istream&,这意味着表达式cin >> x,无论是单独使用还是作为更宽的完整表达式的一部分使用,都将计算为istream&(特别是对cin本身的引用)。

这就是链接的工作原理:cin >> x >> y(cin >> x) >> y相同,因此您可以看到,只有当(cin >> x)计算为cin时,这才有效;您的示例完全相同,不同之处在于您调用的是成员.get()而不是成员operator>>