关于C++中重载运算符的细节

假设定义了一个类class A,里面重载了运算符 = ,如下所示,则在调用时会出现以下错误,尤其是在使用优先队列容器时需要重载运算符时,很容易报以下错误。

void operator=(test& t) {		//重载了=,使其能赋值
        this->num1 = t.num1;
        this->num2 = t.num2;
    };

……
priority_queue<test> vt1;
vt1.push(A(1))

但只要稍加修改,加入const,即可成功编译。(参考重载<) 其中第一个const的意思是可以接受const和非const参数,第二个const意思是可以被const参数调用,即可以被const test调用。

void operator=(const test& t){		//重载了=,使其能赋值
        this->num1 = t.num1;
        this->num2 = t.num2;
    };
/*
    这里不能出现void operator=(const test& t) const{this……};因为其中修改了
结构体内部的值,而const参数是不允许被修改的,如果强制执行则会在编译阶段就报错。
*/
bool operator<(const test& t) const{		//重载了<,使其能赋值
        return this->num1 < t.num1;
    };

我推测是priority_queue在执行push的时候,= 默认右边的值是const类型,如果在重载时不加入const,则会出现test = const test,编译器只能找到 test = test,而找不到此转换,于是报错。同样的还有重载>、<等符号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值