如何在主要功能之外创建对象?

时间:2019-09-23 04:20:30

标签: c++

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

  • 如何创建类minifyEnabled false的对象a1和调用构造函数?
  • 为什么在A函数外部创建对象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;
}

3 个答案:

答案 0 :(得分:1)

  

对象可以创建第一个外部主要函数的原因

在您的示例中,a1具有全局名称空间范围,并且具有static storage duration
它是在程序启动时构建的,因此您会看到

I am in A class 8

之前打印过

I am in A class 9

答案 1 :(得分:0)

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

答案 2 :(得分:0)

从技术上讲,这取决于实现。

除了a1必须在使用之前构造。

在您的示例中,main()没有使用a1。但是,对于C ++实现,确保在使用a1之前先对其进行构造的一种简单方法是,在main()之前先构造/初始化a1(以及任何具有静态存储空间的非局部非内联变量)。

参考:“由实现定义的是,具有静态存储持续时间的非局部非内联变量的动态初始化是在main的第一条语句之前进行排序还是被延迟。如果延迟,则强烈地发生在任何非初始化odr-使用与要初始化的变量在同一转换单元中定义的任何非内联函数或非内联变量”