Ru-MaNGOS  

Вернуться   Ru-MaNGOS > Документация > Языки программирования

Важная информация

Языки программирования Изучаем С++, Sql, php, Lua, Python

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.06.2012, 23:04   #1
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию if или !if =)

у меня вопрос глупый но все же:
Недавно я сдавал экзамен. Преподаватель ко мне дошибался на счет такого куска кода как у вас
Код:
if (spellId)
   unitTarget->CastSpell(unitTarget, spellId, true);
Почему??? Я так же написал, а препод поставил не 9 а 8. Или просто препод такой?
__________________
sql-language.ru
lovepsone вне форума   Ответить с цитированием
Старый 19.06.2012, 23:14   #2
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 57
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
у меня вопрос глупый но все же:
Недавно я сдавал экзамен. Преподаватель ко мне дошибался на счет такого куска кода как у вас
Код:
if (spellId)
   unitTarget->CastSpell(unitTarget, spellId, true);
Почему??? Я так же написал, а препод поставил не 9 а 8. Или просто препод такой?
препод прав. правильная запись будет if (spellId != 0), для того чтобы писать так, как в примере надо держать в уме кучу условностей.
rsa вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
KiriX (20.06.2012), lovepsone (19.06.2012)
Старый 19.06.2012, 23:23   #3
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

но мы же заранее объявили
Код:
uint32 spellId = 0;
А дальше делаем выборку, и,если не чего не совпадает, то мы возвращаем false. Или я просто не различаю когда spellId != 0, или когда мы заранее что-то сделали, и далее сделали выборку, если что то не выбирается то возвращается spellId =0. (Что-то я запутался)
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 19.06.2012 в 23:27.
lovepsone вне форума   Ответить с цитированием
Старый 19.06.2012, 23:26   #4
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Подразумевается что у вас будет перегрузка оператора для uint-a, а в примере вы его не указали
Lordronn вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
lovepsone (19.06.2012)
Старый 19.06.2012, 23:28   #5
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Все понял. Спасибо.
__________________
sql-language.ru
lovepsone вне форума   Ответить с цитированием
Старый 20.06.2012, 08:50   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 491
Сказал(а) спасибо: 56
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В файле SpellEffects.cpp уже было 5-6 подобных проверок, поэтому сделал по аналогии, хотя сначала хотел использовать:
Код:
if (spellId > 0)
virusav вне форума   Ответить с цитированием
Старый 20.06.2012, 19:10   #7
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 440 раз(а) в 183 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Чем неправильна if(spellid) для числовых типов и указателей ???
Как ее обобщения даже ввели поддержку if(Type* ptr = expr) в c++

С точки зрения читабельности проверки if(spellid) однозначно лучше. Так как мы проверяем
не равенство нулю какой-то случайной переменной, а задан или нет номер спела, т.е. есть он или нет.
__________________
Так как устал объяснять знайте ICQ не пользуюсь

Последний раз редактировалось Vladimir; 20.06.2012 в 19:16.
Vladimir вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
virusav (20.06.2012)
Старый 20.06.2012, 19:41   #8
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 57
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Vladimir Посмотреть сообщение
Чем неправильна if(spellid) для числовых типов и указателей ???
ну например тем, что в данном случае тип не числовой а пользовательский, а объявления его в зоне видимости нету. в результате одному аллаху известно, однозначно ли его преобразование в bool или нет...
rsa вне форума   Ответить с цитированием
Старый 21.06.2012, 02:23   #9
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 440 раз(а) в 183 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Цитата:
Сообщение от rsa Посмотреть сообщение
ну например тем, что в данном случае тип не числовой а пользовательский, а объявления его в зоне видимости нету. в результате одному аллаху известно, однозначно ли его преобразование в bool или нет...
Как раз для пользовательских типов более логично использовать if(val) чем if (val !=0) потому что одному богу известно что там числовое возращается и есть ли вообще неявный каст к числовому. А вот каст к bool или отсутствует (что сразу поймем) или будет чем-то осмысленным исходя из значений этого пользовательского типа. C++11 кстати добавил хорошую поддержку - позволяет bool-каст делать explicit и работающим только в таких контекстах как if(). Вообщем с большей вероятностью ожидать разумного определения bool-каста от типа (конечно в зависимости от типа) чем int-каста.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 21.06.2012, 07:17   #10
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 57
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Vladimir Посмотреть сообщение
А вот каст к bool или отсутствует (что сразу поймем) или будет чем-то осмысленным исходя из значений этого пользовательского типа.
Это еще с какой стати мы поймем? Пока о физической компиляции сырцов речи не шло - экзамен, вся проверка "устно". К тому же логика разных компиляторов при касте подобных вещей может быть са-а-авсем разной, с чем я не так давно столкнулся пытаясь кое-что компилить на watcom open c. Так что привязывать все к умирающему мелкософтовскому монстру будет крайне неверно. Например гнуси вообще наплевать что ей кастить в bool, и в некоторых случаях она это делает так, что хоть стой, хоть падай - например при касте енумов
rsa вне форума   Ответить с цитированием
Старый 21.06.2012, 07:52   #11
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 431 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Флудеры, блин
Перенёс вашу философскую беседу в более подходящий раздел
Название могу сменить
KiriX вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Vladimir (21.06.2012)
Старый 21.06.2012, 12:27   #12
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 440 раз(а) в 183 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Цитата:
Пока о физической компиляции сырцов речи не шло - экзамен, вся проверка "устно".
Если тип не известен то проверка if(val !=0) еще более бредовей чем if(val). Если тип числовой то они идентично правельные. Если итоговый тип выражения bool то !=0 хоть и работает (если это не тип в c++11 с explicit bool() - val !=0 не будет компилироваться ), но тоже бред.

Цитата:
Например гнуси вообще наплевать что ей кастить в bool, и в некоторых случаях она это делает так, что хоть стой, хоть падай - например при касте енумов
Ну к 0 то они все одинаково кастанутся, а вот что за int - ненулевое значение будет сильно зависит от знаковости представления enum.
Но реальные проблемы я поимел с кастом к int энумов только из битовых полей.
"Enum m_enum: N;" - вот тогда в сочетании со знаковостью значение действительно очень неожиданно преобразуется на разных платформах.
__________________
Так как устал объяснять знайте ICQ не пользуюсь

Последний раз редактировалось Vladimir; 21.06.2012 в 12:30.
Vladimir вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 23:09. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot