|
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
19.06.2012, 23:04 | #1 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
if или !if =)
у меня вопрос глупый но все же:
Недавно я сдавал экзамен. Преподаватель ко мне дошибался на счет такого куска кода как у вас Код:
if (spellId) unitTarget->CastSpell(unitTarget, spellId, true);
__________________
sql-language.ru |
19.06.2012, 23:14 | #2 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
|
|
19.06.2012, 23:23 | #3 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
но мы же заранее объявили
Код:
uint32 spellId = 0;
__________________
sql-language.ru Последний раз редактировалось lovepsone; 19.06.2012 в 23:27. |
19.06.2012, 23:28 | #5 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
Все понял. Спасибо.
__________________
sql-language.ru |
20.06.2012, 08:50 | #6 |
Администратор
|
В файле SpellEffects.cpp уже было 5-6 подобных проверок, поэтому сделал по аналогии, хотя сначала хотел использовать:
Код:
if (spellId > 0) |
20.06.2012, 19:10 | #7 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Чем неправильна if(spellid) для числовых типов и указателей ???
Как ее обобщения даже ввели поддержку if(Type* ptr = expr) в c++ С точки зрения читабельности проверки if(spellid) однозначно лучше. Так как мы проверяем не равенство нулю какой-то случайной переменной, а задан или нет номер спела, т.е. есть он или нет.
__________________
Так как устал объяснять знайте ICQ не пользуюсь Последний раз редактировалось Vladimir; 20.06.2012 в 19:16. |
Пользователь сказал cпасибо: | virusav (20.06.2012) |
21.06.2012, 02:23 | #9 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Как раз для пользовательских типов более логично использовать if(val) чем if (val !=0) потому что одному богу известно что там числовое возращается и есть ли вообще неявный каст к числовому. А вот каст к bool или отсутствует (что сразу поймем) или будет чем-то осмысленным исходя из значений этого пользовательского типа. C++11 кстати добавил хорошую поддержку - позволяет bool-каст делать explicit и работающим только в таких контекстах как if(). Вообщем с большей вероятностью ожидать разумного определения bool-каста от типа (конечно в зависимости от типа) чем int-каста.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
21.06.2012, 07:17 | #10 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Это еще с какой стати мы поймем? Пока о физической компиляции сырцов речи не шло - экзамен, вся проверка "устно". К тому же логика разных компиляторов при касте подобных вещей может быть са-а-авсем разной, с чем я не так давно столкнулся пытаясь кое-что компилить на watcom open c. Так что привязывать все к умирающему мелкософтовскому монстру будет крайне неверно. Например гнуси вообще наплевать что ей кастить в bool, и в некоторых случаях она это делает так, что хоть стой, хоть падай - например при касте енумов
|
21.06.2012, 07:52 | #11 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Флудеры, блин
Перенёс вашу философскую беседу в более подходящий раздел Название могу сменить |
Пользователь сказал cпасибо: | Vladimir (21.06.2012) |
21.06.2012, 12:27 | #12 | ||
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Цитата:
Цитата:
Но реальные проблемы я поимел с кастом к int энумов только из битовых полей. "Enum m_enum: N;" - вот тогда в сочетании со знаковостью значение действительно очень неожиданно преобразуется на разных платформах.
__________________
Так как устал объяснять знайте ICQ не пользуюсь Последний раз редактировалось Vladimir; 21.06.2012 в 12:30. |
||