Должна ли инициализация локальной переменной быть обязательной?

Проблемы с обслуживанием, которые вызывают неинициализированные локальные объекты (в частности, указатели), будут очевидны для любого, кто немного занимался обслуживанием или улучшением c / c ++, но я все еще вижу их и иногда слышу последствия производительности, приведенные в качестве их оправдания.

В c легко показать, что избыточная инициализация оптимизирована:

$ 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)

[Не оптимизировано:]

$ 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

[Оптимизированный:]

$ 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
$

Таким образом, производительность WRT при каких обстоятельствах обязательная инициализация переменной НЕ является хорошей идеей?

Если применимо, нет необходимости ограничивать ответы на c / c ++, но, пожалуйста, будьте ясны в отношении языка / среды (и воспроизводимых доказательств, гораздо более предпочтительных, чем предположения!)

Ответы на вопрос(17)

Ваш ответ на вопрос