C++中?:运算符为什么不能重载?
3个回答
展开全部
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++标准规定?:不能重载
追问
大神呀,我们老师都不知道呢!谢谢了!
展开全部
没有为什么,人家写代码时加个final你就不能重载了。
有可能是人家觉得这个运算符他写的代码很牛b了,不需要你修改了。
还有可能是因为神悄人家不想你李瞎指去重载,怕哪配破坏了编程规则和C++编程习惯之类。
java中的String类型也是不能重载的。没有为什么。就是人家规定的而已。
有可能是人家觉得这个运算符他写的代码很牛b了,不需要你修改了。
还有可能是因为神悄人家不想你李瞎指去重载,怕哪配破坏了编程规则和C++编程习惯之类。
java中的String类型也是不能重载的。没有为什么。就是人家规定的而已。
追问
哦哦,谢谢了
能留个扣扣号吗?以后要多向你请教呀
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是运算符?!
追问
?:是
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询