Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Implizite und Explizite Typspezifikation | Templates Usage
C++-Templates

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

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

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; }

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

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

Welche Option ist falsch, um den Platzhalter ___ im folgenden Code zu ersetzen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 2. Kapitel 2
some-alt