1.用于内置类型的操作符,其含义不能改变。也不能为任何内置类型定义额外的新的操作符。(重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义)

2.重载操作符,操作符的优先级、结合性或操作数数目不能改变。注意:重载操作符时使用默认实参是非法的。

3.重载操作符并不保证操作数的求值顺序,不再具备短路求值特性。

4.作为类成员的重载函数,其形参看起来比操作数数目少1。作为成员函数的操作符有一个隐含的this形参,限定为第一个操作数。(重载一元操作符如果作为成员函数就没有(显式)形参,如果作为非成员函数就有一个形参。类似的,重载二元操作符定义为成员时有一个形参,定义为非成员函数时有两个形参)

5.重载逗号、取地址、逻辑与、逻辑或等操作符通常不是好做法。这些操作符具有有用的内置含义,如果我们定义了自己的版本,就不能再使用这些内置含义。

6.将要用作关联容器键类型的类定义<操作符。关联容器默认使用键类型的<操作符。即使该类型将只存储在顺序容器中,类通常也应该定义相等(==)操作符和小于(<)操作符,理由是许多算法假定这些操作符存在。如果类定义了相等操作符,它也应该定义不等操作符!=。

7.为类设计存在操作符的时候,是将操作符设置为类成员还是普通黑成员函数。下面是一些指导原则,有助于决定将操作符设置为类成员还是普通黑成员函数:

(1)赋值(=)、下标([ ])、调用( ( ))和成员访问箭头(->)等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。

(2)像赋值一样,复合赋值操作符通常应定义为类的成员。

(3)改变对象状态或与给定类型紧密联系的其他一些操作符,如自增、自减和解引用,通常应定义为类成员。

(4)对称的操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为普通非成员函数。

8.C++语言不要求自增操作符或自减操作符一定作为类的成员,但是,因为这些操作符改变操作对象的状态,所以更倾向于将它们作为成员。

9.重载自增操作符或自减操作符的前缀式和后缀式,它们的区别是:后缀式操作符接受一个额外的(即,无用的)int型形参。使用后缀式操作符时,编译器提供0作为这个形参的实参。

转载于:https://www.cnblogs.com/wangfengju/p/6173014.html

C++ Primer 有感(重载操作符)相关推荐

  1. [c++primer][14]重载操作符与转换

    14.1 重载操作符的定义 不能重载的操作符:.  ?:  sizeof  ::  .* 不能为任何内置类型定义额外的新的操作符:优先级和结合性是固定的:不再具备短路求值特性(不建议重载&&a ...

  2. c++ primer读书笔记-第十四章 重载操作符与转换

    C++ 允许我们重定义操作符用于类类型对象时的含义.如果需要,可以像内置转换那样使用类类型转换,将一个类型的对象隐式转换到另一类型. 例如标准库为容器类定义了几个重载操作符.这些容器类定义了下标操作符 ...

  3. 《C++ Primer》之重载操作符与转换(中)

    赋值操作符 类赋值操作符接受类类型形参,通常,该形参是对类类型的 const 引用,但也可以是类类型或对类类型的非 const 引用.如果没有定义这个操作符,则编译器将合成它.类赋值操作符必须是类的成 ...

  4. C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象

    重载操作符与转换 --调用操作符和函数对象 引言: 能够为类类型的对象重载函数调用操作符:一般为表示操作的类重载调用操作符! struct absInt {int operator() (int va ...

  5. 重载操作符 (c++primer 4e)

    转自:http://www.cppblog.com/zqsand/archive/2010/03/15/109748.html 1.为啥要重载操作符: 通过重载操作符,程序员可以针对"类&q ...

  6. 重载操作符解析(原)

    重载操作符是个好青年,但是要吐槽的是,我们时常为了重载操作符编写许多重复的代码.这是枯燥的,但是也是必须的.你重载的越多,你的类的弹性就越大.但是,你也不能为所欲为.玩游戏总是遵守相应的规则,写重载操 ...

  7. C++ 重载操作符与转换

    <C++ Primer 4th>读书笔记 重载操作符是具有特殊名称的函数:保留字 operator 后接需定义的操作符号. Sales_item operator+(const Sales ...

  8. C++中operator关键字(重载操作符)

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...

  9. C++高精度运算类bign (重载操作符)

    大数据操作,有例如以下问题: 计算:456789135612326542132123+14875231656511323132 456789135612326542132123*14875231656 ...

最新文章

  1. Redis 难题突破,最经典 46 题含详细解析
  2. 官方 | Keras分布式训练教程
  3. 关于Spring AOP代理的生成过程
  4. 在ubuntu上搭建LNMP服务器
  5. mysql win10 无法配置文件_MySQL设置文件无法更改的处理方案详细说明(Win10)
  6. PHP程序员五大兵器排行
  7. CentOS 安装jdk1.7 32位
  8. 多线程编程(Linux C)
  9. 智慧职教mooc学院计算机文化基础答案,智慧职教MOOC学院-刷课分析
  10. 正确激活报表插件的方法
  11. 联想ts250进bios_联想Think TS250/TS550安装server 2008 R2/2012系统教程【一】
  12. 语义标签(Semantic label)与多模态模型的一些关系
  13. 【Java】爬虫,看完还爬不下来打我电话
  14. CKA-1.26 模拟试题
  15. 计算机亮度快捷键,调节电脑亮度的快捷键是什么
  16. 太白---落燕纷飞第一重 Android单元测试Instrumentation和irobotium
  17. 百度地图 AK 申请 / 签名获取及使用方式
  18. 2015年中国青年生活形态调查报告
  19. 安卓修改服务器数据库,安卓端使用服务器端数据库
  20. qbo_camera包 stereovision.cpp 代码分析

热门文章

  1. Rust核心团队前成员Brian Anderson加入PingCAP
  2. mysql count(*),count(1)与count(column)区别
  3. SCCM2012 R2集成WSUS服务器-4:部署软件更新组
  4. ESXi主机管理内存资源的方式
  5. 鹰眼拓扑锁定跟踪 网络管理一目了然
  6. 让CSS兼容IE和Firefox的技巧集合
  7. fastJson toJSONString注意点
  8. 数据结构与算法--5.Python实现十大排序算法
  9. 《操作系统》OS学习(十):进程控制
  10. 【教程分享】Jmeter入门教程