重载类型转化例如while(getline(cin))
今天在c++primerplus看到一个例子,我一直纠结while()里面怎么可以放类呢,明明应该是一个逻辑值才对,我查看了对应的源码,返回值确实也是类,后来老大给我发了一个链接才恍然大悟,内部用的是重载类型转化,ifstream成功的把类类型转化成了bool类型。
参考链接:http://blog.sina.com.cn/s/blog_ad0672d60101cd63.html
ifstream源代码如下:
_CLR_OR_THIS_CALL _OPERATOR_BOOL() const { // test if _Ipfx succeeded return (_Ok ? _CONVERTIBLE_TO_TRUE : 0); }
测试代码:
#include <iostream> #include <cstdlib> #include <string> #include <fstream> using namespace std; int main() { ifstream fin; fin.open( "log.txt" ); if ( fin.is_open() == false ) { cerr << "Cannot open the file\n"; exit( EXIT_FAILURE ); } string item; string s; int count = 0; getline( fin, item ); while ( fin ) { ++count; for ( int i = 0; i < item.size(); i++ ) { if ( item[i] != ' ' ) s += item[i]; } cout << count << " : " << item << endl; getline( fin, item ); } cout << "Done\n"; cout << s << endl; fin.close(); cin.get(); return(0); }