|
-21 / 5 / 3
Регистрация: 14.03.2013
Сообщений: 130
|
|
Чем отличаются dynamic_cast и static_cast?15.06.2013, 16:19. Показов 37194. Ответов 21
Метки нет (Все метки)
0
|
|
| 15.06.2013, 16:19 | |
|
Ответы с готовыми решениями:
21
Отличия dynamic_cast, static_cast и (object*) Dynamic_cast и static_cast: в чём смысл? Когда использовать static_cast и dynamic_cast? |
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 15.06.2013, 16:59 | |
|
dynamic_cast - каст с проверкой, а возможен ли такой каст. если нет - будет или исключение или результат каста - нуль. static_cast - без проверок.
0
|
|
|
216 / 63 / 16
Регистрация: 26.02.2012
Сообщений: 114
|
|
| 15.06.2013, 17:00 | |
|
Плюс dynamic требует RTTI.
0
|
|
|
40 / 37 / 15
Регистрация: 25.10.2012
Сообщений: 112
|
||||||
| 15.06.2013, 17:06 | ||||||
|
static_cast - это приведение типа по обычным правилам. От C-style приведения отличается тем, что запрещает приведение одного указателя на произвольный тип к другому, за исключением приведения нетипизированных указателей и приведения вниз по иерархии классов (downcast).
2
|
||||||
|
Ушел с форума
|
|||||||
| 15.06.2013, 18:53 | |||||||
Сообщение было отмечено как решение
Решение
static_cast выполняет проверку на этапе компиляции.
Если типы несовместимые, компиляция завершается с ошибкой. dynamic_cast выполняет проверку на этапе выполнения и зависит от механизма динамической информации о типах (RTTI), поэтому его использование влечет за собой некоторые накладные расходы. Если типы несовместимые, dynamic_cast бросает исключение std::bad_cast (для ссылок) или возвращает NULL (для указателей). dynamic_cast работает только для указателей и ссылок и только для полиморфных классов, связанных открытым наследованием; при попытке использовать его с чем-нибудь другим произойдет ошибка компиляции. Хотя это тоже можно считать одним из проявлений контроля типов. Основное назначение dynamic_cast - защита от нисходящего приведения типов в тех случаях, когда это лишено смысла. Например, если у вас есть ссылка или указатель на базовый класс, но вы точно знаете, что на самом деле она указывает на экземпляр производного типа, вы можете выполнить приведение и работать с производным типом. Это называется нисходящее приведение. Но если там будет объект базового типа, лишенный своей производной части, такое приведение лишено смысла и приведет к неопределенному поведению. Ни static_cast, ни тем более приведение в стиле C такую ситуацию не ловят. А dynamic_cast с ней справляется. Помедитируйте над следующим кодом:
15
|
|||||||
|
-21 / 5 / 3
Регистрация: 14.03.2013
Сообщений: 130
|
|||||||||||
| 15.06.2013, 19:36 [ТС] | |||||||||||
|
Убежденный, у меня есть классы Parent<---Child1,Parent<---Child2;
0
|
|||||||||||
|
Ушел с форума
|
||||||
| 15.06.2013, 19:56 | ||||||
|
static_cast выполняется на этапе компиляции, из-за этого он в принципе не может
знать, объект какого типа будет передан в функцию на этапе выполнения программы. Поэтому Parent будет в любом случае приведен к Child, даже если вы создадите его вот так:
0
|
||||||
|
-21 / 5 / 3
Регистрация: 14.03.2013
Сообщений: 130
|
|
| 15.06.2013, 20:00 [ТС] | |
|
Убежденный, тогда будет не тот результат которого я ожидала,вроде поняла,спасибо
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||
| 22.11.2013, 10:15 | |||||||
2
|
|||||||
|
Заблокирован
|
|
| 22.11.2013, 11:02 | |
|
лично по мне, на много проще, прозрачней и удобней приводить типы по старинке, просто в скобках писать приведение да и всё, типа int a = (int)b;
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 22.11.2013, 11:13 | |
|
newbie666, Вы вкурсе, что это практически эквивалентно reintrepret_cast, который в С++ использовать вообще не стоит (или стоит крайне редко)?
0
|
|
|
Заблокирован
|
||
| 22.11.2013, 11:18 | ||
|
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 22.11.2013, 11:18 | |
|
newbie666, Но менее типо-безопасно. Хуже искать по тексту. И прочее-прочее-прочее.
0
|
|
|
Заблокирован
|
||
| 22.11.2013, 11:20 | ||
|
не вижу ни какого смысла, вот реально, ни какого профита, использовать эти длинные в плане букв приведения, вместо простых типов в скобках , как по старинке
![]() Добавлено через 1 минуту
0
|
||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||
| 22.11.2013, 11:22 | |||
|
Не по теме: Вот интересно, тема про static vs dynamic, а скатились в reinterpret. Давайте const_cast еще вспомним :) Добавлено через 1 минуту
0
|
|||
|
Заблокирован
|
||
| 22.11.2013, 11:24 | ||
согласен.. ладно...проехали, лучше гляньте мой топик на winapi, может идеи есть у кого
0
|
||
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 24
|
|
| 01.01.2017, 23:18 | |
|
Есть вопрос. Что если имеется несколько функций с одним именем, но разными параметрами, естественно. Как передать нужную в алгоритм for_each в качестве третьего параметра?
static_cast<тип нужной функции>(имя функции) А что считать "типом нужной функции"? Конкретнее: это нужно для функции gl::vertex
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 02.01.2017, 00:46 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 24
|
|
| 02.01.2017, 01:15 | |
|
hoggy, черт, это вы так посты себе набиваете?
Все перегрузки функции gl::vertex, о которой я говорю выше, имеют тип void. Вопрос всё ещё открыт: как передать нужную функцию в алгоритм в качестве параметра, использую static_cast?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||||||||
| 02.01.2017, 02:34 | |||||||||||||
|
Уточнения сигнатуры функции для std::function Добавлено через 1 минуту void - это тип возвращаемого значения функции, а не тип функции. Тип функции, образно говоря, - это сама функция.Вот функция:
1
|
|||||||||||||
| 02.01.2017, 02:34 | |
|
Помогаю со студенческими работами здесь
20
Теряются ли данные при использовании static_cast и dynamic_cast? Чем отличается static_cast от приведения в стиле Си? В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast? Чем отличаются компиляторы? Чем отличаются операторы while и for? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|