Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Spécification de type implicite et explicite | Utilisation des templates
Templates C++

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

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

main.cpp

header.h

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

ambiguous.cpp

forcing_type.cpp

forcing_type.cpp

no_parameters.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; }
question mark

Quelle est l'option incorrecte pour remplacer l'espace réservé ___ dans le code suivant ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 2

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 2. Chapitre 2
some-alt