En C++98 le prototype std::vector
s'remplir constructeur a une valeur par défaut pour l'initialiseur.
explicit vector (size_type n, const value_type& val = value_type(),
const allocator_type& alloc = allocator_type());
C++11 utilise deux prototypes.
explicit vector (size_type n);
vector (size_type n, const value_type& val,
const allocator_type& alloc = allocator_type());
(En C++14 le remplissage constructeur de nouveau changé, mais ce n'est pas le point de cette question.)
Un lien de référence est ici.
Pourquoi C++11 déprécier la valeur par défaut de l'initialiseur valeur value_type()
?
En passant, j'ai essayé de compiler le code suivant avec clang++ -std=c++11
et il a publié une erreur, ce qui signifie que le type de la valeur doit encore avoir un constructeur par défaut comme S() {}
, c'està-dire par défaut constructible.
#include <vector>
struct S {
int k;
S(int k) : k(k) {} // intentionally remove the synthesized default constructor
};
int main() {
std::vector<S> s(5); // error: no matching constructor
}