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

Kursinhalt

C++-Vorlagen

C++-Vorlagen

1. Erstellen der Ersten Vorlage
2. Verwendung von Templates
3. Klassenvorlagen
4. Templatespezialisierung

book
Implizite und Explizite Typspezifikation

Implizite Typspezifikation

In den meisten Fällen kann der C++-Compiler den Vorlagentyp automatisch aus den an die Funktion übergebenen Argumenten bestimmen. Wenn die Parametertypen alle benötigten Informationen liefern, ist es nicht notwendig, den Typ explizit anzugeben.

cpp

main

copy
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 Vorlagenparameters T automatisch basierend auf den Funktionsargumenten. Dies macht die Funktionsaufrufe prägnanter und leichter lesbar. Aus diesem Grund haben Sie möglicherweise bereits Vorlagen verwendet, ohne es zu merken.

cpp

main

h

header

copy
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

Bei all dem stellt sich die Frage: Wenn die Typableitung implizit ist, warum sollte man den Typ explizit angeben? Dies liegt daran, dass es Szenarien gibt, in denen die automatische Typableitung nicht funktioniert oder nicht ausreicht, sodass Sie den Vorlagentyp explizit angeben müssen. Schauen Sie sich einige Beispiele an.

cpp

ambiguous

cpp

forcing_type

cpp

no_parameters

copy
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; }
Was ist die **falsche** Option, um den Platzhalter `___` im folgenden Code zu ersetzen?

Was ist die falsche Option, 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
We're sorry to hear that something went wrong. What happened?
some-alt