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. PHP如何安装redis扩展(Windows下)

    PHP如何安装redis扩展(Windows下) 一.总结 一句话总结:下载扩展的dll,放入指定文件夹(php对应的扩展的目录php/ext),在配置文件php.ini中注册dll 尽量不要选择最新 ...

  2. Ubuntu16.04安装8821CE 无线网卡无驱动

    已解决 参考链接:https://unix.stackexchange.com/question ... -mint-18-2 内容 Worked solution (Requirements: ke ...

  3. win下使用VM虚拟机安装Linux系统

    自己电脑上还是有个自己的虚拟机比较方便,之前用的Ubuntu,发现卡得不行. 现在装了个轻量级的Lubuntu,速度提升了不少. 1.下载Lubuntu,安装. 2.进入,设置root密码,初始化ro ...

  4. Centos6.8 smokeping安装

    yum -y install rrdtool perl-rrdtool curl perl-core bind bind-chroot bind-utils httpd popt popt-devel ...

  5. Vue.js表单校验;动画指令;避免内存泄露。

    Vue.js表单校验: 动画指令:创建自定义的滚动指令. 避免内存泄露. 避免内存泄露 在单页面应用开发时SPA,用户无需刷新浏览器.所以javascript应用需要自行清理组件来防止内存占用不断增长 ...

  6. webpack+vue多入口环境搭建

    项目地址:https://pan.baidu.com/s/1c1Dflp2 使用前提:安装nodejs环境,webpack的配置官网的例子跟着跑一遍,会vue开发 研究webpack+vue研究了一个 ...

  7. es的分词器analyzer

    analyzer   分词器使用的两个情形:  1,Index time analysis.  创建或者更新文档时,会对文档进行分词2,Search time analysis.  查询时,对查询语句 ...

  8. PHP的几种输出方式

    请写出echo.print_r.print.var_dump .die之间的区别 echo  只能输出字符串等单一数据 不能输出数据类型 不能输出数组等多种数据 print()  只能输出字符串等单一 ...

  9. P3721 [AH2017/HNOI2017]单旋

    题目:https://www.luogu.org/problemnew/show/P3721 手玩一下即可AC此题. 结论:插入x后,x要么会成为x的前驱的右儿子,要么成为x的后继的左儿子,这取决于它 ...

  10. 反射API(一)

    <?php function classData(ReflectionClass $class) { echo '<hr>'; $details = '当前文件:'; $detail ...