C++ 为什么构造函数没有被调用
在这个程序中,“一个被调用的构造函数”打印了2次。我的疑问是为什么“A的构造函数”没有打印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
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++首先对全局变量和静态变量进行初始化。