C++中,对于自定义的类比如GCStudent,需要声明并且初始化一个对象。
GCStudent stu;
GCStudent stu1 = stu;
对于第一个stu的声明,系统肯定会去调用系统默认的构造函数。但是对于第二个stu1,系统调用的构造函数并不是系统默认的构造函数,而是调用拷贝构造函数。
但是如果我们这样声明
GCStudent stu;
GCStudent stu1;
stu1 = stu;
这个时候stu1和stu2都调用默认的构造函数,在stu1赋值的时候,调用系统的等号运算符重载。
其原理,一个类的对象必须调用一次构造函数,而且一个运算符肯定不可能出现歧义,因此对于第一种情况,= 号在这里只能调用默认的构造函数,而不能调用赋值运算符。