Вот за что я не люблю static_cast
От: Кирпа В.А. Украина  
Дата: 29.01.04 06:27
Оценка:
int OffsetType();
short GetType(void *p)
{
    return *(static_cast<short *>(static_cast<char *>(p) + OffsetType()));
}

здесь не компилится
error C2440: 'static_cast' : cannot convert from 'char *' to 'short *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Что для преобразования из char * в short * надо использовать reinterpret_cast ?

А так компилится


int OffsetType();
short GetType(void *p)
{
    return *((short *)((char *)p + OffsetType()));
}


PS Может я просто не умею готовить кошек?
!0xDEAD
Re: Вот за что я не люблю static_cast
От: ArtDenis Россия  
Дата: 29.01.04 06:35
Оценка: 1 (1)
Здравствуйте, Кирпа В.А., Вы писали:

КВА>Что для преобразования из char * в short * надо использовать reinterpret_cast ?

Именно. Т.к. такое преобразование небезопасно с точки зрения дальнейшего использования полученного указателя.

КВА>А так компилится

КВА>
КВА>int OffsetType();
КВА>short GetType(void *p)
КВА>{
КВА>    return *((short *)((char *)p + OffsetType()));
КВА>}
КВА>

C-style program, однако. Компилятор думает, что ты ему подсунул старый сишный код

КВА>PS Может я просто не умею готовить кошек?

А кто умеет?
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Вот за что я не люблю static_cast
От: Vamp Россия  
Дата: 29.01.04 07:37
Оценка:
Я же только что целый опус написал по данному вопросу...
Да здравствует мыло душистое и веревка пушистая.
Re: Вот за что я не люблю static_cast
От: Андрей Тарасевич Беларусь  
Дата: 29.01.04 08:39
Оценка:
Здравствуйте, Кирпа В.А., Вы писали:

КВА>Что для преобразования из char * в short * надо использовать reinterpret_cast ?


Разумеется.

КВА>А так компилится

КВА>
КВА>int OffsetType();
КВА>short GetType(void *p)
КВА>{
КВА>    return *((short *)((char *)p + OffsetType()));
КВА>}
КВА>


Это и будет аналог 'reinterpert_cast'
Best regards,
Андрей Тарасевич
Re[2]: Вот за что я не люблю static_cast
От: Кодт Россия  
Дата: 29.01.04 09:37
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Это и будет аналог 'reinterpert_cast'


Я правильно понимаю, что c-style cast — это компилятор последовательно пробует сделать function cast, static_cast, а если не получилось — то reinterpret_cast ?
Перекуём баги на фичи!
Как работает C-style cast
От: Павел Кузнецов  
Дата: 29.01.04 11:27
Оценка: 68 (6)
#Имя: FAQ.cpp.c-stylecast
К> Я правильно понимаю, что c-style cast — это компилятор
К> последовательно пробует сделать function cast, static_cast,
К> а если не получилось — то reinterpret_cast ?

Почти.

function cast с одним аргументом определяется как раз через c-style cast, поэтому его, вообще, рассматривать не стоит.

const_cast, static_cast, reinterpret_cast а также их комбинации применяются в следующем порядке:

Кроме того, в отличие от static_cast и reinterpret_cast, с помощью c-style cast можно приводить без соблюдения "прав доступа":
При необходимости в этих случаях также будет применен const_cast.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.