我的代码中有这么简单的部分:
int pch = name.find("#");
if(pch == name.npos) continue;
当name.find
中找不到"#"
时,pch
等于-1。 name.npos
,如果我打印它,则为4294967295.为什么在这种情况下,当pch
为-1且name.npos
为4294967295
时,程序会输入{ {1}}条件?
答案 0 :(得分:6)
string::npos
表示找不到位置。它通常由-1
的常量值表示。此常量定义为值-1,由于size_t是无符号整数类型,因此它是此类型的最大可表示值。
find
不成功,则返回-1
。所以,两者都是平等的,在你的情况下,if
就满足了。
现在,回答
name.npos
如果我打印它,则为4294967295
因为string::npos
属于size_t
类型,通常为typedef
到unsigned
类型。用于初始化-1
类型的unsigned
将存储为the maximum possible unsigned value并打印。
答案 1 :(得分:3)
由于负数的内部表示。这称为two's complement。