软件开发: 01 2007存档


ifstream stream("log.conf");

char buffer[1024];

while(stream.good())
{
stream.getline(buffer,sizeof(buffer));
//some process about buffer

这段代码害我不浅:当被读文件的一行大于1024字节时,stream不再good,导致循环退出,后面的行再也不会读到了!
正确的应该这样,以避免有行长度的限制:

string line;

while(getline(stream,line))
{
//some process about line

STL库居然有两个getline,一个是fstream的成员函数,另一个是全局函数(没有行长度限制),岂不气刹人也么哥!


c++中成员函数的指针:
class Math
{

public
:
double
mul(int a, int b)
{

return
a/(double)b;
}
};


int
main(void)
{

typedef
double(Math::*MFPointer)(int,int);
MFPointer mp=&Math::mul;

Math math;
(
math.*mp)(3,277);
}

这段代码是没什么问题的,即使在 gcc-2.95.4上都能编译。
但是,如果想把成员变量指针放入STL的容器(比如vector)里,gcc-2.95.4就编不过去了,说是STL里面拿address的时候晕倒,没办法拿。想用void*糊弄一下编译器,它还不干,不准把MFPointer转为void*再塞进去。
真是有够老土的。