Здравствуйте, гость ( Вход | Регистрация )
Алексей1153 | Дата 16.9.2010, 22:38 |
BRE, я такие ошибки не допускаю ) убеждать людей в очевидных вещах - глупая затея. потому что убеждать не надо они ОЧЕВИДНЫЕ. это ты точно заметил )) Поэтому я тебя и не убеждаю. Вообще, сильно отклонились от причины моего возмущения - а причина была такова, что, раз уж известно, что там у него должен лежать QComboBox* , то приводить (QComboBox*)(QWidget*) можно без всяких кастов. |
|
BRE | Дата 16.9.2010, 22:33 |
указатель от родителя к дитю нельзя спокойно приводить, надо при этом сильно волноваться и думать Вот-вот, поэтому лучше сразу подружиться с кастами и пользоваться ими. Тогда компилятор будет сильно помогать не допустить ошибку при преобразовании. |
|
kwisp | Дата 16.9.2010, 22:31 |
не, не аргумент. Мясо давай, мясо )) колиника доктора Верховцева по тебе плачет. ) убеждать людей в очевидных вещах - глупая затея. потому что убеждать не надо они ОЧЕВИДНЫЕ. |
|
Алексей1153 | Дата 16.9.2010, 22:28 |
BRE, ну ты каких-то далёких от реальной жизни извращений набацал )) В которых принято специальные методы в классах делать, в коих вся темнота должна вручную разбираться, без всяких кастов. Я про это и говорю как раз Цитата Спокойно преобразовали ее к типу C, указатель от родителя к дитю нельзя спокойно приводить, надо при этом сильно волноваться и думать открой страуструпа (или любой другой весомый материал) стандарт в конце концов и почитай! не, не аргумент. Мясо давай, мясо )) |
|
DEADHUNT | Дата 16.9.2010, 22:27 |
Мы говорим про указатели, ты хочешь сказать, что мне компилятор не даст так сделать? я такого не говорил, в данном случае компилятор применит reinterpret_cast(как описано выше), имелось ввиду что когда будет возможно применить безопасное преобразование, компилятор его применит(только в тех случаях которые описаны в стандарте) |
|
BRE | Дата 16.9.2010, 22:17 |
в принципе всё контролирует кроме dynamic_cast Мы говорим про указатели, ты хочешь сказать, что мне компилятор не даст так сделать?
Проверь сам. |
|
kwisp | Дата 16.9.2010, 22:11 |
Но пока не увидел убедительных объяснений обязаловки применения каста тфу. ты наверное прикалываешься - открой страуструпа (или любой другой весомый материал) стандарт в конце концов и почитай! |
|
DEADHUNT | Дата 16.9.2010, 22:10 |
Сишное преобразование ничего не контролирует, с его помошью я могу преобразовать 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. |
|
BRE | Дата 16.9.2010, 22:06 |
я вредное, я знаю... Но пока не увидел убедительных объяснений обязаловки применения каста Давай смотреть.
Сишное преобразование ничего не контролирует, с его помошью я могу преобразовать QString к QWidget, последствия правда будут не хорошие. Насчет корректировки адреса указателя. Попробуй с теми же классами выполнить следующие преобразования:
И посмотри как будет меняться указатель. Кстати сишные преобразования тоже так умеют. |
|
kwisp | Дата 16.9.2010, 22:00 |
это не пример. Во первых, АДРЕС не поменяется от этого. Во вторых, для таких случаев должен быть виртуальный деструктор, либо ты уж учитывай, какой тип удаляется и приведи его перед удалением адресс не поменяется, поменяется "значение указателя" ведь он тем или иным способом хранит информацию о ТИПЕ! при приведении типов старым способом компилер должен переберать сначала static_cast если не уместно то reinterpret_cast потом может взять dynamic_cast. чаще всего берется reinterpret_cast не проверяются типы и т.д. т т.п. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 21:33 |