我正在使用BOOST_FOREACH迭代C ++字符串中的字符,如下所示:
void foobar(const string& str)
{
BOOST_FOREACH(const char ch, str)
{
// Do something with ch
}
return;
}
这段代码适用于以下编译模式:
仅在此模式下导致运行时错误(例外):
上面的代码片段没有编译错误或警告,让我相信BOOST_FOREACH知道它在这里处理的容器。此外,将const char ch
更改为const char& ch
的行为也没有变化。
为什么这段代码会导致这种错误的运行时行为?
为什么只在Debug DLL模式下?
对C ++字符串的BOOST_FOREACH的这种用法是错误的吗?
如果是,那么最好的解决方法是什么?
(请注意,我正在使用Visual Studio 2008和Boost 1.39。)
答案 0 :(得分:6)
在C ++字符串上使用BOOST_FOREACH绝对正确(参见http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html#foreach.introduction) 看起来像
中的问题
// Do something with ch
答案 1 :(得分:2)
您应该向我们提供有关您的代码的更多信息,因为:
无论如何,通过你给我们的小信息,我可以推测以下内容:
当然,你对const字符串的迭代意味着什么都不应该被修改,但由于我无法重现你的错误(双关语),很难提供明确的答案。
如果您想了解更多信息,请向我们提供以下信息: