对于一个数学算式“1+2×3-2”来说,我们知道首先计算的部分是“2×3”,这是因为乘法的优先级(Precedence)比加减法高;而对于“2×6/4”来说,乘法和除法的优先级相同,这是因为乘法和除法的结合性(Associativity)是从左往右的,所以在计算时先计算“2×6”而不是“6/4”。C++中优先级和结合性的概念和数学运算类似,对于优先级相同的操作符来说,结合性从左往右就意味着最左边的操作符先进行计算,而结合性从右往左则意味着最右边的先进行计算。此外,括号可以无视所有的优先级而使得其中的操作符先计算,这也跟数学中的概念相同。
表3.3.8 C++操作符优先级
(续上表)
(续上表)
表3.3.8总结了C++中所有操作符的优先级和结合性,这些操作符一共有18层级的优先级,相当复杂。最右边的是每个或每几个优先级的结合性。因为结合性只对同优先级的操作符才有意义,所以一个优先级只会有一种结合性。本小节只讲解其中大部分的操作符,另一小部分涉及高级内容的操作符,笔者会在之后相关的章节中进行讲解。(www.xing528.com)
动手写3.3.13
动手写3.3.13展示了较为复杂的操作符优先级,笔者在注释中用括号标出了运算顺序。我们可以看到,上述示例中乘法的优先级最高,而逻辑或的优先级最低。
动手写3.3.14
动手写3.3.14展示了从右到左的结合性,也就是右结合性的性质。运行结果c等于4,这是因为右边的赋值先操作,b等于4以后再赋值给c。如果是在左结合性的情况下,b的初始值3就会先赋值给c。
提示
在实际的编程中遇到不确定优先级的两个操作符时,建议直接使用括号自己划定优先级,这样既可以增强代码的可读性,也可以避免因优先级与预期不一样而造成的错误。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。