Сравнение регулярного приведения типов, 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?
Почему следует использовать указатель вместо самого объекта?
Когда использовать виртуальные деструкторы?
Какова разница между 'typedef' и 'using'?
Циклы в программном обеспечении для семейных деревьев