size_t数据类型是否可以安全地用于str.find()?

时间:2016-06-13 18:59:04

标签: c++

我一直在查看字符串find()函数的代码,并将结果存储在数据类型为size_t的变量中。但是我的理解是size_t是unsigned int,如果find()找不到想要的字符串,则返回-1。例如,如果我有

string s = "asdf";
size_t i = s.find("g")
cout << i;

它给了我4294967295.但是如果我用size数据类型替换size_t,它给我-1。奇怪的是当我进行比较时

string s = "asdf";
size_t i = s.find("g")
if (i == -1) { do_something; }

无论我是size_t还是int,它都有效。那么我用哪个? int或size_t?

1 个答案:

答案 0 :(得分:6)

都不是。

std::string::find documentation下,建议您使用string::size_typestring::npos来检测find中未找到的内容:

 std::string::size_type i = s.find("g");
 if (i == std::string::npos) std::cout << "Not Found\n";

Live example.

intsize_t与-1进行比较并且工作,它们将具有位,这应该不足为奇,因此当进行比较时,它们将进行相同的比较,你应该然而收到警告,如:

  

警告:有符号和无符号整数表达式之间的比较[-Wsign-compare]