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

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Должна ли инициализация локальной переменной быть обязательной? [закрыто]

Сообщение Anonymous »

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

На языке C легко продемонстрировать, что избыточная инициализация оптимизирована:

Код: Выделить всё

$ less test.c
#include 
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++, но, пожалуйста, четко определите язык/среду (и воспроизводимые доказательства предпочтительнее предположений!)

Подробнее здесь: https://stackoverflow.com/questions/139 ... -mandatory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»