C++Funciones en linea


Introducción

Una función definida con el especificador en inline es una función en línea. Una función en línea se puede definir de forma múltiple sin violar la Regla de una definición y, por lo tanto, se puede definir en un encabezado con enlace externo. Declarar una función en línea sugiere al compilador que la función debe estar en línea durante la generación del código, pero no proporciona una garantía.

Sintaxis

  • inline function_declaration
  • inline function_definition
  • class {function_definition};

Observaciones

Generalmente, si el código generado para una función es lo suficientemente pequeño, entonces es un buen candidato para estar en línea. ¿Porque? Si una función es grande y está en línea en un bucle, para todas las llamadas realizadas, el código de la función grande se duplicará, lo que provocará la inflexión del tamaño binario generado. Pero, ¿qué tan pequeño es suficiente?

Si bien las funciones en línea parecen ser una excelente manera de evitar la sobrecarga de las llamadas de funciones, se debe tener en cuenta que no todas las funciones que están marcadas en inline están en línea. En otras palabras, cuando se dice en inline , es solo una sugerencia para el compilador, no un pedido: el compilador no está obligado a incluir la función en línea, es libre de ignorarla, la mayoría lo hace. Los compiladores modernos son mejores para hacer tales optimizaciones que esta palabra clave es ahora un vestigio del pasado, cuando esta sugerencia de función incorporada por el programador fue tomada en serio por los compiladores. Incluso las funciones no marcadas en inline están integradas por el compilador cuando ve beneficio al hacerlo.

Inline como directiva de vinculación

El uso más práctico de inline en C ++ moderno viene de usarlo como una directiva de vinculación. Cuando se define , no se declara, una función en un encabezado que se incluirá en varias fuentes, cada unidad de traducción tendrá su propia copia de esta función que dará lugar a una violación de la ODR (Regla de una definición); esta regla aproximadamente dice que solo puede haber una definición de una función, variable, etc. Para evitar esta violación, marcar la definición de la función en inline hace que la vinculación de la función sea interna.

Preguntas frecuentes

¿Cuándo debo escribir la palabra clave 'en línea' para una función / método en C ++?

Solo cuando desea que la función se defina en un encabezado. Más exactamente solo cuando la definición de la función puede aparecer en varias unidades de compilación. Es una buena idea definir funciones pequeñas (como en un trazador de líneas) en el archivo de encabezado, ya que le da al compilador más información para trabajar mientras optimiza su código. También aumenta el tiempo de compilación.

¿Cuándo no debo escribir la palabra clave 'en línea' para una función / método en C ++?

No agregue en inline cuando crea que su código se ejecutará más rápido si el compilador lo alinea.

¿Cuándo no sabrá el compilador cuándo hacer una función / método en línea?

Generalmente, el compilador podrá hacer esto mejor que tú. Sin embargo, el compilador no tiene la opción de código en línea si no tiene la definición de la función. En el código optimizado al máximo, generalmente todos los métodos privados están en línea, ya sea que lo solicite o no.

Ver también

Funciones en linea Ejemplos relacionados