C 运算符中不能重载的是哪些
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 运算符中不能重载的是哪些相关推荐
- c++重载运算符_Chapter13:重载——入门(一)
一.走进重载 所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloadin ...
- c++运算符的全局重载
今天在看候捷的那本stl的时候,第二章有这么一段话 注意,由于*iter != value来检查元素值是否吻合,但是本例中value的数据类型是 int,iter的类型是ListItem<int ...
- 【C++】C++中函数重载的理解
我们在平时写代码中会用到几个函数但是他们的实现功能相同,但是有些细节却不同.例如:交换两个数的值其中包括(int, float,char,double)这些个类型.在C语言中我们是利用不同的函数名来加 ...
- C++中的重载、覆盖、隐藏对比
1.重载.重写(覆盖).隐藏三者概念解释 重载(overload):同一个可访问区域内被声明的几个具有不同参数列(参数的类型.个数.顺序不同)的同名函数.根据参数列表,最终确定调用哪个函数,重载不关心 ...
- 谈谈C++继承中的重载,覆盖和隐藏
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能 翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的 ...
- 运算符中,优先级高低总结。
运算符中,优先级高低总结.
- Delphi中静态方法重载还是覆盖的讨论
Delphi中静态方法重载还是覆盖的讨论 新人学习Delphi的时候,容易搞不懂的一个问题,当子类方法和基类方法同名,并且参数也一样的时候,叫做什么呢?是覆盖,还是重载呢? 答案是隐藏父类方法. 一般 ...
- Java中方法重载和方法重写的区别
文章目录 1 Java中方法重载和方法重写的区别 1 Java中方法重载和方法重写的区别 主要区别如下: 方法重载: 在同一个类中 方法名相同 参数个数.顺序.类型不同 返回值类型.访问修饰符任意 方 ...
- python中函数重载和重写
python 中的重载 在python中,具有重载的思想却没有重载的概念.所以有的人说python这么语言并不支持函数重载,有的人说python具有重载功能.实际上python编程中具有重载的目的缺无 ...
最新文章
- loadrunner 如何做关联
- 腾讯云主机安全防护(云镜卸载)--/usr/local/qcloud/YunJing/YDEyes/YDService
- ADO.NET 快速入门(一):ADO.NET 概述
- worktools-源码下拉问题
- ios找不到信任证书_ios信任苹果企业级应用
- 船舶双向曲率板曲率可视化研究
- tomcat的三种部署方式
- 国内首本免费深度学习书籍!还有人没Get么?
- Unity 协程原理探究与实现
- matlab win10 gpu加速,win10的Edge浏览器设置GPU硬件加速,大幅度提升浏览器性能
- JAVA和C++内部类
- 消息中间件学习总结(22)——MQ 面试专题
- BZOJ 2469 [中山市选2010]简单数谜
- Python使用Telnetlib模块实现telnet远程操作
- 在线格式化mysql_SQL在线美化 | SQL格式化 | SQL压缩 —在线工具
- linux 文件名加粗,konsole与用粗体绘制强调色
- 计算机笔记--【JVM】
- python画图入门——for循环及调色盘的应用
- 音乐 美术 劳技 计算机教研组工作总结,综合教研组教学工作总结
- vmware中linux连接不上wifi
热门文章
- 通过Spring Integration消费Twitter Streaming API
- 使用Spring Boot 2.0的Spring Security:保护端点
- 在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南
- Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法
- java文件和xml文件_用Java分割大型XML文件
- 在Java中使用Google的协议缓冲区
- Spring Boot –适合您的靴子!
- 继承Javadoc方法注释
- 在JConsole和VisualVM中查看DiagnosticCommandMBean
- 设计模式的Java 8 Lambda表达式–命令设计模式