C++运算符的优先级
运算符优先级表
- 第一级
运算符 描述 :: 作用域解析
- 第二级
运算符 描述 a++ a– 后缀自增/自减 type() type{} 函数风格转型 a() 函数调用 a[] 数组下标 . -> 成员访问
- 第三级
运算符 描述 ++a –a 前缀自增/自减 +a -a 一元加/减 ! ~ 逻辑非/逐位非 (type) C风格转型 *a 解引(析) &a 取地址 sizeof 取大小 new 动态内存分配 delete 动态内存分配
- 第四级
运算符 描述 .* ->* 成员指针
- 第五级
运算符 描述 * / % 乘除取余
- 第六级
运算符 描述 + - 加减
- 第七级
运算符 描述 \<\< >> 左移右移
- 第八级
运算符 描述 \<=> 三路比较运算符
- 第九级
运算符 描述 > >= \< \<= 关系运算符
- 第十级
运算符 描述 == != 关系运算符
- 第十一级
运算符 描述 & 逐位与
- 第十二级
运算符 描述 ^ 逐位异或
- 第十三级
运算符 描述 | 逐位或
- 第十四级
运算符 描述 && 逻辑与
- 第十五级
运算符 描述 || 逻辑或
- 第十六级
运算符 描述 ?: 三元条件运算符 = += -= *= /= %= \<\<= >>= &= ^= =
- 第十七级
运算符 描述 , 逗号
注释
- 拥有相同优先级的运算符以其结合性的方向与各参数绑定。例如表达式 a = b = c 被分析为 a = (b = c) 而非 (a = b) = c,因为赋值具有从右到左结合性,但 a + b - c 被分析为 (a + b) - c 而非 a + (b - c),因为加法和减法具有从左到右结合性。
- 结合性规定对于一元运算符是冗余的,只为完备而给出:一元前缀运算符始终从右到左结合(delete ++*p 为 delete(++(*p)))而一元后缀运算符始终从左到右结合(a[1][2]++ 为 ((a[1])[2])++)。要注意,结合性对成员访问运算符是有意义的,即使在它们与一元后缀运算符组合时也是如此:a.b++ 分析为 (a.b)++ 而非 a.(b++)。
- 运算符优先级不受运算符重载影响。例如,std::cout \<\< a ? b : c; 分析为 (std::cout \<\< a) ? b : c;,因为算术左移的优先级高于条件运算符
- sizeof 的操作数不能是 C 风格转型:表达式 sizeof (int) * p 无歧义地解释成 (sizeof(int)) * p ,而非 sizeof((int)*p)
- 方便记忆:优先查看域解析、一元后缀排第二、一元前缀不落下、成员四则和移位、比较优先比大小、逻辑还看与异或、赋值逗号定乾坤。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yxhlfx@163.com
文章标题:C++运算符的优先级
本文作者:红尘追风
发布时间:2015-02-15, 14:55:12
原始链接:http://www.micernel.com/2015/02/15/C++%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。