leí este article de D. Kalev esta mañana acerca de la nueva característica de C++ 11 "incumplido y funciones eliminados", y no se puede entender la parte sobre el rendimiento, a saber:¿Por qué el constructor generado implícitamente (et al.) Sería más eficiente que uno definido por el usuario (trivial)?
la definición manual de una la función de miembro especial (incluso si es trivial) suele ser menos eficiente que una función implícitamente definida.
buscando en Google para encontrar una respuesta, he encontrado otra article del mismo autor:
el constructor sintetizado y constructor de copia de permitir la aplicación para crear código que es más eficiente que el código escrito por el usuario, ya puede aplicar optimizaciones que de otro modo no siempre son posibles.
No hay explicación, pero leo periódicamente afirmaciones similares.
Pero ¿cómo es que la escritura:
class C { C() = default; };
puede ser más eficiente que
class C { C(){} };
? Pensé que un compilador sería lo suficientemente inteligente como para detectar esa situación y optimizarla. En otras palabras, ¿cómo es más fácil para el compilador optimizar cuando ve =default
en lugar de {}
(función de cuerpo vacío)?
Editar: la pregunta se editó para agregar la etiqueta "C++ 11", pero esta pregunta permanece en el contexto C++ 03: simplemente reemplace class C {C()=default;};
por class C {};
, por lo que realmente no es una pregunta específica de C++ 11.
Buena pregunta. También creo que cualquier compilador que no optimice esto está defectuoso. Veamos si alguien puede dar una buena razón por la que eso no es posible. –
Pruebe con un compilador de C++ 1x para generar el ensamblado. Esto responderá a tu pregunta definitivamente. Dudo que haya alguna diferencia, ya que como dices, el compilador es lo suficientemente inteligente. Los comentarios como el que citó son malos, en mi opinión, porque hace que los desarrolladores de C++ piensen demasiado sobre el rendimiento. El 99% del tiempo hay otras cualidades de las que preocuparse antes incluso de considerar tontas optimizaciones de micro rendimiento. –
@Daniel: gracias, pero no sé nada sobre el ensamblaje, y no estoy interesado en obtener micro-rendimiento ... Pero estoy interesado en saber * por qué * habría alguna ganancia, ya sea micro. – rafak