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
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
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
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; }
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår