cin 返回值

来源:互联网 发布:信封制作软件 编辑:程序博客网 时间:2024/05/20 09:20

    今天看到如下语句:while (cin >> m >> n)...,心中冒出想一探究竟的念头。操作符<<和>>的返回值是啥,作为bool表达式来用又会产生什么值???带着疑问我去找寻标准库文件。

    就以cin >>为例,打开<ISTREAM>头文件,找到类模板basic_istream的定义,摘出这么两个语句来:

        typedef basic_istream<_E, _Tr> _Myt;

        _Myt& operator>>(......) ......

    这说明cin >>的返回值类型就是basic_istream&,可是放到while()中情况又该是怎样的。while()中要求是布尔表达式,难不成basic_istream&类型可以转换成bool类型?继续查看头文件,发现所有的operator重载函数都是<<和>>,没有找到用于类型转换的操作那就只好追溯到父类basic_ios了。

    打开头文件<IOS.H>,找到ios的定义,其中有这么一条语句,类型转换函数的定义:

        operator void *() const { if(state&(badbit|failbit) ) return 0; return (void *)this; }

    有这个函数的定义之后,编译器会在需要的情况下将ios类型自动转换为void*类型。因此,在表达式while (cin >> m >> n)中,括号中的表达式为了匹配bool类型将自动转换为void*类型。如果读入时发生错误返回0,否则返回cin的地址。

http://blog.sina.com.cn/s/blog_404dfe220100d80l.html

原创粉丝点击