if (fp == 0)
{
return -1;
}
return (int)fp;
}
bool8 fsFileMgr::Open_normal(fsDevice device, const char * filename,
int32 openmode, fsHandle* file)
{
int32 filehandle = m_file_op->GetIt()->Open(device, filename,
openmode);
if (filehandle < 0)
{
file->m_last_error = m_file_op->GetIt()->GetLastError();
return false;
}
。。。。。。
}
前一个函数被后一个函数调用,返回值作了小于0的检查。
而这个该死的返回值是一个指针!!
------------------------------------------------------------------------------------------
指针作为整数来用不是不可以,但是要十分谨慎。
判断尽量用强条件(比如==)而不要用弱条件(< 0)
函数返回值意义要明确。
vc的stl实现中返回的删除后的下一个iterator,但它同时指出这不是遵从c++标准的。
c++标准是不返回值的。
如果要在循环遍历的时候删除某个iterator,可以把这个iterator的first记录下来,等循环遍历完成之后再以key的方式删除之。
例如:
std::list< int > list_Need_erase;
for( std::map<int,int>::iterator it = mapIntInt.begin(); it !=
mapIntInt.end(); it++ )
{
if( it->second == 100 )
list_Need_erase.push_back(it->first);
}
while( list_Need_erase.size() > 0 )
{
mapIntInt.erase( list_Need_erase.front() );
list_Need_erase.pop_front();
}
另外需要指出的一点是如果经常需要用到insert和erase,那么是否采用map作为数据结构就值得仔细考虑了。
因为map的优势在于查找和定位效率高,而缺点就是插入和删除效率低。
今天碰到如上的问题,经仔细查验发现原来是二维数组的初始值给的不对。如下:
CString arr[][2] =
{
"abcd", "efgh",
"eoa"
};
补齐即可。
CString arr[][2] =
{
"abcd", "efgh",
"eoa","eoa"
};