【发布时间】:2014-06-17 19:44:08
【问题描述】:
在做一些 c++ 练习时,我发现了一个与多继承和强制转换相关的有趣示例。
我不知道为什么
reinterpret_cast<char*>(b1) is not equal reinterpret_cast<char*>(b2).
这是一个简单的程序,我在上面提到过:
#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 d;
A *b1 = &d;
B *b2 = &d;
const int a = (reinterpret_cast<char*>(b1) == reinterpret_cast<char*>(&d)) ? 1 : 2;
const int b = (b2 == &d) ? 3 : 4;
const int c = (reinterpret_cast<char*>(b1) == reinterpret_cast<char*>(b2)) ? 5 : 6;
std::cout << a << b << c << std::endl;
return 0;
}
您能否为此主题提供任何 cmets 以帮助我弄清楚为什么当 reinterpret_cast(b1) 等于 reinterpret_cast(&d) 时 reinterpret_cast(b1) 不等于 reinterpret_cast(b2)?
【问题讨论】:
-
更改继承 A 和 B 的顺序,并检查结果。这是否有助于您了解正在发生的事情?
标签: c++ inheritance casting reinterpret-cast