Spécification de type implicite et explicite
Glissez pour afficher le menu
Spécification implicite du type
Dans la plupart des cas, le compilateur C++ peut déterminer automatiquement le type du template à partir des arguments passés à la fonction. Si les types des paramètres fournissent toutes les informations nécessaires, il n'est pas nécessaire de spécifier explicitement le type.
main.cpp
12345678910111213#include <iostream> template<typename T> void PrintValue(T value) { std::cout << value << std::endl; } // The compiler assigns the type for `T` // Based on the type of the passed argument `value` int main() { PrintValue(42); // `T` is deduced as `int` PrintValue(3.14); // `T` is deduced as `double` PrintValue("Hello"); // `T` is deduced as `const char*` }
Le compilateur détermine automatiquement le type du paramètre de template T en fonction des arguments de la fonction. Cela rend les appels de fonction plus concis et plus lisibles. Pour cette raison, il se peut que vous ayez déjà utilisé des templates sans vous en rendre compte.
main.cpp
header.h
123456789101112#include <iostream> int main() { int a = 300; int b = 200; // `std::swap` is actually a template and you can prove it // Try to specify `int` type explicitly `std::swap<int>` std::swap(a, b); std::cout << a << " " << b << std::endl; }
Spécification explicite du type
Avec tout cela, une question se pose : si la déduction de type est implicite, pourquoi spécifier explicitement le type ? En effet, il existe des situations où la déduction automatique du type ne fonctionne pas ou n'est pas suffisante, ce qui vous oblige à indiquer explicitement le type du template. Voici quelques exemples.
ambiguous.cpp
forcing_type.cpp
no_parameters.cpp
12345678910#include <iostream> template<typename T> T GetDefaultValueSum(T a, T b) { return a + b; } int main() { // If `float` won't be specified, this code would generate an error std::cout << GetDefaultValueSum<float>(2, 2.5) << std::endl; }
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion