Articulo de referencia

Tipo de retorno final

En programación informática , una subrutina (también llamada función ) suele informar al código que la llama sobre el resultado de su cálculo, devolviéndole un valor. El tipo de...

En programación informática , una subrutina (también llamada función ) suele informar al código que la llama sobre el resultado de su cálculo, devolviéndole un valor. El tipo de datos de ese valor se denomina tipo de retorno de la función .

En el lenguaje de programación C++ , se debe declarar una función. El tipo de retorno de la función C++ se especifica al declararla. [ 1 ] Un tipo de retorno final , una característica sintáctica disponible desde C++11 , es similar a un tipo de retorno tradicional, excepto que se especifica en una ubicación diferente. [ 2 ] [ 3 ] [ 4 ]

Sintaxis

El tipo de retorno ordinario se especifica antes del nombre de la función. En este ejemplo de código C++ tradicional, el tipo de retorno hasMultipleItems()es bool:

usando std :: vector ;clase MyClass { privado : vector <int> items ; público : bool hasMultipleItems ( ) { return items.size ( ) > 1 ; } } ;

Se especifica un tipo de retorno final después de la lista de parámetros, siguiendo ->los símbolos:

usando std :: vector ;clase MyClass { privado : vector <int> items ; público : auto hasMultipleItems ( ) - > bool { return items.size ( ) > 1 ; } } ;

Distinción de otras características del lenguaje

En C++ moderno, el significado de la autopalabra clave dependerá de su contexto:

  • Cuando se utiliza en la definición de una variable ( por ejemplo , auto x = 11;), la autopalabra clave indica inferencia de tipo . El tipo de datos xse deducirá de su inicialización. El tipo de retorno de una función también se puede inferir utilizando autosin especificar un tipo de retorno final. Por ejemplo:
auto hasMultipleItems () { return items . size () > 1 ; }
  • Por otro lado, en el ejemplo de la sección anterior no hay inferencia de tipos hasMultipleItems(). Ese ejemplo solo usa la autopalabra clave como elemento sintáctico, porque se está usando un tipo de retorno final.

Razón fundamental

Consideremos la tarea de programar una versión genérica de lo siguiente:

int add ( const int & lhs , const int & rhs ) { return lhs + rhs ; }

Una expresión adecuada del tipo de retorno de esta función usaría los dos nombres de parámetros formales con decltype : decltype(lhs + rhs). Sin embargo, cuando se especifica tradicionalmente un tipo de retorno, esos dos parámetros formales aún no están dentro del alcance.

Por consiguiente, este código no compilará:

// Esto no compilará la plantilla < typename L , typename R > decltype ( lhs + rhs ) add ( const L & lhs , const R & rhs ) { return lhs + rhs ; }

Sin embargo, cuando se especifica un tipo de retorno final, los parámetros formales están dentro del alcance:

plantilla < typename L , typename R > auto add ( const L & lhs , const R & rhs ) -> decltype ( lhs + rhs ) { return lhs + rhs ; }

Véase también

Referencias

  1. Stroustrup, Bjarne (2013). El lenguaje de programación C++ (Cuarta  ed.). Addison-Wesley. ISBN 978-0-321-56384-2.
  2. "Declaración de función" . cppreference.com . Referencia de C++ . Consultado el 1 de marzo de 2021 .
  3. "Tipos de retorno con sufijo C++0x" . cplusplus.com . La red de recursos de C++ . Consultado el 1 de marzo de 2021 .
  4. "Funciones (C++)" . Microsoft C++, C y Ensamblador . Microsoft Corporation . Consultado el 1 de marzo de 2021 .