重载类型转化例如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);
}
查看7道真题和解析
