Я писал оператор == между двумя видами интеллектуальных указателей и подумал, что мне нужно выполнить быструю проверку работоспособности. Я удивлен результатом ...
В приведенном ниже фрагменте кода получается, что все варианты f и b имеют одинаковое значение?
struct Foo {
int x;
};
struct Bar : public Foo {
int y;
};
#include <iostream>
int main ()
{
Bar bar;
Foo * f = &bar;
Bar * b = &bar;
std :: cout << f << " " << b << " " << (f == b) << "\n";
void * fv = f;
void * bv = b;
std :: cout << fv << " " << bv << " " << (fv == bv) << "\n";
int fi = reinterpret_cast <int> (f);
int bi = reinterpret_cast <int> (b);
std :: cout << fi << " " << bi << " " << (fi == bi) << "\n";
}