代码之家  ›  专栏  ›  技术社区  ›  Ashwin Nanjappa

为什么BooStueFoeCurk有时不使用C++字符串?

  •  2
  • Ashwin Nanjappa  · 技术社区  · 15 年前

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

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

    • 多线程(释放)(/MT)
    • 多线程DLL(发行版)(/MD)

    仅在此模式下会导致运行时错误(异常):

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

    上面的代码片段没有编译错误或警告,这使我相信BOOST\u FOREACH知道它在这里处理的容器。还有,改变 const char ch const char& ch 行为没有改变。

    为什么这段代码会导致这种不好的运行时行为?

    在C++字符串上使用BooStY-FooLACK是错误的吗?

    (请注意,我使用的是Visual Studio 2008和Boost 1.39。)

    2 回复  |  直到 15 年前
        1
  •  6
  •   Dmitriy    15 年前

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

      
    // Do something with ch
    
        2
  •  2
  •   paercebal    15 年前

    您应该向我们提供有关您的代码的更多信息,因为:

    • 正如dmitry清楚地回答的那样,您的问题很可能是由循环体引起的

    不管怎样,根据你给我们的信息,我可以推测如下:

    • 事实上,只有在切换运行时(使用STL代码)时才会发生这种情况,因为您可能混合了来自不同模块的代码,每个模块都是用不同的运行时编译的

    如果您需要更多信息,您需要向我们提供以下信息:

    • 如果您手工编写代码(使用一个普通的旧“for”),它能工作吗?
    • 确切的错误信息是什么?