C++ 操作符优先级

来自cppreference.com
< cpp‎ | language
 
 
C++语言

|- class="t-nv-h1" | colspan="5" | 一般主题 |- | |- |

预处理器
注释

|

|-

|- class="t-nv-h1" | colspan="5" | 流程控制 |-

条件执行语句

| |- |

|

|-

循环语句

| |- |

|

|-

跳转语句

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 函数 |-

函数声明 Lambda函数声明 inline说明符 异常说明符 (已弃用) noexcept说明符 (C++11)

|- class="t-nv-h1" | colspan="5" | Exceptions |- | |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 命名空间 |- | |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 类型 |- | |- |

|

|-

说明符

| |- |

decltype (C++11)
auto (C++11)
alignas (C++11)

|

|-

存储持续期说明符 Initialization

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 表达式 |- | |- |

值类别
求值顺序

|

运算符
运算符优先级

|-

替代表示 字面量 布尔型 - 整型 - 浮点型 字符型 - 字符串 - nullptr (C++11) 用户定义 (C++11)

|- class="t-nv-h1" | colspan="5" | Utilities |-

属性 (C++11) Types typedef声明 类型别名声明 (C++11) Casts 隐式类型转换 - 显示类型转换 static_cast - dynamic_cast const_cast - reinterpret_cast 内存分配

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 类 |- | |- |

|

|-

类特有的函数属性

| |- |

|

explicit (C++11)
static

|-

静态成员函数

| |- |

|

|- |- class="t-nv-h1" | colspan="5" | 模板 |- | |- |

|

|- |- class="t-nv-h1" | colspan="5" | 杂项 |- | |- |

|

|-

 

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

优先级 操作符 描述符 结合性
1 :: 作用域解析 从左到右
2 ++   -- 后缀 自增、自减
() 函数调用
[] 数组下标
. 通过引用选择成员
−> 通过指针选择成员
3 ++   -- 前缀 自增、自减 从右到左
+   正、负
!   ~ 逻辑非、按位非
(type) 显式类型转换
* 解引用
& 取地址
sizeof 取对象大小
new, new[] 动态内存分配
delete, delete[] 动态内存去分配
4 .*   ->* 成员指针运算符 从左到右
5 *   /   % 乘、除、求余
6 +   加、减
7 <<   >> 按位左移、按位右移
8 <   <= 小于、小于或等于
>   >= 大于、大于或等于
9 ==   != 等于、不等于
10 & 按位与
11 ^ 按位异或
12 | 按位或
13 && 逻辑与
14 || 逻辑或
15 ?: 三目运算符 从右到左
16 = 赋值
+=   −= 加法/减法赋值运算符
*=   /=   %= 乘法/除法/取余赋值运算符
<<=   >>= 按位左移/右移赋值运算符
&=   ^=   |= 按位与/异或/或赋值运算符
throw 抛出异常
17 , 逗号 从左到右
解析表达式时,操作员是列出的一些行会的约束更严格的(如果用括号),其参数比任何操作上列出它下面的一排。例如,表达式std::cout<<a&b*p++被解析为(std::cout<<a)&b*(p++),而不是作为std::cout<<(a&b)(*p)++.
原文:
When parsing an expression, an operator which is listed on some row will be bound tighter (as if by parentheses) to its arguments than any operator that is listed on a row further below it. For example, the expressions std::cout<<a&b and *p++ are parsed as (std::cout<<a)&b and *(p++), and not as std::cout<<(a&b) or (*p)++.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
在同一单元中列出的运算符,求值时在给定的方向上具有相同的优先级。例如,表达式a=b=c被解析为a=(b=c),而不是(a=b)=c,因为从右到左的结合性.
原文:
Operators that are in the same cell (there may be several rows of operators listed in a cell) are evaluated with the same precedence, in the given direction. For example, the expression a=b=c is parsed as a=(b=c), and not as (a=b)=c because of right-to-left associativity.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
运算符的优先级不受重载的影响.
原文:
An operator's precedence is unaffected by overloading.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 注释

该标准本身并没有指定优先级。它们从语法派生.
原文:
The standard itself doesn't specify precedence levels. They are derived from the grammar.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
const_caststatic_castdynamic_castreinterpret_casttypeid不包括在内,因为它们永远不会有歧义.....
原文:
const_cast, static_cast, dynamic_cast, reinterpret_cast and typeid are not included since they are never ambiguous.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
一些运算符有替代拼写方式(例如,and&&or||not!等).
原文:
Some of the operators have 替代拼写方式 (e.g., and for &&, or for ||, not for !, etc.).
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 另请参阅

求值的顺序运行时运算符参数
原文:
求值的顺序 of operator arguments at run time.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
Common operators
分配 incrementNJdecrement 算术 合乎逻辑的 比较 memberNJaccess 其他

a = b
a = rvalue
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b

a[b]
*a
&a
a->b
a.b
a->*b
a.*b

a(...)
a, b
(type) a
? :

Special operators
static_cast将一种类型转换到另一个兼容的类型
原文:
static_cast converts one type to another compatible type
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
dynamic_cast将虚基类到派生class
原文:
dynamic_cast converts virtual base class to derived class
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
const_cast转换类型兼容型,与不同的cvqualifiers
原文:
const_cast converts type to compatible type with different cv qualifiers
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
reinterpret_cast转换类型不兼容的type
原文:
reinterpret_cast converts type to incompatible type
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
new个分配memory
原文:
new allocates memory
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
delete会释放memory
原文:
delete deallocates memory
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
sizeof查询的大小的type
原文:
sizeof queries the size of a type
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
sizeof...查询的大小的参数组(since C++11)
原文:
sizeof... queries the size of a 参数组 (since C++11)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
typeid查询的类型一个type
信息
原文:
typeid queries the type information of a type
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
noexcept进行检查,,如果的表达可以抛出一个异常(since C++11)
原文:
noexcept checks if an expression can throw an exception (since C++11)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
alignof查询类型(since C++11)对齐要求
原文:
alignof queries alignment requirements of a type (since C++11)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
来自“http://zh.cppreference.com/mwiki/index.php?title=cpp/language/operator_precedence&oldid=39910