![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
ДжэкИФ, в случае сложного типа ты не сможешь отменить константность и сделать прочие опасные преобразования
В принципе, кастить c-cast'ом противопоказанно в шаблонном коде, когда ты не знаешь, что из себя представляет T. В других же случаях можно, но я не рекомендую - плохой стиль, плохая привычка -------------------- 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 |
Это как же? Функциональный каст делает абсолютно те же преобразования, что и C-каст, просто синтаксис другой. Ну, тогда тебе надо было записать
Так сказать, вариант специально для слепых |
|||
|
||||
| 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 |
||||
|
|||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
А где ты тут видишь функциональный каст? Вот так
можно. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Сранно, сранно... Добавлено через 29 секунд Ой, извините, дважды букву "т" пропустил -------------------- 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 |
После того, что я увидел, как работает С-каст в в случае приведения вниз по иерархии - никогда не выдаёт ошибки, но в случае неправильного типа возвращает, вообще говоря, мусорный указатель - не хочу больше такого потенциального гемора.
|
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Точно так же отработает и функциональное преобразование, которое ты выше использовал, ибо в случае одного аргумента это почти то же самое, что C-каст. Добавлено через 53 секунды А чего странного-то? |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
А ты букву "т" убери Добавлено через 44 секунды JackYF, а можно пример, где получится мусор при приведении вниз по иерархии? -------------------- 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 |
пожалуйста:
В результате выводится значения совсем левых мест памяти, а не C::c1, C::c2, что логично следует данного кода. Добавлено через 24 секунды а dynamic_cast<> вернул бы 0. Добавлено через 1 минуту и 32 секунды нет. Оно вернёт 0. И я могу это проверить. А при любой попытке обратиться, если я забуду (надо же) проверить программа упадёт в кору. |
||||
|
|||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Так Джеки, я сразу подчеркнул, что я говорю про сложные типы. Про указатели и прочие примитивные типы речи не шло - с ними и так всё понятно: ТАБУ.
А вот со сложными типами никаких опасных преобразований сделать невозможно. Под сложными я понимаю все пользовательские типы, кроме перечислений. Опять же, если код шаблонный, то ты просто пессемизируешь и полагаешь, что T - примитивный тип, соответственно никаких c-кастов не используешь. Если же ты точно знаешь с каким типом работаешь, то можешь пользоваться как тем, так и другим, но тут есть очень опасные грабли - ты можешь по привычке случайно воспользоваться c-кастом. Тогда капздец. Вот именно поэтому я рекомендую ими не пользоваться вообще и не пользуюсь сам. Правда, то что ф-циональный каст есть по сути то же, что и c-каст - для меня это, мягко говоря открытие... -------------------- 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 |
||||
|
||||
| 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 |
|||
|
||||
| UnrealMan |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Какой ещё ноль? Ты несколькими постами ранее написал такой код:
CSpecSizeModel(i) - это явное преобразование в функциональной нотации. (CSpecSizeModel)i - это будет явное преобразование в cast-нотации. Оба эти преобразования эквивалентны. Только в случае с cast-нотацией здесь не надо будет ничего обрамлять дополнительными скобками, чтобы компилятор не считал ans функцией, на что я и указал.
Да шо вы говорите? Вот это
видимо, неправильное преобразование? Это сообщение отредактировал(а) UnrealMan - 9.12.2007, 14:03 |
||||||||
|
|||||||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
dynamic_cast<...> в случае неправильного приведения вниз по иерархии по указателю вернёт NULL, по ссылке - std::bad_cast. а C-каст и в том, и в том случае просто вернёт неправильные указатель/ссылку. Хорошо. Ещё по ссылке. Да, такой оператор неверен. Он не должен скомпилироваться.
Это вообще-то в данном случае вызов конструктора. |
|||
|
||||
| UnrealMan |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Да шо вы говорите?
А вот что по этому поводу говорит стандарт:
CSpecSizeModel(i) - это явное преобразование в функциональной нотации, выполняемое при помощи конструктора. Это сообщение отредактировал(а) UnrealMan - 9.12.2007, 16:07 |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |