¿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).

Respuestas a la pregunta(17)

Su respuesta a la pregunta