小编MiC*_*MiC的帖子

当构造函数在VS2013中调用自身时会发生什么?

class IA
{
   public:
   virtual void Print() = 0;
}
IA* GetA();

class A : public IA
{
   public:
   int num = 10;
   A()
   {
     GetA()->Print();
   }
   void Print()
   {
     std::cout << num << std::endl;
   }
}

IA* GetA()
{
   static A a;
   return &a;
}

int main()
{
   GetA();
   std::cout << "End" << std::endl;
   getchar();
   return 0; 
}
Run Code Online (Sandbox Code Playgroud)
  1. 显然,A类的构造函数调用自身.
  2. "静态A"将陷入循环中.
  3. 在VS2013上,此代码可以从循环中取出并在控制台上打印"结束".
  4. 在VS2017上,此代码卡在循环中.

    **VS2013为此代码做了什么?

c++ visual-studio-2013 visual-studio-2017

15
推荐指数
1
解决办法
1368
查看次数