c++14.6.2新经典拷贝构造函数和拷贝构造运算符 自用

如果Time类没有重载赋值运算符=,但是有拷贝构造函数。那么在mytime1 = mytime2;这条语句中,编译器是使用默认赋值,还是使用拷贝函数?

如果 Time 类有一个拷贝构造函数但是没有重载赋值运算符 =, 那么在执行 mytime1 = mytime2; 这条语句时,编译器会使用默认的赋值运算符,而不是拷贝构造函数。

拷贝构造函数和赋值运算符虽然都是用来复制对象的,但它们在不同的情境下被调用:

1. 拷贝构造函数是在创建一个新对象时,用另一个对象来初始化这个新对象时被调用的。例如:Time mytime2;

Time mytime1 = mytime2; // 调用拷贝构造函数

2. 赋值运算符是在将一个已经存在的对象赋值给另一个已经存在的对象时被调用的。例如:Time mytime1, mytime2;

mytime1 = mytime2; // 调用赋值运算符

在你的案例中,mytime1 和 mytime2 都是已经存在的 Time 类型的对象,所以使用赋值运算符。由于 Time 类没有重载赋值运算符,编译器会生成一个默认的赋值运算符,这个默认的赋值运算符会逐个成员地将 mytime2 的状态复制给 mytime1。对于类类型成员,如果该成员类型定义了自己的赋值运算符,那么这个运算符会被调用来赋值该成员。对于基本数据类型成员,将会进行简单的值复制。

因此,拷贝构造函数和赋值运算符都是用于复制对象的,但它们的用途和调用时机是不同的。在 mytime1 = mytime2; 这样的赋值表达式中,总是会调用赋值运算符。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值