Всем привет,
я не вижу разницы между этими двумя вариантами, а Вы?
const float f1 = 1.;
int *p1;
//ВАРИАНТ 1
p1 = const_cast<int*>(reinterpret_cast<const int*>(&f1));
//ВАРИАНТ 2
p1 = reinterpret_cast<int*>(const_cast<float*>(&f1));
Спасибо за внимание,
Лекс
З.Ы. Про потерю точности (и про:
*p1 = 2; // *p1 == 2; f1 != 2
) и неадекватность поведения
const_cast можно не упомянать..
Здравствуйте, Лекс, Вы писали:
Л>Всем привет,
Л>я не вижу разницы между этими двумя вариантами, а Вы?
Л>Л>const float f1 = 1.;
Л>int *p1;
Л> //ВАРИАНТ 1
Л>p1 = const_cast<int*>(reinterpret_cast<const int*>(&f1));
Л> //ВАРИАНТ 2
Л>p1 = reinterpret_cast<int*>(const_cast<float*>(&f1));
Л>
Л>Спасибо за внимание,
Л> Лекс
Л>З.Ы. Про потерю точности (и про: *p1 = 2; // *p1 == 2; f1 != 2
) и неадекватность поведения const_cast можно не упомянать..
Вообще говоря, такой код сильно зависит от реализации. Из стандарта С++ reinterpret_cast: преобразование указатель на объект одного типа в указатель на объект другого типа ведет к неопределенному поведению. размер int должен быть таким, чтобы float в нем умещался, а иначе то, что выше написано.
А так по существу вопроса...
Кажется разницы нет.