我使用BOOST_FOREACH通过这样的C ++字符串中的字符进行迭代:
void foobar(const string& str)
{
BOOST_FOREACH(const char ch, str)
{
// Do something with ch
}
return;
}
这段代码工作正常以下编译模式:
- 多线程(释放)(/ MT)
- 多线程调试(/ MTD)
- 多线程的DLL(释放)(/ MD)
它会导致只有在这种模式下运行时错误(例外):
- 多线程调试DLL(释放)(/ MDD)
有没有编译错误或警告与上面的代码片段,导致我相信BOOST_FOREACH知道它在这里处理的容器。 此外,更改const char ch
来const char& ch
在行为没有变化。
为什么这个代码导致此不良运行时行为?
为什么只有在调试DLL模式?
是C ++字符串这种用法BOOST_FOREACH错了吗?
如果是,什么是它的最好的解决方法?
(请注意,我用Visual Studio 2008的工作和Boost 1.39)。