Ich habe meine C ++ - Kenntnisse vor einigen Jahren ins Regal gestellt und es scheint, dass sich die Landschaft geändert hat, wenn ich sie jetzt wieder brauche.
Wir haben jetzt C ++ 11 und ich verstehe, dass es viele Boost-Funktionen überlappt.
Gibt es eine Zusammenfassung, wo diese Überschneidungen liegen, welche Boost-Bibliotheken zu Legacy werden, welche C ++ 11-Funktionen anstelle von Boost-Funktionen verwendet werden sollen und welche besser nicht?
Antworten:
Ersetzbar durch C ++ 11-Sprachfunktionen oder -Bibliotheken
<cmath>
, siehe folgende Listelog1p
,expm1
cbrt
,hypot
acosh
,asinh
,atanh
TR1 (sie sind in der Dokumentation markiert, wenn es sich um TR1-Bibliotheken handelt)
Von C ++ 11 rückportierte Funktionen:
Ersetzbar durch C ++ 17-Sprachfunktionen:
<cmath>
( Sondermathematik IS ), siehe folgende ListeDas Standardteam arbeitet noch daran:
Ein großer Teil der MPL kann mithilfe verschiedener Vorlagen gekürzt oder entfernt werden. Einige häufige Anwendungsfälle von Lexical Cast können durch std :: to_string und std :: sto X ersetzt werden .
Einige Boost-Bibliotheken beziehen sich auf C ++ 11, haben aber auch einige weitere Erweiterungen, z. B. Boost.Functional / Hash enthält hash_combine und verwandte Funktionen, die in C ++ 11 nicht enthalten sind. Boost.Chrono verfügt über E / A und Rundungen und viele andere Uhren. usw. Vielleicht möchten Sie sich trotzdem die Boost-Modelle ansehen, bevor Sie sie wirklich entlassen.
quelle
std::unique_ptr
Teil von TR1 ist (da es Bewegungssemantik erfordert)Eigentlich glaube ich nicht, dass die Boost-Bibliotheken zum Vermächtnis werden.
Ja, sollten Sie in der Lage sein zu verwenden
std::type_traits
,regex
,shared_ptr
,unique_ptr
,tuple<>
,std::tie
,std::begin
statt Boost - Typetraits / Utility, Intelligenter Zeiger Boost Boost - Tuple, Boost - Bereich Bibliotheken, aber es in der Praxis keine wirkliche Notwendigkeit zu ‚Schaltern‘ sollen , wenn Sie mehr bewegen Ihr Code zu c ++ 11.std
Nach meiner Erfahrung sind die Versionen der meisten davon etwas weniger funktionsfähig. ZB AFAICT der Standard nicht nicht habenbool boost::basic_regex<>::empty()
) und andere SchnittstellenunterschiedeFaule, auf Ausdrucksvorlagen basierende Lambdas; Sie haben unvermeidliche Vorteile, da sie heute im Gegensatz zu C ++ 11 polymorph sein können . Daher können sie oft prägnanter sein:
Auf jeden Fall hat dies gegenüber C ++ 11-Lambdas (mit nachfolgenden Rückgabetypen, expliziter Erfassung und deklarierten Parametern) immer noch einen gewissen Reiz.
Außerdem hat Boost eine GROSSE Rolle, gerade bei der Erleichterung der pfadweisen Migration von C ++ 03 nach C ++ 11 und der Integration von C ++ 11- und C ++ 03-Codebasen. Ich denke besonders an
boost::result_of<>
und verwandte)Nur meine $ 0,02
quelle