Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 13:48   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию А не все ли равно?

Есть ли разница для программы\ресурсов\быстродействия между:

Код:
WNDCLASSEX wnd = {0};
или

Код:
WNDCLASSEX wnd;
ZeroMemory(&wnd, sizeof(wnd));
L6go1as вне форума Ответить с цитированием
Старый 02.04.2012, 13:55   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему первое это инициализация членов структуры, а не заполнение её нулями.
итого вы инициализируете только первый член нулем.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2012, 14:19   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

По первому всегда думал, что идет инициализация + заполнение всей структуры нулями.
Эм, если честно не знаю, именно поэтому и спрашиваю, что так, что сяк - работает.
Вопрос, то в другом, как будет лучше и правильнее.
L6go1as вне форума Ответить с цитированием
Старый 02.04.2012, 14:46   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
итого вы инициализируете только первый член нулем.
Да, но насколько помню, при инициализации массивов и структур, если пропущен элемент, то он автоматом инициализируется по умолчанию: 0 - для целочисленных типов, NULL - для указателей; \0 - для строковых типов.
То есть допустимо вообще так.
int arr[100] = {};
WNDCLASSEX wnd = {};

З/Ы
WNDCLASSEX wnd;
ZeroMemory(&wnd, sizeof(wnd)); // так должно быть медленнее по идее

Последний раз редактировалось EUGY; 02.04.2012 в 14:51.
EUGY вне форума Ответить с цитированием
Старый 02.04.2012, 14:54   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Пепел Феникса
Цитата:
итого вы инициализируете только первый член нулем.
не только первый. остальные тож 0

Цитата:
Есть ли разница для программы\ресурсов\быстродействия между:
есть. {} инициализирует члены, memset заполняет память. memset нельзя использовать, если у тебя не POD типы в структуре. memset заполнит "больше, чем нужно", с поправкой на выравнивание структуры, когда инициализация этот обрубок не тронет.
если рассматривать только POD типы, то разницы в принципе нет. если и есть, то зависит от конкретного компилятора. по логике memset должен быть медленнее, хотя бы из-за вызова функции.
я предпочитаю при инициализации инициализировать, а не занулять.

пс. почему говорю про memset - потому что ZeroMemory - виндовый макрос, вызывающий memset(ptr, 0, size)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.04.2012, 16:02   #6
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

pproger, понятно, просто несколько раз в литературе, как в нашей, так и в иностранной натыкался на утверждение, мол если оставлять инциализациию типа WNDCLASSEX wnd;
wnd.wnd1
wnd.wnd2 и т.д., то в памяти может скопиться много гауна, которае в итоге, при больших программах может саму программу замедлить(например время ожидания\обработки). А вот уже в зависимости от литературы, уже и фигурирует ZeroMemory или = {0}.

А не могли бы уточнить, что происходит, если сперва все члены структуры занулить, а уже потом инициализировать?
L6go1as вне форума Ответить с цитированием
Старый 02.04.2012, 16:10   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2L6go1as
Цитата:
А не могли бы уточнить, что происходит, если сперва все члены структуры занулить, а уже потом инициализировать?
не понимаю вопроса
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.04.2012, 16:16   #8
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
не понимаю вопроса
Эм, может быть не правильно выразился.
К примеру, как будет лучше,

Код:
WNDCLASSEX wnd;
wnd.size = sizeof(WNDCLASSEX);
.
.
.
или

Код:
WNDCLASSEX wnd = {0};
wnd.size = sizeof(WNDCLASSEX);
.
.
.
L6go1as вне форума Ответить с цитированием
Старый 02.04.2012, 16:21   #9
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2L6go1as
если ты собираешься инициализировать ВСЕ члены структуры (или только те, которые попадают в cbSize (а не size, кстати)), то {0} можно не писать.
я по привычке всегда пишу {0}.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.04.2012, 16:25   #10
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Ок, пасиб.
L6go1as вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
smarty и не равно ilma55 PHP 2 09.06.2011 00:00
Сделал задачу, а она все равно не выполняет задания ВДПУ Помощь студентам 2 17.05.2011 20:27
лист2 равно лист1 Cpluser Microsoft Office Excel 2 30.03.2010 08:21
и все равно мерцает! Spiritual Win Api 4 06.02.2009 20:28
Делимся идеями (простыми, но до которых все-равно нужно додуматься) Jora_Kornev Общие вопросы Delphi 3 11.01.2009 14:18