Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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++ 为什么构造函数没有被调用_C++_Static - Fatal编程技术网

C++ 为什么构造函数没有被调用

C++ 为什么构造函数没有被调用,c++,static,C++,Static,在这个程序中,“一个被调用的构造函数”打印了2次。我的疑问是为什么“A的构造函数”没有打印 A b = B::getA(); 在打印时 A a; 在这两种情况下,我们都在创建一个新对象 这是我的节目: #include <iostream> using namespace std; class A { public: A() { cout << "A's constructor called " << endl; } }; clas

在这个程序中,“一个被调用的构造函数”打印了2次。我的疑问是为什么“A的构造函数”没有打印

A b = B::getA(); 
在打印时

A a;
在这两种情况下,我们都在创建一个新对象

这是我的节目:

#include <iostream>
using namespace std;

class A
{
    public:
    A() { cout << "A's constructor called " << endl;  }
};

class B
{
    static A a;
    public:
    B() { cout << "B's constructor called " << endl; }
    static A getA() { return a; }
};

A B::a;  // definition of a

int main()
{
    A a; 
    A b = B::getA();
    return 0;
}
#包括
使用名称空间std;
甲级
{
公众:

A(){cout当创建
B
中的静态
A
时,在程序启动时调用第一个构造函数

在堆栈上分配时,在
main
中调用第二个构造函数


不再调用默认的
A
构造函数。当您调用
getA()
时,将使用一个副本构造函数,正如您没有定义的那样,它将由编译器提供。

B
中的静态
A
被创建时,程序启动时将调用第一个构造函数

A b = B::getA();
在堆栈上分配时,在
main
中调用第二个构造函数

不再调用默认的
A
构造函数。当您调用
getA()
时,将使用一个副本构造函数,正如您没有定义的那样,它将由编译器提供

A b = B::getA();
这将使用复制构造函数初始化
b
。您只跟踪默认构造函数,此处未使用该构造函数。如果您也想跟踪复制构造函数,则需要提供一个:

A(A const &) { cout << "A's copy constructor called " << endl; }
A(常数&){cout
这将使用复制构造函数初始化
b
。您只跟踪默认构造函数,此处未使用该构造函数。如果您也想跟踪复制构造函数,则需要提供一个:

A(A const &) { cout << "A's copy constructor called " << endl; }

A(const&){cout因为
getA()
调用了一个拷贝构造函数,您还没有编写,所以会调用默认构造函数。

因为
getA()
调用了一个拷贝构造函数,您还没有编写,所以会调用默认构造函数。

一个构造函数会被调用为“static A A A”和“A B::A”即,作为B类成员的a的静态初始化


在C++程序执行过程中,C++首先对全局变量和静态变量进行初始化。

< P>一个结构被称为“静态A”和“A B:A”。

在C++程序执行过程中,C++首先对全局变量和静态变量进行初始化。