C++中?:运算符为什么不能重载?

 我来答
ylgaoyifan
2014-04-18 · TA获得超过1156个赞
知道小有建树答主
回答量:354
采纳率:0%
帮助的人:395万
展开全部

C++标准规定:

8.1 并不是所有的操作符都能被重载。除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载
8.2 重载不能改变该运算符用于内置类型时的函义,程序员不能改隐派变运算符+用于两个int型时的含义。
8.3 运算符函数的参数至少有镇携森一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。
8.4 重载不能改变运算符的优先级。
8.5 重载不能改变运算符的结合律。
8.6 重载不能改变运算符操作数的个数。比如+需要两个操作数,则重载的+也必须要有两个操作数。


可看到,c++之所以不允许重载?:运算符,是考虑到?:运御亩算符的条件特性。

运算符的重载实质是函数的调用

比如 A?B:C

假设重载函数原型  operator ?: (A,B,C)

那么,其跳转性质就不复存在了。


举例说明:

int a=0,b=0;
bool p = true;
p? (a = 10): (b = 10);
//执行结果 a=10 b=0;

转换为函数调用形式

operator ?:(p,a=10,b=10);
//执行结果 a=10 b=10

显然 函数调用不能解决流程控制的问题,所以为了避免程序理解上的偏差,C++标准规定?:不能重载

追问
大神呀,我们老师都不知道呢!谢谢了!
327557006
2014-04-18
知道答主
回答量:48
采纳率:0%
帮助的人:18.3万
展开全部
没有为什么,人家写代码时加个final你就不能重载了。

有可能是人家觉得这个运算符他写的代码很牛b了,不需要你修改了。
还有可能是因为神悄人家不想你李瞎指去重载,怕哪配破坏了编程规则和C++编程习惯之类。

java中的String类型也是不能重载的。没有为什么。就是人家规定的而已。
追问
哦哦,谢谢了
能留个扣扣号吗?以后要多向你请教呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2014-04-18 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2344万
展开全部
这是运算符?!
追问
?:是
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式