在main()执行之前实例化类的对象

Shr*_*ree 6 c++

是否有可能以实例的main()执行之前,甚至一个类的对象?如果是,我该怎么办?

Pra*_*rav 7

main()调用之前创建全局对象.

struct ABC {

   ABC () {
      std::cout << "In the constructor\n";
   }
};

ABC s;  // calls the constructor

int main()
{

   std::cout << "I am in main now\n";
}
Run Code Online (Sandbox Code Playgroud)

  • @Shree:不.必须在`main()`之前创建全局(和其他一些)变量,因为当`main()`启动时它们必须是可用的.所以他们的构造函数必须在`main()`之前调用. (3认同)
  • @Chubsdad:你对于在不同的TU中定义的全局变量是正确的,而不是`main`本身 - 它们的初始化可能会延迟.但是在Prasoon的例子中,当然必须在第一次使用在同一翻译单元中定义的任何函数或变量之前初始化`s`,因此在输入`main`之前. (3认同)

Edr*_*ric 5

是的,你可以这样做:

#include <iostream>

struct X {
    X() { std::cout << "X()\n"; }
};

X x;

int main( int argc, char ** argv ) {
    std::cout << "main()\n";
}
Run Code Online (Sandbox Code Playgroud)