C++学习(三十三)运算符优先级

2023-11-07

C语言优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[整型表达式]

左到右

 

()

圆括号

(表达式)/函数名(形参表)

 

.

成员选择(对象)

对象.成员名

 

->

成员选择(指针)

对象指针->成员名

 

2

-

负号运算符

-算术类型表达式

右到左

单目运算符

(type)

强制类型转换

(纯量数据类型)纯量表达式

 

++

自增运算符

++纯量类型可修改左值表达式

单目运算符

--

自减运算符

--纯量类型可修改左值表达式

单目运算符

*

取值运算符

*指针类型表达式

单目运算符

&

取地址运算符

&表达式

单目运算符

!

逻辑非运算符

!纯量类型表达式

单目运算符

~

按位取反运算符

~整型表达式

单目运算符

sizeof

长度运算符

sizeof 表达式

sizeof(类型)

 
3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式%整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

整型表达式<<整型表达式

左到右

双目运算符

>>

右移

整型表达式>>整型表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

整型表达式&整型表达式

左到右

双目运算符

9

^

按位异或

整型表达式^整型表达式

左到右

双目运算符

10

|

按位或

整型表达式|整型表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

可修改左值表达式=表达式

右到左

 

/=

除后赋值

可修改左值表达式/=表达式

 

*=

乘后赋值

可修改左值表达式*=表达式

 

%=

取模后赋值

可修改左值表达式%=表达式

 

+=

加后赋值

可修改左值表达式+=表达式

 

-=

减后赋值

可修改左值表达式-=表达式

 

<<=

左移后赋值

可修改左值表达式<<=表达式

 

>>=

右移后赋值

可修改左值表达式>>=表达式

 

&=

按位与后赋值

可修改左值表达式&=表达式

 

^=

按位异或后赋值

可修改左值表达式^=表达式

 

|=

按位或后赋值

可修改左值表达式|=表达式

 

15

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序结合

说明:

同一优先级的运算符,结合次序由结合方向所决定。

简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

C++

运算符

描述

例子

可重载性

第一级别

     

::

作用域解析符

Class::age = 2;

不可重载

第二级别

     

()

函数调用

isdigit('1')

可重载

()

成员初始化

c_tor(int x, int y) : _x(x), _y(y*10){};

可重载

[]

数组数据获取

array[4] = 2;

可重载

->

指针型成员调用

ptr->age = 34;

可重载

.

对象型成员调用

obj.age = 34;

不可重载

++

后自增运算符

for( int i = 0; i < 10; i++ ) cout << i;

可重载

--

后自减运算符

for( int i = 10; i > 0; i-- ) cout << i;

可重载

const_cast

特殊属性转换

const_cast<type_to>(type_from);

不可重载

dynamic_cast

特殊属性转换

dynamic_cast<type_to>(type_from);

不可重载

static_cast

特殊属性转换

static_cast<type_to>(type_from);

不可重载

reinterpret_cast

特殊属性转换

reinterpret_cast<type_to>(type_from);

不可重载

typeid

对象类型符

cout &laquo; typeid(var).name();

cout &laquo; typeid(type).name();

不可重载

第三级别(具有右结合性)

     

!

逻辑取反

if( !done ) …

可重载

not

! 的另一种表达

   

~

按位取反

flags = ~flags;

可重载

compl

~的另一种表达

   

++

预自增运算符

for( i = 0; i < 10; ++i ) cout << i;

可重载

--

预自减运算符

for( i = 10; i > 0; --i ) cout << i;

可重载

-

负号

int i = -1;

可重载

+

正号

int i = +1;

可重载

*

指针取值

int data = *intPtr;

可重载

&

值取指针

int *intPtr = &data;

可重载

new

动态元素内存分配

long *pVar = new long;

MyClass *ptr = new MyClass(args);

可重载

new []

动态数组内存分配

long *array = new long[n];

可重载

delete

动态析构元素内存

delete pVar;

可重载

delete []

动态析构数组内存

delete [] array;

可重载

(type)

强制类型转换

int i = (int) floatNum;

可重载

sizeof

返回类型内存

int size = sizeof floatNum;

int size = sizeof(float);

不可重载

第四级别

     

->*

类指针成员引用

ptr->*var = 24;

可重载

.*

类对象成员引用

obj.*var = 24;

不可重载

第五级别

     

*

乘法

int i = 2 * 4;

可重载

/

除法

float f = 10.0 / 3.0;

可重载

%

取余数(模运算)

int rem = 4 % 3;

可重载

第六级别

     

+

加法

int i = 2 + 3;

可重载

-

减法

int i = 5 - 1;

可重载

第七级别

     

<<

位左移

int flags = 33 << 1;

可重载

>>

位右移

int flags = 33 >> 1;

可重载

第八级别

     

<

小于

if( i < 42 ) …

可重载

<=

小于等于

if( i <= 42 ) ...

可重载

>

大于

if( i > 42 ) …

可重载

>=

大于等于

if( i >= 42 ) ...

可重载

第九级别

     

==

恒等于

if( i == 42 ) ...

可重载

eq

== 的另一种表达

   

!=

不等于

if( i != 42 ) …

可重载

not_eq

!=的另一种表达

   

第十级别

     

&

位且运算

flags = flags & 42;

可重载

bitand

&的另一种表达

   

第十一级别

     

^

位异或运算

flags = flags ^ 42;

可重载

xor

^的另一种表达

   

第十二级别

     

|

位或运算

flags = flags | 42;

可重载

bitor

|的另一种表达

   

第十三级别

     

&&

逻辑且运算

if( conditionA && conditionB ) …

可重载

and

&&的另一种表达

   

第十四级别

     

||

逻辑或运算

if( conditionA || conditionB ) ...

可重载

or

||的另一种表达

   

第十五级别(具有右结合性)

     

? :

条件运算符

int i = (a > b) ? a : b;

不可重载

第十六级别(具有右结合性)

     

=

赋值

int a = b;

可重载

+=

加赋值运算

a += 3;

可重载

-=

减赋值运算

b -= 4;

可重载

*=

乘赋值运算

a *= 5;

可重载

/=

除赋值运算

a /= 2;

可重载

%=

模赋值运算

a %= 3;

可重载

&=

位且赋值运算

flags &= new_flags;

可重载

and_eq

&= 的另一种表达

   

^=

位异或赋值运算

flags ^= new_flags;

可重载

xor_eq

^=的另一种表达

   

|=

位或赋值运算

flags |= new_flags;

可重载

or_eq

|=的另一种表达

   

<<=

位左移赋值运算

flags <<= 2;

可重载

>>=

位右移赋值运算

flags >>= 2;

可重载

第十七级别

     

throw

异常抛出

throw EClass(“Message”);

不可重载

第十八级别

     

,

逗号分隔符

for( i = 0, j = 0; i < 10; i++, j++ ) …

可重载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++学习(三十三)运算符优先级 的相关文章

随机推荐

  • 学习 Python 之 Pandas库

    学习 Python 之 Pandas库 Pandas库 什么是Pandas库 DataFrame 创建和存储 1 使用DataFrame构造函数 1 使用列表创建 2 使用字典创建 3 从另一个DataFrame对象创建 2 从文件读取 1
  • 【正则表达式】去除首尾空格

    function Trim str return str replace s s g
  • 【华为oj】蛇形矩阵

    问题描述 题目说明 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形 样例输入 5 样例输出 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 接口说明 原型 void GetResult int Num cha
  • GridLayout 居中显示

    GridLayout 居中显示 如果大家有使用过GridLayout来给RecyclerView使用 会发现其实是没有居中的 而官方也没有给出居中的方法 这里就讲讲如何让其居中 原理 要做的这一点其实很简单 只要我们自己计算每一个item的
  • 什么是 CSRF 、原理及其解决方式

    什么是 CSRF 跨站请求伪造 CSRF Cross site request forgery 也称为 XSRF Sea Surf 或Session Riding 是一个攻击向量 它欺骗 Web 浏览器在登录用户的应用程序中执行不需要的动作
  • selenium4新版本使用指南

    提示 本文默认你已经学会使用selenium的旧版本 因此对一些可以直接搜索到很多的内容 你应该是已经学会的 文章目录 前言 一 设置驱动 1 selenium4推荐方法 2 传统方法 二 查找元素 等待元素出现 三 动作API 暂停 pa
  • Qt + QR-Code-generator 生成二维码

    0 前言 之前使用 libgrencode 生成二维码 LGPL 协议实在不方便 所以需要找一个 github 星星多的 代码简单最好 header only 协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL QR Code
  • 【无法联网】电脑wifi列表为空的解决方案

    打开电脑 发现wifi列表为空 点击设置显示未连接 首先检查是不是网卡驱动有问题 cmd devmgmt msc 找到网络适配器 看看网卡前面是否有感叹号 如果没有则说明网卡没问题 有问题则重装驱动 看看网络协议是否设置正确 找到 控制面板
  • android开机自启动APP及使用adb命令测试

    android开机自动运行APP实现方式其实很简单 在android系统运行时 会发出 android intent action BOOT COMPLETED 这个系统广播 因此我们监听它 并进行打开APP的操作即可 现在大多数的andr
  • Allegro导入网表报错

    文章首发于同名微信公众号 DigCore 欢迎关注同名微信公众号 DigCore 及时获取最新技术博文 E SPMHGE 82 Pin numbers do not match between symbol and component Ru
  • Linux 查看java进程的命令

    刚才去了微众税银面试 面试官赶时间 导致我的语速也快了起来 其中有个问题没答上 那就是 Linux下查看java进程的命令 回来做个记录 以防还有公司问到 之前工作上遇到Linux还是太少了 服 Linux下查看和停止所有java进程 在L
  • 教务管理系统乱码服务器不可,青果教务管理系统Post登录(二)

    承接上一篇贴子的后续 这次成功完成了预想功能 其实本来对学校的教务系统已经没什么兴趣了 但是前两天从吾爱上面看到一篇帖子 在post登录后获取自己的成绩直接对接短信平台 实现每当有新成绩公布的时候可以直接短信通知自己 这一下就又激起了我的兴
  • redis远程连接不上(转)

    解决redis远程连接不上的问题 redis现在的版本开启redis server后 redis cli只能访问到127 0 0 1 因为在配置文件中固定了ip 因此需要修改redis conf 有的版本不是这个文件名 只要找到相对应的co
  • jquery数组求和

    fn sum function fun var v 0 if this length gt 0 this each function index item if fun null fun undefined typeof fun funct
  • mysql binlog 使用指南

    MySQL binlog 详解 1 前言 日志是把数据库的每一个变化都记载到一个专用的文件里 这种文件就叫做日志文件 Mysql默认只打开出错日志 因为过多的日志将会影响系统的处理性能 在5 0前支持文本格式和二进制格式 5 0后只支持二进
  • 【c++】private里面的变量可以间接访问和修改嘛?

    五月出差频繁 只有趁着周末不加班拿出一点时间记录下最近学到的东西 下面是正文 我们都知道 C 中有一个叫访问权限的知识点 被定义在 private 中的方法或者对象理论上是无法直接访问的 被定义在 public 中的方法或者对象理论上是可以
  • RabbitMQ的安装

    一 安装erlang环境 官网下载 http www erlang org downloads 这个文件其实不是gz格式的 使用file otp src 20 1 tar gz可以查看它的真实数据格式 解压 tar xvf otp src
  • 单片机变量所储存的变量值转化为字符

    最近做了一个设计 需要使用单片机设计一个距离采集系统 并将采集的距离大小通过语音播报出来 同时通过蓝牙传至手机端 不论是蓝牙还是语音播报都涉及到将变量中所储存的数值大小转化为字符串 编写代码环境 单片机 STM32F103C8T6 编写软件
  • qt学习笔记1:创建一个qt项目及一些基础知识

    1 新建第一个项目 New Project gt qt widges application 给项目创建名称 名称不能有中文和空格 创建路径中也不能有中文路径 不会报错但是运行时会报错 再下一步 到Kits 中文构建套件 用于选择编译套件
  • C++学习(三十三)运算符优先级

    C语言优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 数组下标 数组名 整型表达式 左到右 圆括号 表达式 函数名 形参表 成员选择 对象 对象 成员名 gt 成员选择 指针 对象指针 gt 成员名 2 负号运算符 算术类