En este artículo, analizaremos la deducción del tipo de retorno en C++14. Usando un tipo de retorno automático en C++14 , el compilador intentará deducir el tipo de retorno automáticamente.
Programa 1:
C++14
// C++14 program to illustrate the // return type deduction #include <iostream> using namespace std; // Function to multiply the two // numbers a and b auto multiply(int a, int b) { // Return the product return a * b; } // Driver Code int main() { int a = 4, b = 5; // Function Call cout << multiply(a, b); return 0; }
20
Explicación : en el programa anterior, la función multiplicar (int a, int b) el compilador realizará la multiplicación. Como los parámetros pasados 4 y 5 , el compilador devolverá 20 y dado que su tipo de datos es un número entero, el compilador deducirá el tipo como un número entero automáticamente y devolverá 20 como un número entero.
Programa 2:
C++14
// C++ 14 program to illustrate the // return type deduction #include <iostream> using namespace std; // Function to increment the // value of a auto increase(int& a) { // Increment a a++; // Return the updated value return a; } // Driver Code int main() { int b = 10; // Function Call int& c = increase(b); // Print the value b and c cout << b << c; return 0; }
Producción:
Explicación : Como puede verse, en el programa anterior, el compilador muestra un error . Esto se debe a que en la función aumentar(int &a) , el compilador devolverá 11 y dado que su tipo es un número entero, el compilador deducirá su tipo como un número entero y lo devolverá, pero en main, estamos asignando unvalor entero a un número entero variable de referencia c , es por eso que mostraba error.
Ahora, el problema anterior se puede solucionar de dos maneras:
usando auto& :
C++14
// C++14 program to illustrate return // type deduction using auto& #include <iostream> using namespace std; // Function to increment the value // of a and return the updated value auto& increase(int& a) { a++; return a; } // Driver Code int main() { int b = 10; // Function Call int& c = increase(b); cout << b << '\n' << c; return 0; }
11 11
usando decltype(auto) :
C++14
// C++14 program to illustrate return // type deduction using decltype() #include <iostream> using namespace std; // Function that increments the value // of a and return the updated value decltype(auto) increase(int& a) { a++; return a; } // Driver Code int main() { int b = 10; // Function Call int& c = increase(b); cout << b << '\n' << c; return 0; }
11 11