mad*_*ada -2 c++ oop constructor class
根据我的理解,我知道当一个对象被实例化时,构造函数被调用一次。但我不明白为什么两个构造函数都被调用而只有一个对象被实例化
#include <iostream>
using namespace std;
#define print(me) cout << me << endl;
class A
{
public:
A() { print("default called"); }
A(int x) { print("paramterized called"); }
};
int main()
{
A a;
a = A(10);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到输出:默认调用参数化调用
在这些行中
A a;
a = A(10);
Run Code Online (Sandbox Code Playgroud)
创建了两个 A 类型的对象。第一个是使用默认构造函数在声明中创建的
A a;
Run Code Online (Sandbox Code Playgroud)
第二个是在表达式 A( 10 ) 中创建的临时对象
a = A(10);
Run Code Online (Sandbox Code Playgroud)
然后使用复制赋值运算符将其分配给已经存在的对象a
。
由于复制省略,您可以通过最初编写来避免使用默认构造函数
A a = A( 10 );
Run Code Online (Sandbox Code Playgroud)
事实上,由于复制省略,它相当于
A a( 10 );
Run Code Online (Sandbox Code Playgroud)
前提是复制构造函数未声明为显式。