我编写了一个程序,使用find_last_of
方法在字符串中查找字符。
// ...
unsigned found;
found = name.find_last_of(character);
if (found == std::string::npos) {
std::cout << "NOT FOUND" << std::endl;
}
// ...
我已经在两台机器上编译了代码,它只能在其中一台机器上运行(PC1)。我调试了它,发现,对于PC1和PC2,std :: string :: npos是不同的。
如果未找到任何字符,则find_last_of == 4294967295
为两台计算机返回的值。
PC1:
std::string::npos == 4294967295
PC2:
std::string::npos == 18446744073709551615
更多测试:
PC1:
sizeof(size_t) == 4
PC2:
sizeof(size_t) == 8
第一台机器使用32位操作系统,第二台机器使用64位操作系统。
我应该使用什么来比较find_last_of
方法返回的值,使其在两台机器上都能正常工作?
答案 0 :(得分:8)
我应该使用什么来比较find_last_of返回的值 使它适用于两台机器的方法?
std::string::npos
,位置类型(found
)应为size_t
。
常量的具体大小在不同的体系结构上可能有所不同,但这不是您的担忧。
npos是最大可能的静态成员常量值 size_t类型的元素的值。
答案 1 :(得分:4)
只需查看功能 - http://en.cppreference.com/w/cpp/string/basic_string/find_last_of:
size_type find_last_of(const basic_string&amp; str,size_type pos = 0)const; (1)
size_type find_last_of(const CharT * s,size_type pos,size_type count)const; (2)
size_type find_last_of(const CharT * s,size_type pos = 0)const; (3)
size_type find_last_of(CharT ch,size_type pos = 0)const; (4)
显然,std::string::size_type
是存储返回值的正确类型,之后与std::string::npos
的比较将起作用。