![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Однозначного ответа на этот вопрос нет. Когда архитектура позволяет, то да. Когда требование к производительности, по постараюсь сделать так, чтобы архитектрура позволяла. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ну что ж... каждому своё мнение
|
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Почему? И главное - почему именно в плюсах? Я не спорю, что зачастую лучше от него отказаться, но каким-то правилом это делать не стоит Ну, всё же на мой взгляд динамик нужен достаточно часто. Конст и реинтерпрет - либо изврат, либо врапперы над чисто сишными библиотеками. Хотя, в некоторых случаях, если я уверен в кастинге, конечно, предпочту статик динамику - в силу перформанса. Хотя, если честно, чаще использую qobject_cast, чем динамик (это, конечно, не одно и то же, но динамик в чистом виде мне редко нужен) Всмысле перписывать? На что? Или перепроектировать? Ну, вообще, по-моему вначале речь шла про: 1. Равны ли c-cast b functional cast. 2. Нужны ли они. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ну вот и я об этом. Каждый отказ - лишний кирпич в фундамент безопасности программы. |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Может вопрос не в тему, но раз упомянули - данную книгу нашел, нужно самообразовываться тут Это сообщение отредактировал(а) Random13 - 10.12.2007, 01:34 |
|||
|
||||
| Lazin |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Что не пост-то откровение В твоем приведении типа выполняется приведение вверх по иерархии, а не вниз, а это делать можно только если ты точно знаешь тип объекта, который приводишь. А вниз по иерархии(от производного к базовому) можно приводить в любом случае.
Причем указатели pa и pb будут естественно указывать на разные области памяти |
||||||
|
|||||||
| UnrealMan |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Я уже сказал - скорость выполнения. Есть много способов
Это совсем не очевидное следствие.
Вопрос: откуда исходит эта возможность? Хочешь, я тебе сейчас докажу, что передавать аргумент по ссылке в функцию push_back вектора неправильно? Рассмотрим пример
Здесь мы тоже можем получить мусор. Ошибка не очевидная - в глаза не бросается, нужно вдаваться в детали работы вектора, чтобы понять её суть и причину. Если бы передача аргумента была по значению, то никакой проблемы не было бы.
Опять 25. const_cast может применяться для избежания дублирования кода, reinterpret_cast - для преобразований char * <--> unsigned char *. И это только примеры, которые сразу вспоминаются.
Разговор про dynamic_cast завёл не я, а JackYF. Зачем - это вы у него спросите У тебя какая-то нетрадиционная терминология. Обычно принято считать, что дерево классов растёт сверху вниз. Это сообщение отредактировал(а) UnrealMan - 10.12.2007, 11:25 |
||||||||||
|
|||||||||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Надо-же я всегда себе деревья по другому представлял, для меня вниз по иерархии(downcasting) - это от производного к базовому, в этом случае противоречия нет... А где вы встречали такую терминологию? И кстати причем здесь dynamic_cast? Вот всегда так бывает, начинается все с одной темы, потом обсуждение заходит неизвестно куда)) |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
http://en.wikipedia.org/wiki/Downcasting В литературе |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Я встречал в UML диаграммах. Но по-моему в аппкастинге тоже могут быть проблемы в случае множественного наследования. Там как-то делается уже подзабыл, чтобы вместо общего 2 раза повторяющегося родителя стоял на него поинтер - тогда проблем не будет. Это сообщение отредактировал(а) Random13 - 10.12.2007, 15:23 |
|||
|
||||
| JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
наоборот. Вниз по иерархии - от базового к наследнику. Я принял этот аргумент. Хорошо. Добавляю "имхо". Для меня это почти очевидно.
Как частный случай С-каст vs С++-каст. придётся тебе читать тему сначала |
||||
|
|||||
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
С конст-кастом не поспоришь, но, как у const_cast'а, так и у copy-paste есть как плюсы, так и минусы. Ну а reinterpret - я понимаю, что я обманываю сам себя, но делаю я это посредством двойного статик-каста(где встретил такой способ точно не помню, но там как-то хитро объяснялось, что это гут Это сообщение отредактировал(а) archimed7592 - 10.12.2007, 17:41 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
А почему бы сразу 10 static_cast-ов не вставить? Любое преобразование указателя к указателю через reinterpret_cast можно заменить двумя преобразованиями static_cast cv T1 * → cv void * → cv T2 * но наглядности это коду не прибавит, как хитро ни объясняй. Это сообщение отредактировал(а) UnrealMan - 10.12.2007, 19:30 |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
тут говорится |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
zkv, точно
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |