EasyC++,运算符重载限制

开发 后端
我们讲了在类和结构体当中重载运算符,关于运算符的重载并不是随心所欲的。C++给出了一些限制,从而保证了规范,以及程序运行的准确性。

[[440765]]

大家好,我是梁唐。

重载限制

上一篇我们讲了在类和结构体当中重载运算符,关于运算符的重载并不是随心所欲的。C++给出了一些限制,从而保证了规范,以及程序运行的准确性。

下面我们就来一一来看下:

必须至少有一个操作数是用户定义的类型

这句话看不明白没有关系,我们只需要记住它的目的就好了。它的主要目的是为了防止用户为了标准类型重载运算符。比如将+重载成两个数的差,而不是和。

这种限制对创造性有一定的影响,没有那么灵活,但可以保证程序的正常运行。不会出现一些反人类的情况

不能违反运算符原来的规则

这一点很好理解,比如+号,它的运算就是计算两个数的和。需要有两个操作数,现在我们把它重载成一个操作数,就是违法的。

  1. P p; 
  2. +p; 

同样,我们也不能修改运算符的优先级,如果将加号运算符重载成两个类相加,那么新的运算符和原来的加号拥有一样的优先级。

不能创建新运算符

这一点之前已经说过了,比如不能定义operator @等这种原来没有的运算符。

禁止名单

有一些运算符是禁止重载的,如:sizeof, ., ::, ?:, typeid, const_cast, dynamic_cast, reinterpret_cast, static_cast

这些运算符往往都有特殊的功能,直接从实现层面禁止重载。

部分运算符只能通过成员函数重载

大多数运算符都可以通过成员函数以及非成员函数进行重载,但也有部分例外,只能通过成员函数重载,如:

  • =:赋值运算符
  • (): 函数调用运算符
  • []: 下标运算符
  • ->: 箭头符号

这里的非成员函数看起来有些费解,之后我们会遇到,主要是指友元函数。

责任编辑:武晓燕 来源: Coder梁
相关推荐

2021-12-15 10:25:57

C++运算符重载

2021-10-20 14:03:06

C++运算符类型

2021-12-29 20:31:40

C++多态指针

2021-12-12 18:13:54

C++This指针

2021-12-09 10:56:50

函数C++原型

2021-11-26 00:03:20

C++编译常量

2009-08-12 10:47:03

C#运算符重载

2021-12-08 10:43:09

C++实现

2021-12-10 10:45:36

C++函数Stock

2021-10-26 00:19:51

C++结构体存储

2021-12-30 14:58:58

C++函数动态

2021-11-27 11:50:09

C++静态持续

2021-11-09 10:38:16

C++Const指针

2021-12-11 19:02:03

函数C++对象

2009-09-04 13:18:10

C#允许运算符重载

2009-08-12 10:27:12

C#运算符重载运算符重载实例

2009-08-14 10:16:57

C#运算符重载

2009-08-12 10:56:47

C#运算符重载C#运算符重载实例

2022-09-19 08:10:37

运算符函数语言

2021-11-10 10:48:36

C++函数指针
点赞
收藏

51CTO技术栈公众号