![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
kwisp |
![]()
Сообщение
#21
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
это не пример. Во первых, АДРЕС не поменяется от этого. Во вторых, для таких случаев должен быть виртуальный деструктор, либо ты уж учитывай, какой тип удаляется и приведи его перед удалением адресс не поменяется, поменяется "значение указателя" ведь он тем или иным способом хранит информацию о ТИПЕ! при приведении типов старым способом компилер должен переберать сначала static_cast если не уместно то reinterpret_cast потом может взять dynamic_cast. чаще всего берется reinterpret_cast не проверяются типы и т.д. т т.п. |
|
|
BRE |
![]()
Сообщение
#22
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
я вредное, я знаю... Но пока не увидел убедительных объяснений обязаловки применения каста ![]() Давай смотреть. ![]()
Сишное преобразование ничего не контролирует, с его помошью я могу преобразовать QString к QWidget, последствия правда будут не хорошие. Насчет корректировки адреса указателя. Попробуй с теми же классами выполнить следующие преобразования:
И посмотри как будет меняться указатель. Кстати сишные преобразования тоже так умеют. ![]() |
|
|
DEADHUNT |
![]()
Сообщение
#23
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
Сишное преобразование ничего не контролирует, с его помошью я могу преобразовать QString к QWidget, последствия правда будут не хорошие. в принципе всё контролирует кроме dynamic_cast Цитата 5.4 Explicit type conversion (cast notation) [expr.cast] 1 The result of the expression (T) cast-expression is of type T. The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type; otherwise the result is a prvalue. [ Note: if T is a non-class type that is cv-qualified, the cv-qualifiers are ignored when determining the type of the resulting prvalue; see 3.10. — end note ] 2 An explicit type conversion can be expressed using functional notation (5.2.3), a type conversion operator (dynamic_cast, static_cast, reinterpret_cast, const_cast), or the cast notation. cast-expression: unary-expression ( type-id ) cast-expression 3 Any type conversion not mentioned below and not explicitly defined by the user (12.3) is ill-formed. 4 The conversions performed by — a const_cast (5.2.11), — a static_cast (5.2.9), — a static_cast followed by a const_cast, — a reinterpret_cast (5.2.10), or — a reinterpret_cast followed by a const_cast, поэтому возможно придумать некоторый пример с полиморфными классами где будет применён reinterpret_cast. |
|
|
kwisp |
![]()
Сообщение
#24
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#25
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
DEADHUNT |
![]()
Сообщение
#26
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
Мы говорим про указатели, ты хочешь сказать, что мне компилятор не даст так сделать? я такого не говорил, в данном случае компилятор применит reinterpret_cast(как описано выше), имелось ввиду что когда будет возможно применить безопасное преобразование, компилятор его применит(только в тех случаях которые описаны в стандарте) Сообщение отредактировал DEADHUNT - 16.9.2010, 22:28 |
|
|
Алексей1153 |
![]()
Сообщение
#27
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
BRE, ну ты каких-то далёких от реальной жизни извращений набацал )) В которых принято специальные методы в классах делать, в коих вся темнота должна вручную разбираться, без всяких кастов. Я про это и говорю как раз
Цитата Спокойно преобразовали ее к типу C, указатель от родителя к дитю нельзя спокойно приводить, надо при этом сильно волноваться и думать ![]() открой страуструпа (или любой другой весомый материал) стандарт в конце концов и почитай! не, не аргумент. Мясо давай, мясо )) Сообщение отредактировал Алексей1153 - 16.9.2010, 22:29 |
|
|
kwisp |
![]()
Сообщение
#28
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#29
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#30
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
BRE, я такие ошибки не допускаю )
убеждать людей в очевидных вещах - глупая затея. потому что убеждать не надо они ОЧЕВИДНЫЕ. это ты точно заметил )) Поэтому я тебя и не убеждаю. Вообще, сильно отклонились от причины моего возмущения - а причина была такова, что, раз уж известно, что там у него должен лежать QComboBox* , то приводить (QComboBox*)(QWidget*) можно без всяких кастов. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 8.7.2025, 1:54 |