¿Debería ser obligatoria la inicialización de variables locales?
Los problemas de mantenimiento que causan los locales sin inicializar (en particular los punteros) serán obvios para cualquier persona que haya hecho un poco de mantenimiento o mejora de c / c ++, pero todavía los veo y ocasionalmente escucho las implicaciones de rendimiento dadas como su justificación.
Es fácil demostrar en c que la inicialización redundante se optimiza:
$ less test.c
#include <stdio.h>
main()
{
#ifdef INIT_LOC
int a = 33;
int b;
memset(&b,66,sizeof(b));
#else
int a;
int b;
#endif
a = 0;
b = 0;
printf ("a = %i, b = %i\n", a, b);
}
$ gcc --version
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
[No optimizado:]
$ gcc test.c -S -o no_init.s; gcc test.c -S -D INIT_LOC=1 -o init.s; diff no_in
it.s init.s
22a23,28
> movl $33, -4(%ebp)
> movl $4, 8(%esp)
> movl $66, 4(%esp)
> leal -8(%ebp), %eax
> movl %eax, (%esp)
> call _memset
33a40
> .def _memset; .scl 3; .type 32; .endef
[Optimizado:]
$ gcc test.c -O -S -o no_init.s; gcc test.c -O -S -D INIT_LOC=1 -o init.s; diff
no_init.s init.s
$
Entonces, ¿el rendimiento de WRT en qué circunstancias la inicialización obligatoria de la variable NO es una buena idea?
SI corresponde, no es necesario restringir las respuestas a c / c ++, pero tenga en cuenta el idioma / entorno (y las pruebas reproducibles que se prefieren sobre la especulación).