首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

string find方法的一个诡异有关问题

2012-05-28 
string find方法的一个诡异问题C/C++ codeint nstr.find(domain)bool bdomain(str.find(domain))0boo

string find方法的一个诡异问题

C/C++ code
int n=str.find(domain);bool bdomain=(str.find(domain))<0;

bool bdomain=(str.find(domain))<0;会永远返回false,即使str.find(domain)的执行结果小于0


[解决办法]
你怎么知道结果小于0?根本不会小于0
[解决办法]
string::find()的返回值是size_t类型的,因此它永远大于0。
虽然当string::find()没有找到目标的时候,会返回npos,且npos的定义如下:
static const size_t npos = -1;
但由于它的类型是size_t,因此编译器会做出转换,因此npos的值为0xFFFFFFFF,仍然大于0。
[解决办法]
你最好不要用<0来比较,用!=string::npos比较,因为find返回的永远都是一个unsigned
[解决办法]
用-1也比较也行
[解决办法]
探讨
string::find()的返回值是size_t类型的,因此它永远大于0。
虽然当string::find()没有找到目标的时候,会返回npos,且npos的定义如下:
static const size_t npos = -1;
但由于它的类型是size_t,因此编译器会做出转换,因此npos的值为0xFFFFFFFF,仍然大于0。

热点排行