Con frecuencia encuentro clases grandes que no son de plantilla en C++ donde los métodos simples se definen directamente en el cuerpo de la clase en el archivo de encabezado en lugar de por separado en el archivo de implementación. Por ejemplo:¿Por qué los métodos C++ a veces se definen dentro de las clases?
class Foo {
int getBar() const { return bar; }
...
};
¿Por qué hacer esto? Parece que hay desventajas. La implementación no está tan oculta como debería ser, el código es menos legible y también habría una mayor carga en el compilador si el archivo de encabezado de la clase se incluye en muchos lugares diferentes.
Supongo que las personas tienen la intención de incluir estas funciones en otros módulos, lo que podría mejorar significativamente el rendimiento. Sin embargo, he escuchado que los compiladores más nuevos pueden hacer inline (y otras optimizaciones entre procesos) en tiempo de enlace entre los módulos. ¿Qué tan amplio es el soporte para este tipo de optimización de tiempo de enlace, y realmente hace innecesario este tipo de definiciones? ¿Hay alguna otra buena razón para estas definiciones?
Sí, pero "en línea por defecto" no significa que el compilador los alineará, solo que no tiene que agregar manualmente la * sugerencia * que la palabra clave "en línea" realmente es. –