Ошибки, баги, вопросы - страница 1891

 
Комбинатор:

Да, старый билд.

Вы вот это потрите, вводит в заблуждение и напрямую противоречит функционированию dynamic_cast

В рамках поднятого примера кастинга в лоб CLASS1 -> CLASS2 все верно сказал. Именно такой кастинг в большинстве случаев люди и имеют в голове.

Кроме того, именно "нельзя приводиться снизу вверх, только сверху вниз" лежит в основе проверки безопасности dynamic_cast.

Те, кто знает что делает, тот понимает суть динамического кастинга.

 
Renat Fatkhullin:

Не забывайте обновляться на последние билды. Я сейчас тестируюсь на 1598, который выкладывался недавно в виде зипов в этой ветке вроде.

Компилятор и исполнитель в каком exe-файле сидит?

Сейчас в MT4b1080 идет MEb1599. Прошу пояснить, что делает metaeditor.exe и terminal.exe.

 
fxsaber:

Компилятор и исполнитель в каком exe-файле сидит?

Сейчас в MT4b1080 идет MEb1599. Прошу пояснить, что делает metaeditor.exe и terminal.exe.

Компилятор для обоих платформ единый. Он в metaeditor.exe
 
Renat Fatkhullin:
Компилятор для обоих платформ единый. Он в metaeditor.exe
А исполнитель, который проверяет тот же dynamic_cast, в terminal.exe ?
 
fxsaber:
А исполнитель, который проверяет тот же dynamic_cast, в terminal.exe ?
Конечно
 
Renat Fatkhullin:
Еще такой вопрос
 
fxsaber:
Еще такой вопрос
Работа протектора.
 
Renat Fatkhullin:
Работа протектора.
если шутка то смешно )) а если нет, то объясните пожалуйста что такое протектор в программировании
 
Konstantin:
объясните пожалуйста что такое протектор в программировании
та штука из-за которой декомпиляторы пропали
 
Renat Fatkhullin:

Да, вот пример, демонстрирующий ваш вопрос:

и вывод:

Сначала проверяем неразрешенный кастинг снизу вверх и получаем NULL. Все верно.

Потом создаем объект CLASS2, присваиваем ссылку на него родительскому классу (тут важно понять, что в динамике среда знает, что исконный тип объекта CLASS2 - это хранится в его метаинформации). Далее (как раз ваш вопрос) динамически кастим (с проверкой права преобразования на основе метаинформации исходного объекта) из ссылки CLASS1 в CLASS2.

Проверяем результат кастинга и прописываем в переменную i = 1. В финале выводим значение i, обращаясь к исходно созданному объекту.

Все работает верно и по спецификации (включая dynamic_cast спеку самого C++).

Спасибо за разъяснение, теперь по приведению типов в MQL вроде понятно )) Но не понятно тогда зачем создан dynamic_cast, если снизу вверх мы не можем приводить в любом случае, а сверху вниз мы можем обойтись и без dynamic_cast? Может есть какие тонкости тут и я их не понял?