运算符的优先级和结合性是什么?

问题描述 投票:0回答:1

C++ 中运算符的优先级和结合性是什么?

谁定义了运算符优先级和结合性,以及它们与求值顺序有何关系?解释了这些属性如何从语法中出现。然而,我只是对所有规则的列表感兴趣。


这个问题应该是社区常见问题解答。 Stack Overflow 上有无数的问题,本质上只是询问运算符优先级,而此问答是现场问答,可以参考而不是cppreference 文章

c++ grammar operator-precedence c++-faq
1个回答
4
投票

C++ 运算符优先级

运算符/表达式 语法规则 描述 关联性
和数量
0
id
this
[]{}

(expression)

(x, ...)

requires () {}
主要表达 文字、标识符、折叠表达式、require 表达式等。这些实际上没有优先级,但它们是构建其他表达式的构建块。
::
合格 ID 范围分辨率。严格来说,
::
也不是一个运算符,而是一种将多个标识符组合成一个名称的方法。
从左到右
二进制
x++
x--

type()
type{}

x()
x[]

.
,
->

static_cast

typeid
, ...
后缀表达式 后缀表达式。像
static_cast
这样的强制转换也被归类为后缀表达式,尽管通常人们不认为它是一个运算符,并且通常不会对其优先级产生混淆。
从左到右
各种
++x
--x

+x
-x

!x
~x

(type) x

*x
&x

sizeof

 co_await

new

delete
一元表达式 前缀表达式。这还包括 C 风格强制转换、
co_await
new
delete
,并非所有人都希望它们是运算符。

请注意,
sizeof
的操作数不能是 C 风格强制转换,例如
sizeof (int)x
被解析为
sizeof(int)
后跟
x
从右到左
各种
.*
->*
下午表情 指向成员的指针运算符。 从左到右
二进制
*
/
%
乘法表达式 乘法运算符。
+
-
加法表达式 加法运算符。
<<
>>
shift-表达式 按位移位运算符。
<=>
比较表达式 三向比较运算符。
<
>

<=
>=
关系表达式 关系比较运算符。请注意,
a < b < c
表示
(a < b) < c
,可能是一个错误。
==
!=
平等表达 相等比较运算符。请注意,
a == b == c
表示
(a == b) == c
,可能是一个错误。
&
和表达式 按位与运算符。
^
异或表达式 按位异或运算符。
|
包含或表达式 按位或运算符。
&&
逻辑与表达 逻辑与运算符。
||
逻辑或表达式 逻辑或运算符。
a?b:c
条件表达式 条件运算符,俗称“三元运算符”。请注意,
b
被解析为带括号,因此其优先级并不重要。
从右到左
三元
=
+=
...
co_yield

throw
赋值表达式 常规作业和复合作业。还有yield 表达式和 throw 表达式。 从右到左
各种
,
表情 逗号运算符 从左到右
二进制

另见其他网站

© www.soinside.com 2019 - 2024. All rights reserved.