![]() |
Home | Libraries | People | FAQ | More |
BOOST_FOREACH 使用了一些相當複雜的技巧,不是所有編譯器都可以支持。取決於你的編譯器對標準的兼容度,你有可能在某些情形下不能使用 BOOST_FOREACH. 由於 BOOST_FOREACH 使用了 Boost.Range,
所以它繼承了 Boost.Range
的可移植性問題。你可以在 Boost.Range 可移植性 一節中看到這些問題。
除了 Boost.Range 對編譯器的要求以外,BOOST_FOREACH 還有其它的要求以正確處理右值序列(右值是一個匿名對象,右值序列的一個例子就是以值方式返回一個 std::vector<> 的函數)。編譯器在處理右值和左值時是有所不同的。為了應付這種情況,BOOST_FOREACH 定義了三個兼容度級別,描述如下:
| 級別 | 意義 |
|---|---|
| Level 0 |
最高兼容度級別BOOST_FOREACH 可用於左值、右值和 const-限定的右值。 |
| Level 1 |
中等兼容度級別BOOST_FOREACH 可用於左值和簡單右值,但不可用於 const-限定的右值。這種情況下定義了 BOOST_FOREACH_NO_CONST_RVALUE_DETECTION . |
| Level 2 |
最低兼容度級別BOOST_FOREACH 只可用於左值,不可用於右值。這種情況下定義了 BOOST_FOREACH_NO_RVALUE_DETECTION. |
以下是 BOOST_FOREACH 已經測試過的編譯器,以及它們對於 BOOST_FOREACH 的兼容度級別。
| 編譯器 | 兼容度級別 |
|---|---|
| Visual C++ 8.0 | Level 0 |
| Visual C++ 7.1 | Level 0 |
| Visual C++ 7.0 | Level 2 |
| Visual C++ 6.0 | Level 2 |
| gcc 4.0 | Level 0 |
| gcc 3.4 | Level 0 |
| gcc 3.3 | Level 0 |
| mingw 3.4 | Level 0 |
| Intel for Linux 9.0 | Level 0 |
| Intel for Windows 9.0 | Level 0 |
| Intel for Windows 8.0 | Level 1 |
| Intel for Windows 7.0 | Level 2 |
| Comeau 4.3.3 | Level 0 |
| Borland 5.6.4 | Level 2 |
| Metrowerks 9.5 | Level 1 |
| Metrowerks 9.4 | Level 1 |
| SunPro 5.8 | Level 2 |
| qcc 3.3 | Level 0 |
| tru64cxx 65 | Level 2 |
| tru64cxx 71 | Level 2 |
| Copyright © 2004 Eric Niebler |