A inicialização variável local deve ser obrigatória?
Os problemas de manutenção que os locais não inicializados causam (particularmente os ponteiros) serão óbvios para qualquer um que tenha feito um pouco de manutenção ou aprimoramento do c / c ++, mas eu ainda os vejo e ocasionalmente ouço implicações de desempenho dadas como justificativas.
É fácil demonstrar em c que a inicialização redundante é otimizada:
$ 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)
[Não otimizado:]
$ 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
[Otimizado:]
$ 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
$
Então, o desempenho do WRT sob quais circunstâncias é a inicialização da variável obrigatória NÃO é uma boa ideia?
Se aplicável, não há necessidade de restringir as respostas a c / c ++, mas, por favor, seja claro sobre a linguagem / ambiente (e evidência reproduzível muito preferida à especulação!)