Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在执行main()之前实例化类的对象_C++ - Fatal编程技术网

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

C++ 在执行main()之前实例化类的对象,c++,C++,在main()执行之前,是否可以实例化类的对象?如果是,如何执行此操作?全局对象是在调用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"; } 结构ABC{ ABC(){ 是

在main()执行之前,是否可以实例化类的对象?如果是,如何执行此操作?

全局对象是在调用
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";
}
结构ABC{ ABC(){
是的,你可以这样做:

#include <iostream>

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

X x;

int main( int argc, char ** argv ) {
    std::cout << "main()\n";
}
#包括
结构X{

X(){std::cout这是如何工作的?执行不是从main()开始的吗?你能解释一下吗?@Shree:不。全局变量(和其他一些)必须在
main()之前创建,因为它们必须在
main()
启动时可用。因此必须在
main()之前调用它们的构造函数
。这有保证吗:"具有静态存储持续时间的非局部变量的动态初始化是否在main的第一条语句之前完成是由实现定义的。如果初始化延迟到main的第一条语句之后的某个时间点,则初始化应在同一翻译语句中定义的任何函数或变量首次使用之前进行nit作为要初始化的变量。另请参阅3.6.2/3,在我看来,它也可以接管,而's'构造函数甚至可能不是called@Chubsdad:对于在不同于
main
本身的TU中定义的全局变量,您是对的-它们的初始化可能会延迟。但是在Prasoon的示例中,当然
s
必须初始化“首次使用同一翻译单元中定义的任何函数或变量之前”,因此在输入
main
之前。