C++基础:第五章 表达式基础与详述
第五章 表达式基础与详述
第1节 基础:引入
表达式由一到多个操作数组成,可以求值并(通常会)返回求值结果(函数的调用是一种表达式,有时函数不会返回求值结果)
最基本的表达式:变量、字面值
通常包含操作符(运算符)
操作符的特性
接收操作数个数:一元、二元、三元
操作数的类型
操作数是左值还是右值
结果的类型
结果是左值还是右值
优先级和结合性 Operator precedence and associativity(C++ reference)可以通过小括号来改变结合顺序和优先级
操作符的重载,不改变操作数、优先级、结合性
操作符的求值顺序的不确定性
fun(x=x+1,x=x+1);
函数的两个入口参数为两个表达式,这两个表达式的执行顺序是不确定的,与编译器的选择有关
第2节 基础:左值与右值
划分针对表达式,不是针对对象或数值
左右值的转化
- 左值可以转换为右值
- 临时具体化
第3节 基础:类型转换
操作符要求其操作数具有特殊的类型,或具有相同类型
隐式类型转换
- 自动发生
- 实际上是一个有限长度的转型序列
显式类型转换
显式引入
static_cast<double>(3) + 0.5;
静态,编译器执行,性能较好但安全性较差const_cast
dynamic_cast
reinterpret_cast
C形式的类型转换(尝试上述C++形式的类型转换,有一种可以执行则返回,不建议使用,因为不可控进行哪种转换,程序不够安全)
C++不鼓励多使用显示类型转换,使用有风险
第4节 详述:算术操作符
三个优先级
+
-
(一元)*
/
%
+
-
(二元)
均为左结合
通常操作数和结果数均为算数类型的右值,但+
-
与一元+
均可接收指针
一元+
操作符会产生 integral promotion
short x = 3;
auto y = x; //y short
auto z = +x; //z int (integral promotion)
整数相除产生整数,向0取整
求余只接受整数作为操作数
满足(m / n)* n + m % n == m
第5节 详述:逻辑与关系操作符
C++ Operator
关系操作符接收算术或指针类型操作数,逻辑操作符接收可转换为bool值的操作数
操作数和结果均为右值
除逻辑非,外其他操作符都是左结合的
逻辑与、逻辑或有短路特性
逻辑与的优先级高于逻辑或
通常来说不能将多个操作符串联
int a = 3;
int b = 4;
int c = 5;
c > b > a; // true>a --> 1>a 返回0
spaceship操作符<=>
(C++20)
if(a>b){ }
else if(a<b){ }
else{ } // 比较a和b两次,如果a和b是比较复杂的数据结构,则性能较低
auto res = (a<=>b);
if(res==std::strong_ordering::g){ }
else(res==std::strong_ordering::less){ }
else{ } //引入spaceship操作符,提升性能
避免value == true
第6节 详述:位操作符
接收右值,进行位运算,返回右值
除取反外,其他运算符均为左结合
计算过程中可能涉及integral promotion
unsigned char x = 0xff; //11111111
auto y = ~x; //整形提升成int类型 00...0011111111//按位取反得到 11...1100000000 -256
signed char x = 0xff;
auto y = ~x; //整形提升成int类型 由于是signed 补符号位// 11...1111111111//按位取反得到 00...0000000000 0
没有短路逻辑
一定情况下等于乘除以2的幂,但速度更快
右移可以保持符号(补最高位),左移不能保证
计算机内带符号数据的存储方式
正数:直接用原码表示
复数:用其正值的补码表示,即其正值的原码取反码再加1
第7节 详述:赋值操作符
左操作数为可修改左值;右操作数为右值,可以转换为左操作数类型
赋值操作右结合的
求值结果为左操作数
可以引入大括号防止收缩转换(报错)
short x = {0x80000003};
超出长度,报错
复合赋值运算符
x = x + 2; //赋值操作运算符优先级低于加法运算符
第8节 详述:自增自减运算符
++
--
有后缀和前缀两种形式
int x = 3;
int y = x++; //y = 3 x = 4
int z = ++x; //z = 5 z = 5 前缀优先于赋值语句
操作数为左值,前缀返回左值,后缀返回右值
建议使用前缀形式
第9节 详述:其他操作符
成员访问操作符.
和->,
->
等价于(*).
.
左操作数为左值,则返回左值,左操作数为右值,返回值也为右值->
左操作数为指针,返回值为左值
条件操作符
唯一三元操作符
接收一个可转化为bool类型的表达式和两个类型相同的操作数或表达式
ture ? (x++) : (y++);
右结合
int res = (res>0) ? 1 : (res<0) ? -1 : 0 ;
逗号操作符
确保操作数从左到右求值
返回结果最右侧的操作数
左结合
void fun (int a,int b);
此处逗号不是逗号操作符
sizeof
操作符
操作数可以为类型或表达式
不实际求值,返回相应尺寸
其他操作符
域解析操作符 ::
函数调用操作符()
索引操作符[]
抛出异常操作符 throw
C++基础:第五章 表达式基础与详述相关推荐
- 【正点原子STM32连载】第五章 STM32基础知识入门 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 《我的眼睛--图灵识别》第五章:基础:形状识别
<我的眼睛–图灵识别>第五章:基础:形状识别 1.图形认识 三角形 三角形是由同一平面内不在同一直线上的三条线段'首尾'顺次连接所组成的封闭图形. 三角形按边分有不等边三角形.等腰三角和等 ...
- 《计算机应用基础》第05章在线测试,计算机应用基础.第五章测试及答案.doc
计算机应用基础.第五章测试及答案 <计算机应用基础>第05章在线测试及答案 ?<计算机应用基础>第05章在线测试 剩余时间: 59:05 第一题.单项选择题(每题1分,5道题共 ...
- 计算机应用基础第五章试题及答案,计算机应用基础第五章测试题
计算机应用基础第五章单元测试卷 考试时间:60分钟 总分:100分 一.单选题(每小题3分,共20题,计60分) 1.PowerPoint中,显示出当前被处理的演示文稿文件名的栏是( ) [A]工具栏 ...
- 郑大计算机应用基础试题5章,郑大计算机应用基础第五章答案
郑大计算机应用基础第五章答案 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 1.如果要从第 2 张幻灯片跳转到第 8 张幻灯片,应使 ...
- 微型计算机基础 教案,第一章微型计算机基础知识新080902电子教案(153页)-原创力文档...
第一章 微型计算机基础知识;第一章? 微型计算机基础知识;§1.1 计算机中数的表示方法;1.1.1 进位计数制及各计数制间的转换;二进制数的特点; 十进制--符合人们的习惯二进制--便于物理实现十六 ...
- JavaSE入门0基础笔记 第二章Java基础语法
JavaSE入门0基础笔记 第二章Java基础语法 1.运算符 1.1算术运算符 1.1.1运算符和表达式 1.1.2 算术运算符 1.1.3字符的"+"操作 1.1.4 字符串中 ...
- 计算机应用基础第2章相关知识,大学计算机应用基础第2章计算机基础知识.ppt
大学计算机应用基础第2章计算机基础知识 2010-8-1 目 录 第1章 绪 论 第2章 计算机基础知识 第3章 计算机硬件系统 第4章 计算机操作系统 第5章 办公应用软件 第6章 多媒体技术应用 ...
- 计算机网络按信号频带占用方式,[大学计算机应用基础第六章计算机网络基础.ppt...
[大学计算机应用基础第六章计算机网络基础 第六章 计算机网络基础 中国金桥信息网(CHINAGBN )由原电子工业部归口管理,它是一个把国务院.各部委专用网络与各省市自治区.大中型企业以及国家重点工程 ...
- 计算机基础应用000018,计算机应用基础第01章计算机基础知识
计算机应用基础第01章计算机基础知识 (30页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 计算机应用基础 任务描述 小明是大一新生,目 ...
最新文章
- 终于有人把计算机视觉讲明白了
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)【转】
- 字节二面,让写一个LFU缓存策略算法,懵了
- python高斯滤波和降噪_python添加高斯噪声和椒盐噪声,实现中值滤波和均值滤波,实现Roberts算子和Sobel算子...
- SAP打补丁时需要注意的地方
- DotNetNuke出错:“Runat 属性必须具有值 Server(The Runat attribute must have the value Server Error)...
- java怎么从一个类传值到另一个类_Android开发之两个类之间的数据传递
- python测试框架untest怎么循环执行_unittest如何在循环遍历一条用例时生成多个测试结果...
- mysql 拒绝访问的解决办法
- 路由器互通过程(简述)
- 如何编写一份优质的可行性研究报告
- 第一次在CSND做记录,关于linux修改文件的最后访问时间。
- 音乐推荐系统协同过滤算法解释
- 关于Vue中v-if 和 v-for一起使用
- 计算机应用与基础app,手机APP支持下《计算机应用基础》课程探究性学习活动设计与实验研究...
- buff系统 游戏中_泛娱产业:ARPG游戏的技能系统和buff系统的一种实现
- 数据的结构分类:结构化数据,半结构化数据以及非结构化数据
- mysql 查连接数,查看MySQL的连接数
- 把字符串中的全角数字替换成半角数字 0123456789 转换成 0123456789
- u-boot 顶层Makefile 分析
热门文章
- 关于PHOTO SHOP CS9.0无法启动adobe updater 请重新安装应用程序和组件解决方法!
- 回调函数c++类中实现
- MySQL 存储过程错误处理
- [WOJ2549]逻辑的连通性
- 你所不知道的 CSS 阴影技巧与细节
- Elasticsearch: 配置文件详解
- 跨域 webpack + vue-cil 中 proxyTable 处理跨域
- [deviceone开发]-土地销售App开源
- jq中的get()和eq()的区别
- 聊聊我在美团做算法的感受