Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Implicit og Eksplicit Typespecifikation | Anvendelse af Templates
C++ Templates

Implicit og Eksplicit Typespecifikation

Stryg for at vise menuen

Implicit typeangivelse

I de fleste tilfælde kan C++-kompilatoren automatisk bestemme skabelontypen ud fra de argumenter, der gives til funktionen. Hvis parametertyperne giver alle nødvendige oplysninger, er det ikke nødvendigt at angive typen eksplicit.

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*` }

Kompilatoren bestemmer automatisk typen af skabelonparameteren T baseret på funktionsargumenterne. Dette gør funktionskald mere kortfattede og lettere at læse. Af denne grund har du måske allerede brugt skabeloner uden at være klar over det.

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

Eksplicit typespecifikation

Med alt dette opstår spørgsmålet: Hvis typenedledning er implicit, hvorfor så overhovedet specificere typen eksplicit? Dette skyldes, at der findes scenarier, hvor automatisk typenedledning ikke fungerer eller ikke er tilstrækkelig, hvilket kræver, at du specificerer skabelontypen eksplicit. Se et eksempel her.

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

Hvilken mulighed er den forkerte at erstatte pladsholderen ___ med i følgende kode?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 2. Kapitel 2
some-alt