tutorial - ¿Por qué este código se compila(C++ 11) sin un error de falta de coincidencia de tipo?
visual studio installer (1)
No estás llamando al constructor de vector
que toma una lista de initializer_list<char>
. Ese constructor no es viable porque, como dijiste, no estás pasando una lista de caracteres.
Pero vector
también tiene un constructor que lleva a los iteradores a una serie de elementos.
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
Desafortunadamente, este constructor coincide porque cada uno de los dos argumentos se convertirá implícitamente en char const *
. Pero su código tiene un comportamiento indefinido porque los iteradores de inicio y fin que se pasan al constructor no son un rango válido.
std::vector<char> p = {"abc", "def"};
"abc"
y "def"
no son char
, ¿por qué el compilador no me da un error sobre este tipo de discrepancia?