Cin和施工方案
Cin and method statement
我在接受输入时看到过这样写的(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>>
。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 为什么 boost::interprocess::managed_shared_memory 在施工时会抛出 boost
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- Cin和施工方案