これはBoostの専門家向けです。プログラマーは、彼の古いC/C++スタイルのループをすべてリーンで平均的な外観のBOOST_FOREACH
に置き換える前に気をつけなければならない問題や細部はありますか?C++ Boost:BOOST_FOREACHを使用している問題はありますか?
(。この質問は、部分的にhereから派生し)
これはBoostの専門家向けです。プログラマーは、彼の古いC/C++スタイルのループをすべてリーンで平均的な外観のBOOST_FOREACH
に置き換える前に気をつけなければならない問題や細部はありますか?C++ Boost:BOOST_FOREACHを使用している問題はありますか?
(。この質問は、部分的にhereから派生し)
(foreach.hpp中)BOOST_FOREACHマクロのソースを見てください - それは私が呼んで「リーンと平均」
:-)どうなるかではありませんのためのバグページは、あなたが型名でカンマを使用することはできません
BOOST_FOREACH(pair<int,int> A, mapB){}
クロスプラットフォーム製品を開発しているだけの場合にはPortabilityセクション動作しません。
その他の不利な点についてはBOOST_FOREACH() documentationにお問い合わせください。
私はBOOST_FOREACH((ペア
私は突然厳しい私はそれがマクロだったまで、私はそれを理解しようと半日過ごした、動作しません。マクロはテンプレートを理解しておらず、コンマは置き換えるためのもう一つの引数だと思っています –
'auto'はあなたの友人です! 'BOOST_FOREACH(auto a、mapB){...}' – Gabriel
マクロ、私はマクロが好きではなく、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を使用しないための一つの追加の理由です。
これは私がBOOST_FOREACHを使い始めた理由です。構文は類似しているので、C++ 0x構文が利用可能になると、簡単な正規表現の検索と置換操作でコードを更新できます。 – Ferruccio
私は懐疑的です、非常に懐疑的です。 tr1はまだどこでも入手できず、それはずっと前です。 C++が膨らんで死ぬことがなければ、この速度で2020年までにC++ 09を完全に使用できるようになります。 –
はい、いくつかの人々はこの時間にSTLを使用しない/ 2020に新しいC++ 0x機能を使用しません。しかし、事実は次のように言います:VCとGCCコンパイラはすでにいくつかのC++ 0x機能をサポートしています。 – bayda
私はと手作業でコード化されたループをプロファイルしました。 BOOST_FOREACH
は、サイズ100,000のベクトルの要素をインクリメントする単純なループでは約30%遅くなりました。 小さなループをコーディングしていると、速くなることはありません。あなたのループが大きな処理をしたら、Amdahlの法則が始まり、BOOST_FOREACH
による損失はごくわずかです。
ポイント1はBOOST_FOREACHの問題ですか?私がBOOST_FOREACHを理解したので、各パラメータを一度だけ評価しました。いいえ? "それは一度だけその引数を評価し、厄介な驚きはありません" - doc – Catskul