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