如何在主函数之外创建对象?

How object can be created outside main function?

本文关键字:创建对象 函数      更新时间:2023-10-16

我不明白这段代码的输出:

  • 如何创建类A的对象a1并调用构造函数?
  • 为什么对象a1是在main函数之外创建的?
#include<iostream>
using namespace std;     
class A
{
public:
A(int i)
{
std::cout<<"I am in A Class "<< i <<endl;
}
};
A a1(8);
int main()
{
A a(9);
return 0;
}

输出:

I am in A class 8
I am in A class 9
对象

可以首先在主函数之外创建的原因是什么

在您的示例中,a1具有全局命名空间范围并具有静态存储持续时间。
它是在程序启动时构造的,因此你会看到

I am in A class 8

打印之前

I am in A class 9
a1

是一个全局变量。全局变量是在调用main之前构造的。

它在技术上依赖于实现。

除了 a1 必须在使用之前构建

。在你的例子中,main(( 没有使用 a1。 但是,C++实现确保在使用 a1 之前构造 a1 的一种简单方法是在 main(( 之前构造/初始化 a1(以及任何具有静态存储的非局部非内联变量(。

参考:"具有静态存储持续时间的非局部非内联变量的动态初始化是在 main 的第一个语句之前排序还是延迟,这是实现定义的。如果它被推迟,则在与要初始化的变量相同的翻译单元中定义的任何非内联函数或非内联变量的任何非初始化之前都会发生">