45 votes

Pourquoi ce code est-il compilé (C ++ 11) sans erreur d'incompatibilité de type?

 std::vector<char> p = {"abc", "def"};
 

"abc" et "def" ne sont pas char , pourquoi le compilateur ne me donne-t-il pas une erreur concernant cette incompatibilité de type?

57voto

Praetorian Points 47122

Vous n'êtes pas à l'appelant vectors'constructeur qui prend un initializer_list<char>. Que le constructeur n'est pas viable parce que, comme vous l'avez dit, vous n'êtes pas en passant une liste d' chars.

Mais vector a aussi un constructeur qui prend des itérateurs à une série d'éléments.

template< class InputIt >
vector( InputIt first, InputIt last,
        const Allocator& alloc = Allocator() );

Malheureusement, ce constructeur matchs, car les deux arguments de chaque implicitement convertir char const *. Mais votre code a un comportement indéfini, parce que le début et la fin des itérateurs d'être passé au constructeur ne sont pas une plage valide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X