如何返回一个类的两个对象相加的结果

在编译时,它会返回master_instance_type,就像在使用删除功能sme error一样,返回添加对象的结果。

constexpr Player::Player(const Player&)
iCMS 回答:如何返回一个类的两个对象相加的结果

根据C ++ 17标准(12.8复制和移动类对象)

7如果类定义未明确声明副本 构造函数,一个隐式声明。如果类定义 声明移动构造函数或移动赋值运算符, 隐式声明的副本构造函数定义为Delete;除此以外, 它定义为默认值(8.4)。 以下情况不建议使用: 该类具有用户声明的副本分配运算符或 用户声明的析构函数。

还将移动构造函数定义为已删除,至少是因为明确定义了副本分配运算符。

因此,您需要显式定义operator +形成返回对象所需的副本构造函数。

请注意,类定义还有其他缺点。例如,数据成员name可以等于nullptr。默认构造函数允许这样做。在这种情况下,由于该语句,cppy赋值运算符可以调用未定义的行为

this->name = new char[strlen(temp.name) + 1];
                      ^^^^^^^^^^^^^^^^^

并且字符串文字具有常量字符数组的类型。因此,默认构造函数的第一个参数应声明为类型const char *

本文链接:https://www.f2er.com/1945061.html

大家都在问