прочитайте следующую программу, которая использует reinterpret_cast.Может ли кто-нибудь объяснить, как реинтерпрет-листинг работает в этом коде
#include <iostream>
class A
{
public:
A() : m_i(0) { }
protected:
int m_i;
};
class B
{
public:
B() : m_d(0.0) { }
protected:
double m_d;
};
class C : public A , public B
{
public:
C() : m_c('a') { }
private:
char m_c;
};
int main()
{
C c;
A *pa = &c;
B *pb = &c;
bool z = (reinterpret_cast<char*>(pa) == reinterpret_cast<char*>(pb));
std::cout << z;
return 0;
}
После выполнения этой программы он печатает 0, может кто-нибудь объяснить, почему г приходит ложь в этой программе ??
@R Sahu, почему значение pa и pb приближается к другому. Они имеют одинаковый адрес значения c (& c) – luck
Я не думаю, что 'bool z = (pa == pb);' будет компилироваться, поскольку 'A' и' B' не происходят друг от друга, и поэтому Указатель 'A *' не может быть напрямую сопоставлен с указателем 'B *', не отбрасывая их на общий тип данных, в этом случае 'char *'. –
@RemyLebeau, вы правы. Спасибо что подметил это. –