这篇博客来看一下构造函数、拷贝构造函数、赋值运算函数的区别和调用时机

class Test{
public:
    //无参构造函数
    Test(){
        printf("Enter ctr!\n");
    }
    //拷贝构造函数
    Test(const Test& other){
        printf("Enter copy!\n");
    }
    //赋值运算函数
    Test& operator= (const Test& other){
        printf("Enter assign!\n");
        return *this;
    }
};

int main(){
    Test a;//调用无参构造函数
    Test b = a;//调用拷贝构造函数,划重点,这里调用的是拷贝构造函数
    Test c(a);//调用拷贝构造函数
    a = b;//调用赋值运算函数
}

不出意外上述程序会输出如下结果:

Enter ctr!
Enter copy!
Enter copy!
Enter assign!

所以Test a;调用的是无参构造函数,Test b = a; Test c(a);调用的是拷贝构造函数,a = b才是调用的赋值运算符!!!