Форум программистов, компьютерный форум CyberForum.ru

*_cast< тип >( выражение ) - C++

Восстановить пароль Регистрация
 
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
23.04.2012, 01:24     *_cast< тип >( выражение ) #1
В чём отличие static_cast, dynamic_cast, reinterpret_cast, const_cast от преобразования типа в скобках (стиль Си вроде)
C++
1
2
float f = 10.9;
int i = (int)f;
Читал что этот вариант пришёл из Си, а в C++ предусмотрены 4 функции, но в чём отличие-то? Помоему и Си стиль корректно переводит.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.04.2012, 01:26     *_cast< тип >( выражение ) #2
Страуструп пишет, что они опасны, и лучше пользоваться приведением типов в стиле Си
но вы описали только первую.
dynamic_cast преобразование во время выполнения
reinterpret преобразование между несовместимыми типами
const_cast снятие с константы модификатора const
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.04.2012, 11:50     *_cast< тип >( выражение ) #3
Цитата Сообщение от panicwassano Посмотреть сообщение
Страуструп пишет, что они опасны, и лучше пользоваться приведением типов в стиле Си
он пишет наоборот - приведение в стиле С опаснее, тк сложнее отслеживать вид преобразования)


dynamic_cast - определяет, принадлежит ли объект некоторого типа некоторой иерархии
reinterpret_cast - нужен для низкоуровневых приведений (преобразования не родственных типов)
static_cast - нужен для явных приведений типов (преобразования родственных типов)
const_cast - нужен для снятия константности объекта
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.04.2012, 12:00     *_cast< тип >( выражение ) #4
По словам Страуструпа, static_cast<...> специально так уродливо выглядит, чтобы его легко можно было заметить в коде, т.к. с кастами связано довольно много трудноуловимых ошибок.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.04.2012, 12:05     *_cast< тип >( выражение ) #5
Цитата Сообщение от OrmaJever Посмотреть сообщение
Читал что этот вариант пришёл из Си, а в C++ предусмотрены 4 функции, но в чём отличие-то?
Мэйерс:
1) гораздо легче найти в коде
2) более узко специализированное назначение каждого оператора дает возможность компиляторам дигностировать ошибки их использования
Yandex
Объявления
23.04.2012, 12:05     *_cast< тип >( выражение )
Ответ Создать тему
Опции темы

Текущее время: 05:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru