1、函数调用也是一种特殊的运算符,对运算对象的个数不作限制。

2、几元运算符,是基于作用的对象的数量。

3、不同类型的运算对象进行运算,可能会出现类型转换,一般情况下小整数类型会被转换成较大的整数类型,当然,还可能有其他情况的类型。

4、重载运算符的优先级和结合律是无法改变的,但是可以改变运算对象的类型和返回值的类型。

5、当一个对象被用作右值时,那么用的是这个对象的值(内容),当这个对象被用作左值时,用的是这个对象在内存中的地址。

6、在一个需要右值的地方可以使用左值代替,但是不能用右值去替代左值使用。

7、取地址一个运算对象,返回的是指向它的指针。这个指针是右值。

8、使用decltype时,如果表达式中的值是左值的话,推断出来的类型是引用类型。

9、算术运算符满足左结合律,当优先级相同时,从左到右结合。

10、对于没有指定执行顺序的运算符来说,如果表达式指向并修改同一个对象,将引发错误并产生未定义的行为。就是说这些运算符对象,不能相互有影响或者有IO任务,在同一个表达式中。否则其行为未定义。

11、如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象。当且仅当所改变的运算对象的子表达式的本身,就是另一个子表达式的运算对象时无效。简单的说,就是当两个运算符共用一个同一个运算对象时并且有优先级顺序时,无效。

12、除非另做特殊说明,凡是算术运算符,都能够作用于任意的算术类型,或者能够转换成算术类型的类型。

13、当一个一元正号运算符或者一元负号运算符作用于一个指针或者算术值时,返回运算的对象值的一个副本(提升后)。

14、算术表达式出现未定义的结果,有两方面的原因:一方面是,数学性质,例如除数不为0;另一方面是,计算机本身的特点,例如溢出,计算的结果超出了类型所能表示的范围。

15、参与取余或取模运算的运算对象必须是整数类型,进行除法运算时,如果运算对象的符号不同,则商为负值,早期C++支持负值的商向上或者向下取整,C++11新标准下,商一律向0取整(即舍弃掉小数部分)。

16、早期的C++,允许m%n的符号匹配n的符号,并且商的值向负无穷一侧取整,但是新标准下的是禁止的。除非是-m导致溢出的情况,不然(-m)/n,m/(-n),其值都等于-(m/n),m%(-n)等于m%n,(-m)%n等于-(m%n)。也就是说对于/运算符,任意其中一个运算对象的值为负,都等于整个正的运算对象求值取负号,而对于%运算符,只有对m取负,才等于整个正的运算对象求值取负号。

17、算术表达式不应该参与布尔运算。并且它的结果是右值。

18、关系运算符作用于算术类型或者指针类型,逻辑运算符作用于任意能转换成布尔值的类型。其中逻辑非优先级大于关系运算符(比较大小的运算符>=等运算符优先级大于判断是否相等的关系运算符)大于其他逻辑运算符。

19、所谓短路求值,是指当左侧运算对象无法确定整个表达式的值时,才对右侧表达式进行计算。

20、如果想测试一个算术对象或者指针的真值,最直接的方法就是让它作为if语句的条件。在进行比较时,如果比较的对象是布尔型时才去使用布尔字面值作为运算对象,否则不要使用。

21、赋值运算符的左侧运算对象如果是内置类型,那么初始值列表最多只能一个值,如果类型不同,那么发生转换的话,转换后值的大小也不应该超过目标类型的空间大小。如果左侧对象是类类型,则根据其自身类的定义决定。

22、无论左侧运算对象的类型是什么,初始值列表都可以为空,编译器会提供一个值初始化的临时量去初始化。

23、赋值运算符满足的是右结合律,所以先计算右边对象或者表达式的值。赋值运算符优先级次低的仅高于逗号运算符。

24、a op=b;等价于a=a op b;  前者a的值计算一次,而后者计算两次,一次是作为右边子表达式的一部分求值,另一部分是作为左边对象求值。除了对程序性能有影响,其他的没有多大影响。

25、递增、递减运算符的前置形式和后置形式作用的对象都是左值运算对象,前置版本将对象本身作为左值返回,后置版本将对象原始值作为副本拷贝一份作为右值返回,然后其本身再递增递减。尽量使用前置版本。

26、点运算符和箭头运算符作用是一样的,都是用来访问类对象的成员,区别在于(*ptr).mem和ptr->mem,这是由于解引用的运算符优先级低于点运算符,而且箭头运算符结果是一个右值,而点运算符的结果是根据其成员所属的对象是左值还是右值,若是左值结果就为左值,若为右值,结果就是右值。就是说因为指针所指的对象一定是一个左值,所以使用->返回的成员也一定是左值。而对右值对象调用成员调用运算符(.)是合法行为,但是这个被调用的成员在对象被销毁时也一并被销毁,所以整个成员也是右值。

27、条件运算符的表达式如果是左值或者可以在转换成同一种左值类型时,运算的结果就是左值,否则运算的结果就是右值。并且条件运算符的表达式必须是同一种类型或者可以转换成同一种类型的。

28、条件运算符可以作为另外的条件运算符的cond或者expr,条件运算符满足右结合律,一般情况下是从右向左的顺序进行结合,典型的就是嵌套条件运算符,先结合其靠右的条件运算符构成分支。

30、嵌套条件运算符如果嵌套过多会让程序的可读性降低,所以不要嵌套过多层的条件运算符。

31、由于条件运算符的优先级极低,所以若要在输出中使用条件运算符,那么需要对其加括号提高运算优先级。

32、位运算符是作用于整数类型的运算对象,并且把运算对象看成二进制的集合。如果运算对象是小整型,那么其值会被自动提升成较大的整型。《C++ primer fifth》中强烈建议我们将位运算符用于处理符号类型。

33、移位运算符<<和>>,与标准IO库的输入输出一样,只不过后者是前者的重载之后的,内置类型的<<和>>是对其运算对象执行基于二进制位的移动操作。左侧运算对象根据右侧运算对象移动指定的位数,并且将左侧运算对象的值拷贝一份作为求值结果。

35、移位时右侧运算对象的值不能是负数,并且值必须是小于结果的位数。二进制的移位,移出了边界的位就被舍弃了。

C++关于运算符的注意事项的更多相关文章

  1. C++中的运算符重载注意事项

    1.C++中的运算符重载的方式有三种: a.类成员函数重载 b.友元函数重载 c.普通函数重载 注意: a.我们主要使用的方式主要是用:类成员函数和友元函数来实现运算符的重载. b.其实用普通函数理论 ...

  2. java中数据类型及运算符的注意事项

    数据类型: boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言). char:Java中用" \u四位十六进制的数 ...

  3. C语言基础之自增自减运算符及注意事项

    1.具体用法 1: int b; 2: int a = 10; 3: // b = 10 + 12; 4: //b = (a++) + (++a); 5: 6: // b = 11 + 11; 7: ...

  4. 玩转C++运算符重载

    运算符重载语法:返回值类型  operator运算符(参数列表) {  代码逻辑... } C++中的运算符重载是通过函数来实现的,可以将重载的运算符看作是类成的一个成员函数,向普通函数一样调用.如重 ...

  5. java笔记2之算术运算符

    1运算符是什么呢 对常量和变量进行操作的运算符 2运算符分为哪些 算术运算符(+,-,*,/), 赋值运算符 比较运算符 逻辑运算符 位运算符 三目运算符 3运算符 A 算术运算符的注意事项 (1)整 ...

  6. Java 基础入门随笔(3) JavaSE版——逻辑运算符、位运算符

    上一节写了一些运算符的注意事项,这节开头依然是对运算符的一些注意点的阐述! 比较运算符除了>.>=.<.<=.==.!=之外需要注意instanceof:检查是否是类的对象,例 ...

  7. 实例讲解react+react-router+redux

    前言 总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应 ...

  8. 【搬砖】安卓入门(2)- Java开发编程基础--进制转换和运算符

    02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 ...

  9. JavaEE基础(二)

    1.Java语言基础(常量的概述和使用) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 字符串常量 用 ...

随机推荐

  1. composer修改中文镜像

    composer config -g repo.packagist composer https://packagist.phpcomposer.com

  2. thinkphp5中如何使用 usort

    thinkphp5中如何使用 usort 一.总结 一句话总结:其实比较函数加上命名空间就好啦,不然找不到 比较函数加命名空间 数组做usort的第二个参数 usort($question_list, ...

  3. php爬虫最最最最简单教程

    php爬虫最最最最简单教程 一.总结 一句话总结:用的爬虫框架,却是用的自己的例子(因为网站结构的变化,作者的例子不一定好用) 爬虫框架 自己例子 1.发现自己的运行效果和作者的不一样怎么办? 耐下性 ...

  4. JavaScript 第九章总结

    Handing events 前言 这一章节主要讲了关于 events 的内容,讲了 event 的定义,以及如何用 code 来 react to events.同时,也说明了 JavaScript ...

  5. 单细胞数据高级分析之初步降维和聚类 | Dimensionality reduction | Clustering

    个人的一些碎碎念: 聚类,直觉就能想到kmeans聚类,另外还有一个hierarchical clustering,但是单细胞里面都用得不多,为什么?印象中只有一个scoring model是用kme ...

  6. 质控工具之cutadapt的使用方法

    cutadapt 参考:用cutadapt软件来对双端测序数据去除接头 fastqc可以用于检测,检测出来了怎么办? 看了几篇高水平文章,有不少再用cutadapt,虽然有时候数据真的不错,但是还是要 ...

  7. Android中SharedPerforences的简单使用示例 --Android基础

    SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedP ...

  8. Spring Cloud之配置中心搭建

    一.配置中心服务端搭建 1)引入相关Maven坐标 <dependency> <groupId>org.springframework.cloud</groupId> ...

  9. Django 权限管理(二)

    权限菜单展示 1.展示的效果 实现该效果,涉及到的核心点(突破点) 1. 权限分类: (1)菜单权限 (主要用来展示的权限(url)如查看权限 url,  如上图中的每个权限都归类为菜单权限,主要用来 ...

  10. 20165309 Linux安装及学习

    Linux安装及学习 安装虚拟机 结合娄老师的博客<基于VirtualBox虚拟机安装Ubuntu图文教程>和对一些小问题的百度,我也算是很顺利地完成了安装. 然后,按照步骤安装了虚拟机增 ...