Tengo curiosidad por saber si el constructor y el destructor predeterminados que el compilador genera están en línea o no, porque puedo justificarlo de cualquier manera. Por un lado, quiere que el constructor/destructor predeterminado sea no esté en línea para que agregarlos más tarde no rompa ABI (porque los archivos de objeto compilados cuando solo los valores predeterminados habrán incorporado las definiciones generadas en lugar de lo que define) Por otro lado, para que un compilador C++ compile código C que funciona tan bien como cuando se compila con un compilador C, no puede agregar llamadas constructor/destructor para cada estructura asignada, y en C++ la única diferencia funcional entre una clase y se supone que una estructura es la protección de acceso predeterminada. ¿Tal vez el enlazador aborda esto de alguna manera? Tal vez la respuesta varía en todos los compiladores?¿Están el constructor y el destructor predeterminados siempre en línea?
Una consecuencia de esta pregunta: si tengo una estructura POD en C++, ¿puedo beneficiarme teóricamente de algunos compiladores definiendo constructores/destructores en línea vacíos en lugar de los valores predeterminados?
La diferencia entre las palabras clave 'clase' y' struct' no se supone. –
@Luc: Supuesto en el sentido de que este es el tipo de obscura donde pude ver un compilador que no cumple con los estándares. –