Oggi, sono incappato in these standard declarations di std::vector
costruttori:Costruttori: differenza tra inadempiente e delegando un parametro
// until C++14
explicit vector(const Allocator& alloc = Allocator());
// since C++14
vector() : vector(Allocator()) {}
explicit vector(const Allocator& alloc);
Questo cambiamento può essere visto nella maggior parte dei contenitori standard. Un exemple leggermente diverso è 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());
Qual è la differenza tra i due modelli e quali sono i loro vantaggi (dis)?
Sono strettamente equivalenti - il compilatore genera qualcosa di simile al secondo dal primo?
Si dice contenitori "STL". Intendi la firma di queste funzioni standard dei membri del contenitore di librerie come richiesto dallo standard stesso o dal codice di alcune specifiche implementazioni? –
@LightnessRacesinOrbit intendo il primo: presumo che le firme di queste funzioni siano standard (en.cppreference.com dice che c'è un cambiamento proveniente dallo standard - "dal C++ 14"). – Nelfeal
@LightnessRacesinOrbit Non capisco davvero cosa modificare; "STL" è sbagliato? Per me, è la parte della libreria standard che utilizza i modelli (quindi la libreria standard "modello"). O è qualcos'altro? – Nelfeal