为什么BOOST#u FOREACH有时不能与C++;串? 我使用BooStIOrFACH迭代C++字符串的字符: void foobar(const string& str) { BOOST_FOREACH(const char ch, str) { // Do something with ch } return; }
这段代码适用于以下编译模式:为什么BOOST#u FOREACH有时不能与C++;串? 我使用BooStIOrFACH迭代C++字符串的字符: void foobar(const string& str) { BOOST_FOREACH(const char ch, str) { // Do something with ch } return; },c++,visual-studio,string,boost,C++,Visual Studio,String,Boost,这段代码适用于以下编译模式: 多线程(释放)(/MT) 多线程调试(/MTd) 多线程DLL(发布版)(/MD) 仅在此模式下会导致运行时错误(异常): 多线程调试DLL(发布版)(/MDd) 上面的代码片段没有编译错误或警告,这让我相信BOOST_FOREACH知道它在这里处理的容器。此外,将const char ch更改为const char&ch不会改变行为 为什么这段代码会导致这种不良的运行时行为 为什么只在调试DLL模式下 这是C++字符串上的BooStY-FrUEACH使用错
- 多线程(释放)(/MT)
- 多线程调试(/MTd)
- 多线程DLL(发布版)(/MD)
- 多线程调试DLL(发布版)(/MDd)
const char ch
更改为const char&ch
不会改变行为
为什么这段代码会导致这种不良的运行时行为
为什么只在调试DLL模式下
这是C++字符串上的BooStY-FrUEACH使用错误吗?< /P> 如果是,最好的解决方法是什么
(注意我正在使用VisualStudio 2008和Boost 1.39)。
< P> C++字符串上的BooStY-FuleAccess的用法是绝对正确的(参见)。 看来问题出在
// Do something with ch
您应该向我们提供有关代码的更多信息,因为:
- 您的问题与使用的VC++运行时有关
- 正如Dmitry明确回答的那样,您的问题很可能是由循环体引起的
- 问题发生在调试时而不是发布时,可能是因为调试检查发现了错误、内存损坏等等
- 只有在切换运行时(使用STL代码)时才会发生这种情况,这可能是因为您混合了来自不同模块的代码,每个模块使用不同的运行时编译
- 字符串对象是否来自另一个模块(另一个DLL、另一个库、另一个EXE),可能是用另一个运行时编译的
- 如果您手工编写代码(使用一个简单的旧“for”),它是否有效
- 确切的错误消息是什么