Tengo una gran duda, la verdad me confunde un poco el hecho de que se pueda inicializar una variable de 3 formas:
Código
int x = 3; int y {4}; int z(5);
Las 3 son válidas, bueno, así como se ve, no está complejo realmente, el problema es cuando usas elementos como un contenedor.. ya que los contenedores aceptan una lista de argumentos encerradas en llave, sin embargo esto me confunde un poco, porque no se cuando está inicializando o cuando está pasando por argumento a un constructor.. o cuando está usando un constructor de conversión.. etc..
Ejemplo:
Código
vector<string> vs { "Hola", " Que tal"}; //No hay problema.. vector<string> vs2 { 5, 1 }; //Houston istream_iterator<string> is; istream_iterator<string> is2; vector<string> vs3{is, is2}; //No hay problema.. por que?
Sospecho que en vs3 no estoy inicializando … pensé que las llaves eran para eso... que esta pasando en esta línea?..
Saludos y gracias.
--------------------------------
Edito:
Estuve viendo los constructores que tiene std::vector y encontre uno que acepta un iterator de inicio y otro de fin... entonces eso es lo que debe estar aceptando, es decir, vs3 no esta inicializando, solo le estoy pasando los iteradores que están conectados al flujo de entrada ifstream.... En el fondo lo que me habia confundido es el uso de las llaves, tenia entendido que las llaves servian para inicializar en los contenedores, pero ya vi que hace lo mismo que los parentesis, a menos que este poblando al contenedor, ahi seria una inicialización...
Saludos.