标签:运行 public pre 调试 amp 不同 ret 结果 src
问题原自下面一段代码:
初学C++虚函数表时,以下代码在QT和VS(版本如题)编译结果不同。
1 #include <iostream> 2 using namespace std; 3 4 5 class Demo 6 { 7 public: 8 Demo() 9 { 10 cout << "Demo()" << endl; 11 } 12 virtual ~Demo() 13 { 14 cout << "~Demo()" << endl; 15 } 16 virtual void Fun1() 17 { 18 cout << "Fun1()" << endl; 19 } 20 virtual void Fun2() 21 { 22 cout << "Fun2()" << endl; 23 } 24 virtual void Fun3() 25 { 26 cout << "Fun3()" << endl; 27 } 28 }; 29 30 typedef void(FUN)(); 31 int main() 32 { 33 Demo D1; 34 35 int *p = (int *)&D1; 36 37 FUN * pFun = (FUN *)*((int*)*p + 1); 38 pFun(); 39 40 return 0; 41 }
程序目的是运行Demo类虚函数表第二项。
VS运行成功,QT运行失败。调试了一下,发现如下现象:
VS2015:
QT5:
可见,VS和QT编译运行方式是有差异的,区别在于QT的Demo类的虚函数表的第一第二项都是析构函数,
个人感觉不太符合C++理论常识。
标签:运行 public pre 调试 amp 不同 ret 结果 src
原文地址:https://www.cnblogs.com/kuniioop/p/9286700.html