C++重载运算符与实际运算符的优先级问题

探讨了C++中重载运算符与实际运算符在优先级上的差异,通过具体代码示例解释了为何字符串对象与整型变量在相同运算中的不同表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天来讨论有关重载运算符与实际运算符的优先级问题。

下面的代码:

#include<iostream>
#include<cmath>
#include<algorithm>
#include<fstream>
using namespace std;
main()
{
    string a="1",b="2";
    int c=1,d=2;
    cout<<((a=b)=(b=a))<<endl;
    cout<<((c=d)=(d=c))<<endl;
    return 0;
}

输出结果为

1
2

明明代码是一样的,为什么结果不同?
原来,这涉及类重载运算符与实际运算符的差别。

首先,string基于一个类,a和b其实是两个对象,调用了=的重载函数。而int是C++提供的一种数据类型,c和b是两个基础变量,调用了普通运算符。首先,不论a=b还是d=c,返回的都是等号右边的值,所以这里没有问题。

可是,由于一般的计算有优先级关系,c和d的运算中,先计算了c=d(c变为d的值)再计算了d=c(还是d的值),也就相当于d=d的值,返回d的值2。

重载就不同了,它没有优先级关系,a变为b同时b变为原来的a,实际交换了a和b,变成b=原来的a值,返回a值是1。

上述纯属个人观点,如有谬误还请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值