Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

可移植性

BOOST_FOREACH 使用了一些相當複雜的技巧,不是所有編譯器都可以支持。取決於你的編譯器對標準的兼容度,你有可能在某些情形下不能使用 BOOST_FOREACH. 由於 BOOST_FOREACH 使用了 Boost.Range, 所以它繼承了 Boost.Range 的可移植性問題。你可以在 Boost.Range 可移植性 一節中看到這些問題。

除了 Boost.Range 對編譯器的要求以外,BOOST_FOREACH 還有其它的要求以正確處理右值序列(右值是一個匿名對象,右值序列的一個例子就是以值方式返回一個 std::vector<> 的函數)。編譯器在處理右值和左值時是有所不同的。為了應付這種情況,BOOST_FOREACH 定義了三個兼容度級別,描述如下:

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

PrevUpHomeNext