Dzisiaj natknąłem się these standard declarations z std::vector
konstruktorów:Konstruktorzy: różnica między zalegających i przekazując parametr
// until C++14
explicit vector(const Allocator& alloc = Allocator());
// since C++14
vector() : vector(Allocator()) {}
explicit vector(const Allocator& alloc);
Ta zmiana może być postrzegane w większości standardowych pojemnikach. Nieco inny exemple jest std::set
:
// until C++14
explicit set(const Compare& comp = Compare(),
const Allocator& alloc = Allocator());
// since C++14
set() : set(Compare()) {}
explicit set(const Compare& comp,
const Allocator& alloc = Allocator());
Jaka jest różnica między tymi dwoma wzorami i jakie są ich zalety (dis)?
Czy są one ściśle równoważne - czy kompilator generuje coś podobnego do drugiego z pierwszego?
Mówisz pojemniki "STL". Masz na myśli sygnaturę tych standardowych funkcji członka kontenera bibliotecznego, zgodnie z mandatem samego standardu lub kodu konkretnej implementacji? –
@LightnessRacesinOrbit Mam na myśli pierwsze: zakładam, że podpisy tych funkcji są standardowe (en.cppreference.com mówi, że jest zmiana pochodząca ze standardu - "od C++ 14"). – Nelfeal
@LightnessRacesinOrbit Nie bardzo rozumiem, co edytować; czy "STL" jest złe? Dla mnie jest to część standardowej biblioteki, która używa szablonów (stąd standardowa biblioteka "szablonów"). A może to coś innego? – Nelfeal