La respuesta corta es sí. Cualquier función puede declararse en línea, y poner el cuerpo de la función en la definición de la clase es una forma de hacerlo. También podría haber hecho:
class Foo
{
int* p;
public:
Foo();
~Foo();
};
inline Foo::Foo()
{
p = new char[0x00100000];
}
inline Foo::~Foo()
{
delete [] p;
}
Sin embargo, es hasta el compilador si lo que realmente hace la función inline. VC++ prácticamente ignora sus solicitudes de alineación. Solo alineará una función si cree que es una buena idea. Las versiones recientes del compilador también incluirán elementos que están en archivos .obj separados y no declarados en línea (por ejemplo, del código en diferentes archivos .cpp) si usa link time code generation.
Puede usar la palabra clave __forceinline para decirle al compilador que realmente lo dice en serio cuando dice "en línea esta función", pero usualmente no vale la pena. En muchos casos, el compilador realmente sabe mejor.
Es más que una pista: en línea le permite definir la misma función en más de una unidad de traducción. Este es un requisito previo para incluir la función en un sitio de llamada (sin optimización de tiempo de enlace), que es donde la palabra clave recibe su nombre. –
@FredNurk Estoy totalmente de acuerdo contigo - Sin embargo, el propio Stroustrup (El diseño y la evolución de C++) se refiere a 'inline' como una 'pista' para el compilador –
Como se señaló anteriormente, esta respuesta no está actualizada. [Aquí] (https://stackoverflow.com/a/44247740/509868) es una respuesta más actualizada a una pregunta similar. – anatolyg