Я ожидал, что этот код, чтобы напечатать '1' Same и 'Same2', но печатает только 'Same1':TypeId для полиморфных типов
#include <iostream>
#include <typeinfo>
using namespace std;
struct C{virtual ~C(){}};
struct D : C{};
int main(){
D d;
C c, &cr1 = d;
if(typeid(cr1) == typeid(D)) cout << "Same1";
if(typeid(&cr1) == typeid(D*)) cout << "Same2";
}
Оба § 5.2.8/2 и § 5,3. 1/3, кажется, подсказывают мне, что «Same2» должен быть напечатан.
Что и где поймать?
Вы имели в виду 'C c, * cr1 = & d'? –
@dark_charlie: Это в основном просто перемещает адрес оператора двумя строками вверх. Вы получите тот же результат, даже если бы вы написали 'typeid ((C *) & d)'. – MSalters
@MSalters: Ах, nvm меня, я просто не могу читать. –