Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Implisitt og Eksplisitt Typespesifikasjon | Bruk av maler
C++-Maler

Implisitt og Eksplisitt Typespesifikasjon

Sveip for å vise menyen

Implisitt typespesifikasjon

I de fleste tilfeller kan C++-kompilatoren automatisk bestemme maltypen ut fra argumentene som sendes til funksjonen. Hvis parametertypene gir all nødvendig informasjon, er det ikke nødvendig å spesifisere typen eksplisitt.

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 til malparameteren T basert på funksjonsargumentene. Dette gjør funksjonskallene mer konsise og lettere å lese. Av denne grunn har du kanskje allerede brukt maler uten å 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; }

Eksplisitt typespesifikasjon

Med alt dette oppstår et spørsmål: Hvis typededuksjon er implisitt, hvorfor spesifisere typen eksplisitt? Dette er fordi det finnes situasjoner der automatisk typededuksjon ikke fungerer eller ikke er tilstrekkelig, og du må spesifisere maltypen eksplisitt. Se på noen eksempler.

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

Hva er det feile alternativet for å erstatte plassholderen ___ i følgende kode?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 2. Kapittel 2
some-alt