1

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

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

mData 在类中声明为 private 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(在有符号的 32 位 int 中为 -1 并匹配 std::string::npos)。有人可以证明这种行为是正当的吗?或者告诉我如何解决这个问题?

4

1 回答 1

0

所以 mData 被声明为引用?如果是这样,它并不真正包含内容,它包含对内容的引用。在您调用 find_first_of 时,mData 所指的对象是否仍然存在?

于 2011-10-09T21:10:30.997 回答