Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Implicit och Explicit Typspecificering | Användning av Mallar
C++-Mallar

Implicit och Explicit Typspecificering

Svep för att visa menyn

Implicit typangivelse

I de flesta fall kan C++-kompilatorn automatiskt avgöra malltypen utifrån argumenten som skickas till funktionen. Om parametertyperna ger all nödvändig information finns det inget behov av att ange typen explicit.

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

Kompilatorn avgör automatiskt typen för mallparametern T baserat på funktionsargumenten. Detta gör funktionsanropen mer kortfattade och lättare att läsa. Av denna anledning kan du faktiskt redan ha använt mallar utan att inse 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; }

Explicit typangivelse

Med allt detta uppstår en fråga: Om typdeduktion sker implicit, varför ange typen explicit? Detta beror på att det finns situationer där automatisk typdeduktion inte fungerar eller inte är tillräcklig, vilket kräver att du anger malltypen explicit. Titta på några exempel.

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

Vilket är det felaktiga alternativet för att ersätta platshållaren ___ i följande kod?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 2. Kapitel 2
some-alt