Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как соотносятся синтаксис static_cast со старым? 
:(
    Опции темы
Dims
Дата 9.11.2007, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 1
Всего: 11



Раньше для преобразования типов требовалось в скобочках просто указать нужный тип. А теперь появились какие-то static_cast и другие. Как они соотносятся со старым синтаксисом?
PM MAIL   Вверх
UnrealMan
Дата 9.11.2007, 04:04 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Долго рассказывать. Поищи стандарт и посмотри п.п. 5.2.3, 5.2.7, 5.2.9 - 5.2.11 и 5.4.
PM MAIL   Вверх
Lazin
Дата 9.11.2007, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



в 2х словах:
static_cast - обычные преобразования, например downcast указателей на объекты, или например от int к unsigned int.
reinterpret_cast - опасные преобразования, нарушающие правила преобразования типов, например преобразование из float в char или из указателя в целое число и-тд
dynamic_cast - преобразование указателя от базового типа к производному (upcast)
PM MAIL Skype GTalk   Вверх
JackYF
Дата 9.11.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



+ const_cast. Опасное преобразование, отменяющее константность типа.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
UnrealMan
Дата 9.11.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Lazin @  9.11.2007,  08:15 Найти цитируемый пост)
reinterpret_cast - опасные преобразования, нарушающие правила преобразования типов, например преобразование из float в char

Из float в char reinterpret_cast не переводит.

Цитата(Lazin @  9.11.2007,  08:15 Найти цитируемый пост)
dynamic_cast - преобразование указателя от базового типа к производному (upcast)

Это называется down-cast-ом. И от производного к базовому тоже можно приводить.

Цитата(JackYF @  9.11.2007,  13:26 Найти цитируемый пост)
+ const_cast. Опасное преобразование, отменяющее константность типа. 

Им можно не только отменять константность, но и добавлять тоже.
PM MAIL   Вверх
Lazin
Дата 9.11.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(UnrealMan @  9.11.2007,  13:46 Найти цитируемый пост)
Это называется down-cast-ом. И от производного к базовому тоже можно приводить.

downcast - это от производного к базовому, и его в большинстве случаев можно вообще без cast-a делать.
Цитата(UnrealMan @  9.11.2007,  13:46 Найти цитируемый пост)
Из float в char reinterpret_cast не переводит

пардон, в этом случае работает static_cast
PM MAIL Skype GTalk   Вверх
Dims
Дата 9.11.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 1
Всего: 11



А какой из этих кастов полностью соответствует старому?
PM MAIL   Вверх
SaDFromSpb
Дата 9.11.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



Dims, об этом лучше всего у Страуструпа почитай. Там про приведение типов - это почти в самом начале. Не очень удачная мысль - спрашивать на форуме такие базовые вещи, которые легко находятся в любом нормальном учебнике ...



--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
UnrealMan
Дата 9.11.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Lazin @  9.11.2007,  14:10 Найти цитируемый пост)
downcast - это от производного к базовому

С каких пор?

Цитата(Dims @  9.11.2007,  14:44 Найти цитируемый пост)
А какой из этих кастов полностью соответствует старому? 

Никакой.
PM MAIL   Вверх
Dims
Дата 9.11.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 1
Всего: 11



Цитата(UnrealMan @  9.11.2007,  16:45 Найти цитируемый пост)
Цитата
А какой из этих кастов полностью соответствует старому?

Никакой. 

А почему? Как так может быть?

PM MAIL   Вверх
JackYF
Дата 9.11.2007, 23:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Dims @  9.11.2007,  23:00 Найти цитируемый пост)
Как так может быть?

Самый дельный совет - прочитай литературу.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Dims
Дата 10.11.2007, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 1
Всего: 11



Цитата(JackYF @  9.11.2007,  23:27 Найти цитируемый пост)
Самый дельный совет - прочитай литературу. 

А я, вот, хотел бы на форуме прочитать.

PM MAIL   Вверх
Fazil6
Дата 10.11.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Dims @  9.11.2007,  23:00 Найти цитируемый пост)
А почему? Как так может быть?

потому, что преобразование в старом стиле реализуется в С++ комбинацией static_cast, reintepret_cast и const_cast. В каждом конкретном случае компилятор решает что ему нужно сделать. Поэтому приведения в старом стиле и не рекомендуется делать ибо не ясно что конкретно компилятор в этом месте делает
PM MAIL   Вверх
Alek86
Дата 10.11.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Dims @  10.11.2007,  05:24 Найти цитируемый пост)
А я, вот, хотел бы на форуме прочитать.


на форуме обычно спашивают, если не могут сами разобраться.
ты, по-видимому, просто не хочешь.
хочешь чтоб мы все разжевали и тебе в клюв засунули.
думаю, на это мало кто согласится


--------------------
user posted image    user posted image
PM MAIL   Вверх
UnrealMan
Дата 10.11.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Fazil6 @  10.11.2007,  10:20 Найти цитируемый пост)
преобразование в старом стиле реализуется в С++ комбинацией static_cast, reintepret_cast и const_cast. В каждом конкретном случае компилятор решает что ему нужно сделать.

Для каждого случая стандарт чётко описывает, какое преобразование - const_cast, static_cast, static_cast followed by const_cast, reinterpret_cast или reinterpret_cast followed by const_cast - должно выполняться приведением в старом стиле.



PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.