Сравнение регулярного приведения типов, static_cast и dynamic_cast
Суть проблемы:
Я пишу на C и C++ почти двадцать лет, но есть один аспект этих языков, который я никогда не понимал. Я, конечно, использовал обычные преобразования (касты), например:
MyClass *m = (MyClass *)ptr;
Но есть еще два типа приведения типов, и я не знаю, чем они отличаются. В чем разница между следующими строками кода?
MyClass *m = (MyClass *)ptr;
MyClass *m = static_cast<MyClass *>(ptr);
MyClass *m = dynamic_cast<MyClass *>(ptr);
Я пытался найти информацию об этом, но все еще не могу уловить суть. Подскажите, пожалуйста, как правильно использовать static_cast
и dynamic_cast
и в чем их ключевые отличия по сравнению с обычным приведением типов?
Разница между const int*, const int * const и int * const?
Когда следует использовать reinterpret_cast?
Почему код явно вызывает статический метод через указатель, равный null?
Статические глобальные переменные в C++
Что такое ** в C++?