Unterschied zwischen BOOST_FOREACH und c ++ 11 für bereichsbasierte Schleife?

8
  1. Was sind die Hauptunterschiede zwischen BOOST_FOREACH und c ++ 11 range based loop?
  2. Gibt es eine bestimmte Situation, in der ich 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>     

Laurynas Lazauskas 19.11.2014, 21:47
quelle

1 Antwort

16

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:

%Vor%

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.

    
Barry 19.11.2014, 21:58
quelle

Tags und Links