Pregunta

Estoy confundido acerca de cómo hacer las funciones en línea en C ++ ....

digamos que esta función. ¿cómo se puede girar a una función en línea

int maximum( int x, int y, int z )
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   
¿Fue útil?

Solución

Como otros han dicho, puede utilizar la palabra clave inline para decirle al compilador que desea que su función inline. Pero la palabra clave inline es sólo un compilador pista . El compilador puede y va a elegir ignorar su solicitud si quiere o necesita.

Una alternativa es hacer que su función de una plantilla de función, que a menudo se apagó en línea:

template<class Val>
Val maximum( Val x, Val y, Val z )
{
   Val max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   

Otros consejos

Con el fin de convertirlo en una función en línea que tiene que hacer dos cosas:

  1. declararlo en línea mediante el uso de palabras clave inline.
  2. Asegúrese de que el Definición de esta función es visible en cada unidad de traducción, donde se utiliza. Normalmente, esto significa que usted tiene que poner toda la definición de la función en un archivo de cabecera.

Para enviar la respuesta Neils como una respuesta real:

inline int maximum(int x, int y, int z)
....

Si esa definición de la función aparece dentro de una definición class {}, entonces es automáticamente en línea ya.

Por lo demás, como dicen otros, puesto enfrente inline.

Para hacer uso de la función de la palabra clave en línea en línea:

inline int maximum( int x, int y, int z ) // note the inline keyword
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}

Si la función es un miembro de una clase / struct entonces simplemente definiéndola dentro de la clase (como apposed a fuera de él) lo hace en línea.

Supongamos que tiene la llamada:

int f = maximum(3, 4, 5)

El poder compilador expande la llamada a algo como:

int max = x;
if ( y > max )
   max = y;
if ( z > max )
   max = z;
int z = max;

Hay alguna sobrecarga para llamar a una función, por lo que las funciones en línea le dan la comodidad de funciones junto con el rendimiento de C macros. Pero eso no es para decir que siempre debe utilicen, en la mayoría de los casos el compilador es mejor para decidir cuándo se necesitan optimizaciones como esto y ni siquiera puede cumplir con su solicitud.

Puede leer más acerca de las funciones en línea y cómo (y cuándo) para utilizarlos en C ++ FAQ Lite y esto GotW

inline sólo le dice al compilador que desea que el código de función copiado en todas partes es refernece, hace que el código un poco más rápido (sin llamada a la función de arriba) pero más grande (el código se copia). Esta página es más en profundidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top