我使用BOOST_FOREACH通過C++串這樣的字符進行迭代:爲什麼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
的行爲沒有變化。
爲什麼此代碼導致這種不良運行時行爲?
爲什麼只在Debug DLL模式下?
BOOST_FOREACH在C++字符串上的這種用法是錯誤的嗎?
如果是,那麼最好的解決方法是什麼?
(請注意,我用Visual Studio 2008的工作和Boost 1.39)。BOOST_FOREACH對C++字符串
請給什麼樣的異常/錯誤,你得到的,並且在這一點更詳細的信息。 – 2009-08-14 03:06:33
還有預處理器輸出。 – stepancheg 2009-08-14 03:07:42
和一個完整的最小化測試用例,可以重現問題。 – stepancheg 2009-08-14 03:08:12