我目前正在将我的代码转换为C++ 11,并遇到以下基于范围的for循环问题(FWIW,同一代码在使用BOOST for_each之前运行得很好)。mLibraryFiles
成员(STL vector )是单例实例的一部分,并且保证在方法返回之后存在,但是,当调用方检查返回的对象时,它仅包含垃圾。
从该方法返回后,通过它进行调试似乎会将预期的内容转换为垃圾内容,因此我想我对于基于C++ 11范围的循环的实际工作方式一定有问题:
Entry* FindEntry(string inName)
{ Entry *rs = NULL;
for (auto libraryEntry : mLibraryFiles)
{
if (libraryEntry.filename.compare(inName) == 0)
{
rs = &libraryEntry;
break;
}
}
return rs;
}
我本来希望
libraryEntry
变量表示mLibraryFiles
vector 中的实际对象?任何见解非常感谢!
(尽管我怀疑这很重要,但编译器是LLVM 5.0。)
最佳答案
vector 中的值将在循环中复制到libraryEntry,因此您拥有一个指向复制值的指针,该指针在循环后不再存在。使用auto& libraryEntry
。