Maison >développement back-end >C++ >Pourquoi `printme({\'a\', \'b\', \'c\'});` est-il illégal dans la déduction de type de modèle C ?
Considérez le modèle de fonction :
template<typename T> void printme(T&& t) { for (auto i : t) std::cout << i; }
Cette fonction attend un paramètre d'un type avec un début () et fin() fonction.
Question :
Pourquoi l'appel suivant est-il illégal ?
printme({'a', 'b', 'c'});
Réponse :
L'appel printme({'a', 'b', 'c'}) est illégal car l'argument du modèle T ne peut pas être déduit. Sans spécifier explicitement l'argument du modèle, le compilateur ne peut pas déterminer le type du paramètre, car il peut s'agir de n'importe quel type avec une fonction start() et end(). Ce problème ne se pose pas dans les cas suivants :
L'exception à ceci est la déduction de auto comme std::initializer_list
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!