Implizite und Explizite Typspezifikation
Swipe um das Menü anzuzeigen
Implizite Typspezifikation
In den meisten Fällen kann der C++-Compiler den Template-Typ automatisch aus den an die Funktion übergebenen Argumenten bestimmen. Wenn die Parametertypen alle benötigten Informationen liefern, ist es nicht erforderlich, den Typ explizit anzugeben.
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*` }
Der Compiler bestimmt den Typ des Template-Parameters T automatisch anhand der Funktionsargumente. Dadurch werden Funktionsaufrufe kürzer und übersichtlicher. Aus diesem Grund haben Sie möglicherweise bereits Templates verwendet, ohne es zu bemerken.
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; }
Explizite Typspezifikation
Dabei stellt sich die Frage: Wenn die Typableitung implizit erfolgt, warum sollte man den Typ explizit angeben? Es gibt Situationen, in denen die automatische Typableitung nicht funktioniert oder nicht ausreicht, sodass die explizite Angabe des Template-Typs erforderlich ist. Siehe dazu folgende Beispiele.
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; }
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen