¿Por qué se especifican estos encabezados de C++ para incluir<initializer_list>?
initializer-list (1)
Parece que no hay una justificación explícita, solo que se hicieron algunas propuestas de adiciones a la norma y se aceptaron esas propuestas.
Al final del documento N2672 Initializer List, la redacción propuesta simplemente dice:
En 20.2 componentes de utilidad [utilidad] párrafo 1:
Esta subcláusula contiene algunas funciones básicas y plantillas de clase que se utilizan en el resto de la biblioteca.
Encabezado
<utility>
sinopsis
#include<initializer_list> namespace std {
Por lo tanto, los autores del artículo vieron initializer_list
como una utilidad, por lo que debería incluirse con el encabezado <utility>
. Y por lo tanto es.
El documento no propuso ningún cambio en el encabezado <iterator>
, por lo que no se realizó ninguno.
Como se puede ver en https://stackoverflow.com/a/26614984/481267 los siguientes encabezados están garantizados por el estándar para #include <initializer_list>
:
- Todo en [contenedores]
-
<utility>
-
<string>
-
<algorithm>
-
<random>
-
<valarray>
-
<regex>
La mayoría de estos encabezados declaran al menos una función que toma un argumento std::initializer_list<E>
, por lo que tiene sentido. Sin embargo,
-
<array>
,<stack>
y<queue>
no tienen tales funciones, aunque quizás tenga sentido tratar todos los contenedores de manera uniforme aquí. -
<utility>
no tiene tales funciones. -
<iterator>
tiene funciones con un argumentoinitializer_list
(rbegin
,rend
) pero no está especificado para incluir<initializer_list>
.
¿Cuál es la razón detrás de estas excepciones?