dynamic_cast с отключенным RTTI

Мне любопытно узнать, что происходит при компиляции кода с динамическим преобразованием с отключенным 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() ;
23
задан Louen 7 October 2011 в 12:11
поделиться