BOOST_FOREACH
und c ++ 11 range based loop? BOOST_FOREACH
anstelle von range based loop verwenden möchte oder umgekehrt? Nachdem ich einen kleinen Test mit std::vector
mit 1.000.000 int
Variablen durchgeführt hatte, fand ich heraus, dass BOOST_FOREACH
etwas langsamer ist als range based loop (benötigt etwa 1,25 mal länger als für eine entfernungsbasierte Schleife) / p>
Der Hauptunterschied ist, dass Range-for ein Sprachkonstrukt ist, während BOOST_FOREACH
ein Makro ist, das viel Magie unter der Haube macht, etwas zu tun, das wie dieses Sprachkonstrukt aussieht. Es versucht genau dasselbe mit den Einschränkungen von Pre-C ++ 11 zu tun. Das Ziel von BOOST_FOREACH
ist range-for.
Es gibt genau eine Situation, in der ich sogar daran denke, BOOST_FOREACH
anstelle von range-for zu verwenden und es über einen Tupelcontainer zu durchlaufen, in dem das Tupel abgewickelt werden soll:
im Vergleich zu:
%Vor% Ich mag es, dass Sie tie
direkt in den Loop-Header setzen können, obwohl das letztlich so ein kleiner Vorteil ist, dass es sich kaum lohnt, dies als Entscheidung zu betrachten. Verwenden Sie Bereich für. Immer.
C ++ 17 wird strukturierte Bindungen vorstellen, die sogar diesen kleinen syntaktischen Vorteil beseitigen:
%Vor% An diesem Punkt gibt es keinen Grund mehr, BOOST_FOREACH
zu verwenden.