C++运算符优先级

本文详细介绍了C++中的运算符优先级,包括求值顺序、优先级、结合律等基本概念,并提供了全面的运算符优先级表格,涵盖了从一元运算符到复合赋值运算符的各种情况,对于理解和使用C++运算符具有重要的参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

基本概念

运算符优先级

总结


前言

        本文首先明确了一些基本概念,包括求值顺序、优先级、结合律、左值、右值。然后列出了运算符优先级的详细表单,并在表单中总结了运算符的运算结果。表单总结的尽量详细,方便日后查阅使用。


基本概念

在了解运算符优先级之前必须明确一些基本概念

求值顺序、优先级和结合律
  求值顺序、优先级和结合律是三个不同的概念。先考虑运算符的优先级,在考虑结合律,而求值顺序与优先级和结合律无关,并且大多数运算符没有规定求值顺序。
例如:a() + b() * c() + d()

? :  ,  && ||  

左值(lvalue)与右值(rvalue)
  左值有地址可以赋值,右值没有地址不可以赋值;左值既可以在赋值号的左边也可以在右边,右值只能在赋值号的右边。

operand 和 operator    n元运算符

运算符优先级

.  ->  一元运算符(右结合律)  算数运算  关系运算 逻辑运算 三元运算 赋值 复合 throw ,

结合律

运算符

功能

用法

求值结果

::

全局作用域

::name

::

类作用域

class::name

::

命名空间作用域

namespace::name

.

成员选择

obj.mem

得到mem

->

解引用并进行成员选择

obj->mem

得到mem

[]

下标

expr[expr]

如vector[i],得到下标对应的引用

()

函数调用

name(expr_list)

得到函数返回类型

()

类型构造

type(expr_list)

++

后置递增运算符

后置形式左结合律才说的通?

lvalue++

rvalue递增之前的值

返回的是右值

--

后置递减运算符

lvalue--

rvalue递减之前的值

返回的是右值

typeid

类型ID

typeid(type)

typeid

运行时类型ID

typeid(expr)

explicite cast

类型转换

cast_name<type>(expr)

++

前置递增运算符

++lvalue

lvalue递增后的值

返回的是左值

--

前置递减运算符

--lvalue

lvalue递减后的值

返回的是左值

~

位求反

~expr

求反后的值

!

逻辑非

!expr

取反后的值

-

一元负号

-expr

+

一元正号

+expr

*

解引用

*expr

解引用后的值

&

取地址

&lvalue

16/32/64位的地址值

()

类型转换

(type)expr

sizeof

对象的大小

sizeof expr

sizeof

类型的大小

sizeof(type)

Sizeof…

参数包的大小

sizeof…(name)

new

创建动态内存对象

new type

返回地址值

new []

创建动态内存数组

new type[size]

返回数组首地址值

delete

释放对象

delete expr

delete后指针的值不变,指向的内存被释放,不能delete栈上的空间

delete[]

释放数组

delete[] expr

noexcept

能否抛出异常

noexcept(expr)

->*

指向成员选择的指针

ptr->*ptr_to_member

.*

指向成员选择的指针

obj.*ptr_to_member

*

乘法

expr*expr

/

除法

expr/expr

%

取模(取余)

expr%expr

+

加法

expr+expr

-

减法

expr-expr

<<

向左移位

expr << expr

类似加法,输出结果

>>

向右移位

expr >> expr

<

小于

expr < expr

<=

小于等于

expr <= expr

>

大于

expr > expr

>=

大于等于

expr >= expr

==

相等

expr == expr

!=

不等

expr != expr

&

位与

expr & expr

^

位异或

expr ^ expr

|

位或

expr | expr

&&

逻辑与

expr && expr

||

逻辑或

expr || expr

? :

条件

expr ? expr : expr

=

赋值

lvalue = expr

赋值后的lvalue

*=, /=, %=

+=, -=

<<=, >>=

&=, |=, ^=

复合赋值

lvalue += expr

运算后的lvalue

throw

抛出异常

throw expr

,

逗号

expr, expr

最右边的值

备注

a++;

mov eax, dword ptr [a] # 1将a搬运至寄存器
inc eax                # 寄存器自增1
mov dword ptr [a], eax # 再搬回a

int a = b;

mov eax dword ptr [b] # 将b搬运给寄存器
mov dword ptr [a] eax # 将寄存器的值搬运给a

总结

        本文首先明确了一些基本概念,包括求值顺序、优先级、结合律、左值、右值。然后列出了运算符优先级的详细表单,并在表单中总结了运算符的运算结果。表单总结的尽量详细,方便日后查阅使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值