gpt4 book ai didi

c++ - size_t 数据类型可以安全地用于 str.find() 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:01 25 4
gpt4 key购买 nike

我一直在查看字符串的 find() 函数的代码,它们将结果存储在数据类型为 size_t 的变量中。然而,据我所知,size_t 是一个无符号整数,如果 find() 没有找到预期的字符串,它会返回 -1。例如,如果我有

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

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

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

无论 i 是 size_t 还是 int 都有效。那我用哪个? int 还是 size_t?

最佳答案

都没有。

std::string::find documentation下,它建议您使用string::size_typestring::npos 来检测not found in find:

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

Live example.

intsize_t 可以与 -1 进行比较并且有效,这不足为奇,它们将具有这些位,因此当转换为进行比较时,它们将平等比较,但是您应该收到警告,例如:

warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

关于c++ - size_t 数据类型可以安全地用于 str.find() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37797220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com