Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Especificação de Tipo Implícita e Explícita | Uso de Templates
Templates em C++

Especificação de Tipo Implícita e Explícita

Deslize para mostrar o menu

Especificação implícita de tipo

Na maioria dos casos, o compilador C++ pode determinar automaticamente o tipo do template a partir dos argumentos passados para a função. Se os tipos dos parâmetros fornecerem todas as informações necessárias, não é preciso especificar o tipo explicitamente.

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

O compilador determina automaticamente o tipo do parâmetro de template T com base nos argumentos da função. Isso torna as chamadas de função mais concisas e fáceis de ler. Por esse motivo, você pode já ter utilizado templates sem perceber.

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

Especificação explícita de tipo

Com tudo isso, surge uma pergunta: se a dedução de tipo é implícita, por que se preocupar em especificar o tipo explicitamente? Isso ocorre porque existem cenários em que a dedução automática de tipo não funciona ou não é suficiente, exigindo que você especifique o tipo do template explicitamente. Veja alguns exemplos.

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 é a opção incorreta para substituir o espaço reservado ___ no código a seguir?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 2. Capítulo 2
some-alt