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

PCR*_*PCR 4 c++

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

string s = "asdf";
size_t i = s.find("g")
cout << i;
Run Code Online (Sandbox Code Playgroud)

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

string s = "asdf";
size_t i = s.find("g")
if (i == -1) { do_something; }
Run Code Online (Sandbox Code Playgroud)

无论我是size_t还是int,它都可以工作.那么我用哪个?int还是size_t?

Fan*_*Fox 6

都不是.

在std::string::find文档中,它建议您使用string::size_type和string::npos检测未在find:

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

实例.

这并不奇怪,int并且size_t可以与-1和工作进行比较,它们将具有位,因此当进行比较它们将进行比较时,您应该收到警告,例如:

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

  • @NathanOliver是的,对不起,我正准备解决这个问题,为了清楚地回答问题,我认为最好定义类型以便OP可以看到它. (2认同)
  • `std :: string :: size_type`是100%`std :: size_t`,保证. (2认同)