std::vector<char> p = {"abc", "def"};
"abc"
et "def"
ne sont pas char
, pourquoi le compilateur ne me donne-t-il pas une erreur à propos de cette incompatibilité de type?
Vous n'appelez pas le constructeur de vector
qui prend un initializer_list<char>
. Ce constructeur n'est pas viable car, comme vous l'avez dit, vous ne passez pas une liste de char
s.
Mais vector
a aussi un constructeur qui amène les itérateurs à une gamme d'éléments.
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
Malheureusement, ce constructeur correspond car les deux arguments seront chacun implicitement convertis en char const *
. Mais votre code a un comportement indéfini car les itérateurs de début et de fin transmis au constructeur ne sont pas une plage valide.