Pourquoi n'est-ce pas std::initializer_list
d'un noyau de langue intégré?
Il me semble que c'est une caractéristique importante de C++11 et pourtant, il ne dispose pas de son propre mot clé réservé (ou quelque chose de semblable).
Au lieu de cela, initializer_list
c'est juste un modèle de classe à partir de la bibliothèque standard qui a une spéciale, l'implicite de la cartographie de la nouvelle - calé-init-liste {...}
de syntaxe qui sont gérées par le compilateur.
A première vue, cette solution est tout à fait hacky.
Est-ce la façon dont les nouveautés du langage C++ sera maintenant mis en œuvre: par rôles implicites de certaines classes de modèle et non par la base de la langue?
Veuillez tenir compte de ces exemples:
widget<int> w = {1,2,3}; //this is how we want to use a class
pourquoi une nouvelle classe choisie:
widget( std::initializer_list<T> init )
au lieu d'utiliser quelque chose de similaire à l'une de ces idées:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- un classique de tableau, vous pouvez probablement ajouter
const
ici et là - trois points existent déjà dans la langue (var-args, maintenant variadic templates), pourquoi ne pas ré-utiliser la syntaxe (et lui faire sentir intégré)
- juste un conteneur existant, pourrait ajouter
const
et&
Tous d'entre eux sont déjà une partie de la langue. J'ai seulement écrit mes 3 premières idées, je suis sûr qu'il ya beaucoup d'autres approches.