Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Implicit and Explicit Type Specification | Utilizzo Dei Template
Template C++

Implicit and Explicit Type Specification

Scorri per mostrare il menu

Specifica implicita del tipo

Nella maggior parte dei casi, il compilatore C++ può determinare automaticamente il tipo del template dagli argomenti passati alla funzione. Se i tipi dei parametri forniscono tutte le informazioni necessarie, non è necessario specificare esplicitamente il tipo.

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

Il compilatore determina automaticamente il tipo del parametro template T in base agli argomenti della funzione. Questo rende le chiamate di funzione più concise e facili da leggere. Per questo motivo potresti aver già utilizzato i template senza rendertene conto.

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

Specifica esplicita del tipo

Con tutto ciò, sorge una domanda: se la deduzione del tipo è implicita, perché preoccuparsi di specificare esplicitamente il tipo? Questo perché esistono scenari in cui la deduzione automatica del tipo non funziona o non è sufficiente, richiedendo di specificare esplicitamente il tipo del template. Osserva alcuni esempi.

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

Qual è l'opzione sbagliata per sostituire il segnaposto ___ nel seguente codice?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 2. Capitolo 2
some-alt