Tengo una idea sobre la definición global de funciones en línea (funciones normales) usando "palabra clave en línea" para aumentar el rendimiento si el fragmento es pequeño. Tengo una duda de que: "¿cómo las funciones miembro definidas dentro de las clases también ofrecen el mismo rendimiento y se consideran como en línea? "

-3
Ganesh Chowdhary Sadanala 20 ene. 2018 a las 16:27

3 respuestas

La mejor respuesta

En realidad, las funciones en línea contienen una sola línea de código

Esta afirmación está mal. No hay tal restricción.

Función en línea simplemente significa que todo el código de definición de función se coloca directamente donde está declarado .

pero las funciones miembro definidas dentro de una clase contienen múltiples códigos en su lugar tratados como en línea ¿por qué?

Si se está refiriendo a la palabra clave inline tampoco hay restricción de que las funciones marcadas con esa palabra clave solo puedan contener una sola línea de código.

Si el compilador en realidad está en línea (es decir, el código de ensamblaje insertado directamente en su lugar, sin una llamada de función) se deja a su decisión, y depende principalmente de las estrategias de optimización del compilador elegidas en los indicadores de optimización.


Debe proporcionar la palabra clave inline para funciones que no sean miembros de la clase si están completamente definidas en un archivo de encabezado para evitar errores de violación de ODR.

Aquí hay un ejemplo (se supone un archivo de encabezado):

class foo {
    int x_;

public:
     // Inside the class declaration 'inline' is assumed as default
     int x() const { return x_; }
     int y() const {
         int result = 0;
         // Do some complicated calculation spanning 
         // a load of code lines
         return result;
     }
};

inline int bar() { // inline is required here, otherwise the compiler
                   // will see multiple definitions of that function
                   // in every translation unit (.cpp) that includes
                   // that header file.
    return 42;
}
2
20 ene. 2018 a las 13:50

Tengo una explicación clara de todos ustedes.

INTUICIÓN en tres 4 puntos:

1.Para funciones normales (no métodos que se declaran / definen en clases), la palabra clave en línea se utiliza para interpolar el código de ensamblaje (por compilador), evitando así la repetición de llamadas a funciones.

2.Para los métodos declarados dentro de las clases, el rendimiento sería el mismo si se declaran como funciones normales con una palabra clave en línea (sin concepto de clase) para un pequeño fragmento.

3. La declaración del método (para las clases) está implícita en línea.

4.la declaración de funciones es (si es necesario) es explícita en línea.

0
Ganesh Chowdhary Sadanala 20 oct. 2018 a las 17:04

Inline no significa que sea una sola línea de código. Significa que todo el código si se trata de una sola línea o de varias líneas se inserta en el punto de llamada a la función, reduciendo así la sobrecarga de la llamada de función.

1
Wilson 20 ene. 2018 a las 13:42
48356675