C++ 运算符优先级

来源:互联网 发布:万网域名转让合同 编辑:程序博客网 时间:2024/05/19 01:33

C++ 开发:运算符优先级

下表列出了C + +运算符的优先级和结合性。
运算符列出从上到下,按照优先级

这里写图片描述
解析表达式时,操作员在一些上市行上表的优先级将被绑定收紧(括号)
好像比任何运营商,其参数如下一行上市进一步优先级较低。
例如,表达式std::cout < < a和b和解析* p + +(std::cout < < b和*)&(p + +),
而不是std::cout < <(a和b)或(* p)+ +。

运算符具有相同优先级的绑定参数的方向他们的结合性。
例如,解析表达式a = b = c =(b = c),而不是(a = b)= c,
因为从右到左的结合性的任务,
但是a + b - c解析(a + b)- c而不是+(b - c),
因为从左到右结合性的加法和减法。

结合性规范是多余的一元运算符,只显示完整性:
一元前缀运算符总是把从右到左(删除+ + * p是删除(+ +(* p)))和一元后缀运算符总是把从左到右([1][2]+ +(([1])[2])+ +)。
注意,成员访问运算符的结合性是有意义的,即使他们被分组与一元后缀运算符:
a.b + +解析(a.b)+ +,而不是一个a.(b + +)。

影响操作符重载运算符优先级。

笔记

优先级和结合性是编译时概念和独立于订单的评价,这是一个运行时的概念。
标准本身并不指定优先级水平。他们是来自语法。
const_cast、static_cast dynamic_cast、reinterpret_cast类型id,sizeof……,noexcept alignof不包括因为他们从来不是模棱两可的。
一些运营商替代拼写 (e.g. , and for &&, or for ||, not for ! , 等.).

三元条件的相对优先级和C和c++之间的赋值操作符不同:
在C语言中,作业是不允许元条件运算符的右边,所以e = < d ?+ +:= d不能被解析。
许多C编译器使用一个修改语法哪里?:具有更高的优先级比=解析,
e =(((< d)?(+ +):a)= d)(然后不能编译,
因为?:从来没有在C和左值=需要左边的左值)。
在c++中,?=有同等优先级和组从右到左,这e = < d ?+ +:= d解析作为< e =((d)?(+ +):(a = d))。

这里写图片描述

0 0
原创粉丝点击