2009-04-04 14 views

答えて

10

を見てみましょう:根拠

  • の理解のために文書化
  • 0の Pitfallsセクションを

    +1

    ポイント1はBOOST_FOREACHの問題ですか?私がBOOST_FOREACHを理解したので、各パラメータを一度だけ評価しました。いいえ? "それは一度だけその引数を評価し、厄介な驚きはありません" - doc – Catskul

    4

    (foreach.hpp中)BOOST_FOREACHマクロのソースを見てください - それは私が呼んで「リーンと平均」

    :-)どうなるかではありません
    8

    のためのバグページは、あなたが型名でカンマを使用することはできません
    BOOST_FOREACH(pair<int,int> A, mapB){}
    クロスプラットフォーム製品を開発しているだけの場合にはPortabilityセクション動作しません。
    その他の不利な点についてはBOOST_FOREACH() documentationにお問い合わせください。

    +0

    私はBOOST_FOREACH((ペアA)、mapB)が動作するはずだと思います。チェックしなかった。 –

    +0

    私は突然厳しい私はそれがマクロだったまで、私はそれを理解しようと半日過ごした、動作しません。マクロはテンプレートを理解しておらず、コンマは置き換えるためのもう一つの引数だと思っています –

    +0

    'auto'はあなたの友人です! 'BOOST_FOREACH(auto a、mapB){...}' – Gabriel

    9

    マクロ、私はマクロが好きではなく、STLアルゴリズム+ラムダ+バインドを使用することを好みます。

    またC++0xはBOOST_FOREACHに似たfor-loopが含まれます:

    int my_array[5] = {1, 2, 3, 4, 5}; 
    for(int &x : my_array) 
    { 
        x *= 2; 
    } 
    

    それはpartialy死んBOOST_FOREACHを使用しないための一つの追加の理由です。

    +2

    これは私がBOOST_FOREACHを使い始めた理由です。構文は類似しているので、C++ 0x構文が利用可能になると、簡単な正規表現の検索と置換操作でコードを更新できます。 – Ferruccio

    +1

    私は懐疑的です、非常に懐疑的です。 tr1はまだどこでも入手できず、それはずっと前です。 C++が膨らんで死ぬことがなければ、この速度で2020年までにC++ 09を完全に使用できるようになります。 –

    +0

    はい、いくつかの人々はこの時間にSTLを使用しない/ 2020に新しいC++ 0x機能を使用しません。しかし、事実は次のように言います:VCとGCCコンパイラはすでにいくつかのC++ 0x機能をサポートしています。 – bayda

    7

    私はと手作業でコード化されたループをプロファイルしました。 BOOST_FOREACHは、サイズ100,000のベクトルの要素をインクリメントする単純なループでは約30%遅くなりました。 小さなループをコーディングしていると、速くなることはありません。あなたのループが大きな処理をしたら、Amdahlの法則が始まり、BOOST_FOREACHによる損失はごくわずかです。

    関連する問題