为什么BOOST_FOREACH有时不能用C++字符串工作?

Ash*_*ppa 2 c++ string boost visual-studio

我正在使用BOOST_FOREACH迭代C++字符串的字符,如下所示:

void foobar(const string& str)
{
    BOOST_FOREACH(const char ch, str)
    {
        // Do something with ch
    }

    return;
}
Run Code Online (Sandbox Code Playgroud)

这段代码适用于以下编译模式:

  • 多线程(发布)(/ MT)
  • 多线程调试(/ MTd)
  • 多线程DLL(发布)(/ MD)

它仅在此模式下导致运行时错误(例外):

  • 多线程调试DLL(发布)(/ MDd)

上面的代码片段没有编译错误或警告,让我相信BOOST_FOREACH知道它在这里处理的容器.此外,更改const char chconst char& ch行为没有变化.

为什么这段代码会导致这种糟糕的运行时行为

为什么只能在Debug DLL模式下?

在C++字符串上使用BOOST_FOREACH是错误的吗?

如果是,那么最佳解决方法是什么?

(请注意,我正在使用Visual Studio 2008和Boost 1.39.)

Dmi*_*riy 6

在C++字符串上使用BOOST_FOREACH绝对正确(参见http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html#foreach.introduction).
看起来像是问题所在

  
// Do something with ch
Run Code Online (Sandbox Code Playgroud)