有人會好心解釋爲什麼下面的代碼工作,我已經測試了它在Visual Studio .NET 2008上,g ++上Cygwin和ideone.com。更重要的是,我想知道它是否有效。請注意,A
和B
是不相關的類型。reinterpret_cast和無關的類型之間的虛擬
編輯:以下@ leftaroundabout的評論我做了如下改變我的代碼
#include <iostream>
#include <cstdlib>
class A
{
public:
virtual void Bar()
{
std::cout << "A::Bar() -> " << this << std::endl;
}
virtual void Foo()
{
std::cout << "A::Foo() -> " << this << std::endl;
}
};
class B
{
public:
virtual void Foo()
{
std::cout << "B::Foo() -> " << this << std::endl;
}
};
int main()
{
B* b = reinterpret_cast<B*>(new A);
b->Foo();
return EXIT_SUCCESS;
}
程序輸出消息:
A::Bar() -> 0x9806008
基本上第一個虛擬方法,無論叫的是什麼調用。
我想它甚至在您將'A :: Foo'重命名爲'A :: Bar'並將所有其他事物保持原樣時「工作」? – leftaroundabout 2012-03-27 10:51:22
http://www.google.com.ua/search?client=opera&rls=zh-CN&q=reinterpret_cast&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest – Alecs 2012-03-27 10:53:11