Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Especificación de Tipo Implícita y Explícita | Uso de Plantillas
Templates en C++

Especificación de Tipo Implícita y Explícita

Desliza para mostrar el menú

Especificación implícita de tipo

En la mayoría de los casos, el compilador de C++ puede determinar automáticamente el tipo de plantilla a partir de los argumentos pasados a la función. Si los tipos de los parámetros proporcionan toda la información necesaria, no es necesario especificar el tipo explícitamente.

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

El compilador determina automáticamente el tipo del parámetro de plantilla T en función de los argumentos de la función. Esto hace que las llamadas a la función sean más concisas y fáciles de leer. Por esta razón, es posible que ya hayas utilizado plantillas sin darte cuenta.

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

Especificación explícita de tipo

Con todo esto, surge una pregunta: Si la deducción de tipo es implícita, ¿por qué molestarse en especificar el tipo explícitamente? Esto se debe a que existen escenarios donde la deducción automática de tipo no funciona o no es suficiente, lo que requiere que se especifique el tipo de plantilla de forma explícita. Observa algunos ejemplos.

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

¿Cuál es la opción incorrecta para reemplazar el marcador de posición ___ en el siguiente código?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 2. Capítulo 2
some-alt