C++ 在执行main()之前实例化类的对象
在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()
之前创建的
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
之前。