初始化与赋值的不同

文章详细解析了C++中的一行初始化与两行赋值的区别,强调了构造函数在初始化中的角色,以及何时会调用拷贝构造函数。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <cstring>
using namespace std;
 
class ClassTest
{
public:
ClassTest()
{
c[0] = '\0';
cout<<"ClassTest()"<<endl;
}
ClassTest& operator=(const ClassTest &ct)
{
strcpy(c, ct.c);
cout<<"ClassTest& operator=(const ClassTest &ct)"<<endl;
return *this;
}
ClassTest(const char *pc)
{
strcpy(c, pc);
cout<<"ClassTest (const char *pc)"<<endl;
}
// private:
ClassTest(const ClassTest& ct)
{
strcpy(c, ct.c);
cout<<"ClassTest(const ClassTest& ct)"<<endl;
}
private:
char c[256];
};
 
int main()
{
cout<<"ct1: ";
ClassTest ct1("ab");
cout<<"ct2: ";
ClassTest ct2 = "ab";
cout<<"ct3: ";
ClassTest ct3 = ct1;
cout<<"ct4: ";
ClassTest ct4(ct1);
cout<<"ct5: ";
ClassTest ct5 = ClassTest();
cout << "ct6: ";
ClassTest ct6;
ct6 = ct5;
return 0;
}

结果:
在这里插入图片描述
结论(个人理解):
1、在一行的为初始化操作,在两行的为赋值操作,如ct6。
2、初始化时有拷贝和构造的概念,赋值时理解成调用赋值运算符。
2、初始化时看看需不需要构造,需要构造则调用构造函数,初始化时看看是否发生拷贝,发生拷贝不一定调用拷贝构造函数,此时还要看一下是否发生构造,若发生构造则只调用构造函数,因为拷贝构造被编译器优化掉了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值