Мне любопытно узнать, что происходит при компиляции кода с динамическим преобразованием с отключенным RTTI
(либо с -fno-rtti
в GCC или с / GR-
в Visual Studio). Компилятор «возвращается» к static_cast
? Поскольку (по крайней мере, в VS) он выдает только предупреждение, что будет делать скомпилированный код?
В частности, какие плохие вещи могут произойти, если я скомпилирую без RTTI код, в котором я уверен, что ошибки невозможны с dynamic_cast (т.е. где dynamic_cast
можно безопасно заменить на static_cast
), например:
class A{ /*...*/ } ;
class B : public A {
int foo() { return 42 ;}
} ;
//...
A * myA = new B() ;
int bar = (dynamic_cast<B*>(myA))->foo() ;