C 运算符中不能重载的有:1、条件运算符“?:”;2、成员访问运算符“.”;3、域运算符“::”;4、长度运算符“sizeof”;5、成员指针访问运算符“->*”和“.*” 。

重载:让操作符可以有新的语义,而不是更改语法,否则会引起混乱。

重载的部分规则:运算函数的参数至少有一个必须是类的对象或者是类的对象的引用。

而C 中不能重载的运算符有5个,分别为:

“?:”(条件运算符)

“.”(成员访问运算符)

“::”(域运算符)

“sizeof”(长度运算符)

“->*”和“.*” (成员指针访问运算符)

那么这几个运算符为什么不能进行重载?原因介绍:

(1)“?:”

假设可以重载,那么我们来看下列的代码:

exp1 ? exp2 : exp3
该运算符的含义是执行exp2和exp3中的一个,假设重载了,就不可以保证执行一个还是两个,还是都没执行,该运算符的跳转性质就不复存在了。所以,“?:”不能被重载。

(2)“.”

假设可以重载,我们可以假设一种情况,创建一个对象,调用该对象的函数。

class Y{
public:
void fun();
};
class X{
public:
Y* p;
Y& operator.(){
return *p;
}
void fun();
}
void g(X& x){
x.fun();
}

这个例子中,x.fun()就不知道是调用哪一个fun函数了。 
“.”运算符的含义是引用对象成员,然而被重载后就不能保证了,导致运算符意义的混淆。

(3)“::”

该运算符只是在编译的时候域解析,而没有运算参与。根据重载的规则,如果重载该运算符,就赋予了新的语义,可能会出现混淆。

(4)“sizeof”

不能被重载的原因主要是内部许多指针都依赖sizeof。

(5)“->*”和“.*”

引用指向类成员的指针

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C 运算符中不能重载的是哪些相关推荐

  1. c++重载运算符_Chapter13:重载——入门(一)

    一.走进重载 所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloadin ...

  2. c++运算符的全局重载

    今天在看候捷的那本stl的时候,第二章有这么一段话 注意,由于*iter != value来检查元素值是否吻合,但是本例中value的数据类型是 int,iter的类型是ListItem<int ...

  3. 【C++】C++中函数重载的理解

    我们在平时写代码中会用到几个函数但是他们的实现功能相同,但是有些细节却不同.例如:交换两个数的值其中包括(int, float,char,double)这些个类型.在C语言中我们是利用不同的函数名来加 ...

  4. C++中的重载、覆盖、隐藏对比

    1.重载.重写(覆盖).隐藏三者概念解释 重载(overload):同一个可访问区域内被声明的几个具有不同参数列(参数的类型.个数.顺序不同)的同名函数.根据参数列表,最终确定调用哪个函数,重载不关心 ...

  5. 谈谈C++继承中的重载,覆盖和隐藏

    写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能 翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的 ...

  6. 运算符中,优先级高低总结。

    运算符中,优先级高低总结.

  7. Delphi中静态方法重载还是覆盖的讨论

    Delphi中静态方法重载还是覆盖的讨论 新人学习Delphi的时候,容易搞不懂的一个问题,当子类方法和基类方法同名,并且参数也一样的时候,叫做什么呢?是覆盖,还是重载呢? 答案是隐藏父类方法. 一般 ...

  8. Java中方法重载和方法重写的区别

    文章目录 1 Java中方法重载和方法重写的区别 1 Java中方法重载和方法重写的区别 主要区别如下: 方法重载: 在同一个类中 方法名相同 参数个数.顺序.类型不同 返回值类型.访问修饰符任意 方 ...

  9. python中函数重载和重写

    python 中的重载 在python中,具有重载的思想却没有重载的概念.所以有的人说python这么语言并不支持函数重载,有的人说python具有重载功能.实际上python编程中具有重载的目的缺无 ...

最新文章

  1. loadrunner 如何做关联
  2. 腾讯云主机安全防护(云镜卸载)--/usr/local/qcloud/YunJing/YDEyes/YDService
  3. ADO.NET 快速入门(一):ADO.NET 概述
  4. worktools-源码下拉问题
  5. ios找不到信任证书_ios信任苹果企业级应用
  6. 船舶双向曲率板曲率可视化研究
  7. tomcat的三种部署方式
  8. 国内首本免费深度学习书籍!还有人没Get么?
  9. Unity 协程原理探究与实现
  10. matlab win10 gpu加速,win10的Edge浏览器设置GPU硬件加速,大幅度提升浏览器性能
  11. JAVA和C++内部类
  12. 消息中间件学习总结(22)——MQ 面试专题
  13. BZOJ 2469 [中山市选2010]简单数谜
  14. Python使用Telnetlib模块实现telnet远程操作
  15. 在线格式化mysql_SQL在线美化 | SQL格式化 | SQL压缩 —在线工具
  16. linux 文件名加粗,konsole与用粗体绘制强调色
  17. 计算机笔记--【JVM】
  18. python画图入门——for循环及调色盘的应用
  19. 音乐 美术 劳技 计算机教研组工作总结,综合教研组教学工作总结
  20. vmware中linux连接不上wifi

热门文章

  1. 通过Spring Integration消费Twitter Streaming API
  2. 使用Spring Boot 2.0的Spring Security:保护端点
  3. 在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南
  4. Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法
  5. java文件和xml文件_用Java分割大型XML文件
  6. 在Java中使用Google的协议缓冲区
  7. Spring Boot –适合您的靴子!
  8. 继承Javadoc方法注释
  9. 在JConsole和VisualVM中查看DiagnosticCommandMBean
  10. 设计模式的Java 8 Lambda表达式–命令设计模式