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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
#1

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

23.04.2012, 01:24. Просмотров 648. Ответов 4
Метки нет (Все метки)

В чём отличие static_cast, dynamic_cast, reinterpret_cast, const_cast от преобразования типа в скобках (стиль Си вроде)
C++
1
2
float f = 10.9;
int i = (int)f;
Читал что этот вариант пришёл из Си, а в C++ предусмотрены 4 функции, но в чём отличие-то? Помоему и Си стиль корректно переводит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2012, 01:24     *_cast< тип >( выражение )
Посмотрите здесь:

Выражение должно иметь тип класса. Да ну? C++
Выражение должно иметь тип указателя C++
Выражение должно иметь тип указателя на объект C++
C++ Вычислить выражение, используя тип double
Работа с текстами/строки. Error: выражение должно иметь тип класса C++
C++ Выражение должно иметь тип класса в Visual Studio
Ошибка выражение должно иметь тип указателя на объект C++
Как сделать *_cast указателя shared_ptr<T>? C++
Vector size - выражение должно иметь тип указателя C++
Ошибка в программе дешифрования: "выражение должно иметь тип указателя на объект" C++
C++ Найти причины ошибки "This - выражение должно иметь тип класса"
Консоль даже не запускается, и + "выражение должно иметь тип указателя на обьект" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.04.2012, 01:26     *_cast< тип >( выражение ) #2
Страуструп пишет, что они опасны, и лучше пользоваться приведением типов в стиле Си
но вы описали только первую.
dynamic_cast преобразование во время выполнения
reinterpret преобразование между несовместимыми типами
const_cast снятие с константы модификатора const
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 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
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.04.2012, 12:00     *_cast< тип >( выражение ) #4
По словам Страуструпа, static_cast<...> специально так уродливо выглядит, чтобы его легко можно было заметить в коде, т.к. с кастами связано довольно много трудноуловимых ошибок.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 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:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru