Std::string::find_first_of没有返回期望的值

std::string::find_first_of does not return the expected value

本文关键字:期望 返回 of string find first Std      更新时间:2023-10-16

我试图在c++中创建一个XML解析器。我目前使用cygwin和gcc来编译和gdb来调试。我有这段代码:

const size_t mDataSize = mData.size();  
...  
size_t ltPos = mData.find_first_of('<', pos);  
if (ltPos==mData.npos) {  
...  

mData声明为私有const std::string &并保存XML文件内容。在使用gdb调试之后,我发现了以下内容:

(gdb) print pos  
$12 = 636  
(gdb) print mDataSize  
$13 = 2692  
(gdb) n  
141             size_t ltPos = mData.find_first_of('<', pos);  
(gdb) print ltPos  
$14 = 114  
(gdb) print pos  
$15 = 636  
(gdb) n  
143             if (ltPos==mData.npos)  
(gdb) print ltPos  
$16 = 4294967295  
(gdb) print mData[636]  
$17 = (const char &) @0xb2b2a8: 10 'n'  
(gdb) print mData[637]  
$18 = (const char &) @0xb2b2a9: 32 ' '  
(gdb) print mData[638]  
$19 = (const char &) @0xb2b2aa: 32 ' '  
(gdb) print mData[639]  
$20 = (const char &) @0xb2b2ab: 60 '<'  

我期待639作为调用find_first_of的结果,但我得到4294967295(这是-1在一个带符号的32位int和匹配std::string::npos)。有人能为这种行为辩护吗?或者告诉我如何解决这个问题?

所以mData被声明为引用?如果是这样,它并不真正保存内容,而是保存对内容的引用。调用find_first_of时mData所指的东西是否还存在?