Eug*_*gen 1 c++ visual-studio-2012
当IWindow指针明确地ISheet具有没有方法的类的地址时,这样的代码如何正常工作Say?
#include <iostream>
using namespace std;
class IWindow
{
private:
int p;
double f;
public:
void Say() { cout << "Say in IWindow"; }
};
class ISheet
{
public:
void foo() { cout << "ISheet::foo"; }
};
int main()
{
ISheet *sh = new ISheet();
int ptr = (int)sh;
IWindow *w = (IWindow*)ptr;
w->Say();
sh->foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2015中编译时,它运行并执行没有任何问题,但我希望在线获得错误w->Say().这怎么可能?
它的工作原理是全能的未定义行为.您的函数不会尝试访问包含类的任何数据成员,只是写一些东西std::cout,任何人都可以做.
你有效地做了什么
#include <iostream>
void IWindow_Say(void*)
{
std::cout << "Say in IWindow";
}
int main()
{
IWindow_Say(0xdeadbeef); // good luck with that pointer
}
Run Code Online (Sandbox Code Playgroud)
你从未使用过指针(this原来的例子),因此没有观察到任何副作用.