鱼C论坛

 找回密码
 立即注册
查看: 11766|回复: 9

cin>>i 返回什么?为何可以作while的真假判断条件?

[复制链接]
发表于 2013-7-28 15:08:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
cin>>i 返回的是cin,难道这个cin是一个具体的布尔值吗?否则怎么可以表示true or false呢?
会不会是cin里面有个方法,只要cin>>i出错,就强制转换为false
这一部分感觉小甲鱼并没有讲透彻

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-28 15:12:46 | 显示全部楼层
看到其他地方的解释,但并不能完全理解:
”cin>>i 返回的是cin这个流对象,而不是流状态
      之所以能用作逻辑条件,是因为operator bool“
最后的operator bool是什么意思啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-28 16:36:16 | 显示全部楼层
{:7_153:}cin返回就是cin。所以cin>>i>>s可以连起来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-28 17:09:41 | 显示全部楼层
istream类提供了一个可以将istream对象(如cin)转化为bool值得函数,当cin出现在需要bool值得地方
(如while循环的测试条件中),该转换函数被调用,得到一个bool值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-28 18:41:49 | 显示全部楼层

这是多态还是重载:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2013-7-28 19:38:05 | 显示全部楼层
只是判断返回的std::istream是否为空啦1亲。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-28 19:41:10 | 显示全部楼层
本帖最后由 zzmaster 于 2013-7-28 19:53 编辑

cin 的返回值 是cin 本身, 如果输入流 正常 则 相当于 true 反之相当于 false#include<iostream>
using namespace std;
int main()
{
        int x;
        bool y;
        y=(cin>>x);
        cout<<y<<endl;
        return 0;
}

不知道可以解决你的问题不?下面是我查的资料
http://blog.csdn.net/weapon_tian_xia/article/details/6895541

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2013-7-29 10:14:23 | 显示全部楼层
南风烟雨五庄观 发表于 2013-7-28 18:41
这是多态还是重载

类型的隐式转换。楼主可以百度。
  1. class CInteger
  2. {
  3. public:
  4.         int m_nVal;
  5.         // 注释掉后 就不能把CInteger类型的变量 隐式转换成int型的了
  6.         operator int(){ return m_nVal; }

  7. };

  8. int main(int argc, char *argv[])
  9. {
  10.         CInteger val;
  11.         int nTest = val;

  12.         return 0;
  13. }
复制代码
注释掉 operator int(){ return m_nVal; } 后,编译会报错 error C2440: 'initializing' : cannot convert from 'CInteger' to 'int'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 23:07:10 | 显示全部楼层
这是C++的?好吧,我以为是C语言~我只是路过~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-29 23:19:50 | 显示全部楼层
南风烟雨五庄观 发表于 2013-7-28 15:12
看到其他地方的解释,但并不能完全理解:
”cin>>i 返回的是cin这个流对象,而不是流状态
      之所以能 ...

这个解释不完全准确cin>>i返回cin本身因为cin定义了operator void*,就是说cin可以被隐式类型转换为void*指针(当流状态完好的时候指针非空),因此while( cin>>i ){ ... }里面是根据void*指针类型的值是否为空来判断的。cin没有定义operator bool
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-17 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表