【C++】《C++ Primer 》第四章
第四章 表达式
一、基础
- 重载运算符:当运算符作用在类类型的运算对象时,用户可以自行定义其含义。
- 左值和右值:
- C中:左值可以在表达式左边,右值不能。
- C++中:当一个对象被用作右值的时候,用的是对象的值(内容)。被用做左值时,用的是对象的身份(在内存中的位置)。
二、算术运算符
- 溢出:当计算的结果超出该类型所能表示的范围时就会产生溢出。
三、逻辑和关系运算符
- 短路求值:逻辑与运算符和逻辑或运算符都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。
四、赋值运算符
- 如果赋值运算的左右侧运算对象类型不同,则右侧运算对象将转换成左侧运算对象的类型。
- 赋值运算符满足右结合律,这点和其他二元运算符不一样。 val = val1 = 0;等价于val = (val1 = 0);
- 赋值运算优先级比较低。
五、成员访问运算符
六、条件运算符
- 条件运算符(?:):允许把简单的if-else逻辑嵌入到单个表达式中去,按照如下形式:cond? expr1: expr2
七、位运算符
- 位运算符是作用于整数类型的运算对象。
- 二进制位向左移(<<)或者向右移(>>),移出边界外的位就被舍弃掉了。
- 位取反(~)、与(&)、或(|)、异或(^)
八、sizeof运算符
- 返回一条表达式或一个类型名字所占的字节数。返回的类型是 size_t。
- 两种形式: sizeof (type)和 sizeof expr。
- sizeof运算符的结果部分地依赖于其作用的类型:
- 对char或者类型为char的表达式执行sizeof运算,结果为1。
- 对引用类型执行sizeof运算得到被引用对象所占空间的大小。
- 对指针执行sizeof运算得到指针本身所占空间的大小。
- 对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需要有效。
- 对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将结果求和。注意:sizeof运算不会把数组转换为指针来处理。
- 对string或者vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间。
九、逗号运算符
十、类型转换
1. 隐式类型转换
- 比 int类型小的整数值先提升为较大的整数类型。
- 条件判断中,非布尔转换成布尔。
- 初始化中,初始值转换成变量的类型。
- 算术运算或者关系运算的运算对象有多种类型,要转换成同一种类型。
- 函数调用时。
- 数组转换成指针
2. 显式类型转换
2.1. 命名的强制类型转换,格式为:cast-name(expression)
。其中,type:转换的类型;expression:需要转换的值;cast-name:static_cast、dynamic_cast、const_cast和reinterpret_cast。
2.2. static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用它。
// 进行强制类型转换以便执行浮点数除法
double slope = static_cast<double>(j) / i;
void *p = &d; // 任何非常量对象的地址都能存入void *
// 将void * 转换回初始的指针类型
double *dp = static_cast<double*>(p);
2.3. dynamic_cast:支持运行时类型识别。
2.4. const_cast:只能改变运算对象的底层const。一般可用于去除const性质。
const char *pc;
char *p = const_cast<char*>(pc)
2.5. reinterpret_cast:通常为运算对象的位模式提供低层次上的重新解释。它本质上依赖于机器,要想安全的使用它必须对涉及的类型和编译器实现转换的过程非常了解。
2.6. 应该避免强制类型转换。
十一、运算符优先级表
【C++】《C++ Primer 》第四章的更多相关文章
- <<C++ Primer>> 第四章 表达式
术语表 第 4 章 表达式 算术转换(arithmetic conversion): 从一种算术类型转换成另一种算术类型.在二元运算符的上下文中,为了保留精度,算术转换通常把较小的类型转换成较大的类型 ...
- C++Primer 第四章
//1.当我们对运算符进行重载的时候,其包括运算对象的类型和返回值的类型都是由该运算符定义的,但是运算对象的个数和优先级,结合律都是不能改变的 //2.当一个对象被用作右值的时候,用的是对象的值(内容 ...
- c++primer 第四章编程练习答案
4.13.1 #include<iostream> struct students { ]; ]; char grade; int age; }; int main() { using n ...
- C Primer Plus_第四章_字符串和格式化输入输出_编程练习
Practice 1.输入名字和姓氏,以"名字,姓氏"的格式输出打印. #include int main(void) { char name[20]; char family[2 ...
- 《C++Primer》第五版习题解答--第四章【学习笔记】
[C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...
- C++ Primer Plus学习:第十四章
第十四章 C++中的代码重用 包含对象成员的类 将类的对象作为新类的成员.称为has-a关系.使用公有继承的时候,类可以继承接口,可能还有实现(纯虚函数不提供实现,只提供接口).使用包含时,可以获得实 ...
- C++ Primer Plus学习:第四章
C++入门第四章:复合类型 1 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 使用数组前,首先要声明.声明包括三个方面: 存储每个元素中值的类型 数组名 数组中的元素个数 声明的通 ...
- 【C++】《C++ Primer 》第十四章
第十四章 重载运算与类型转换 一.基本概念 重载运算符是具有特殊名字的函数:由关键字operator和其后要定义的运算符号共同组成.也包含返回类型.参数列表以及函数体. 当一个重载的运算符是成员函数时 ...
- C++ Primer Plus 第四章 复合类型 学习笔记
第四章 复合类型 1. 数组概述 1.1 数组的定义 数组(array)是一种数据格式,能够存储多个同类型的值.每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素. 数组声明的三 ...
随机推荐
- 题解-CF1307G Cow and Exercise
CF1307G Cow and Exercise 给 \(n\) 点 \(m\) 边的带权有向图,边 \(i\) 为 \((u_i,v_i,w_i)\).\(q\) 次询问,每次给 \(x_i\),问 ...
- 新挖个坑,准备学习一下databricks的spark博客
挖坑 https://databricks.com/blog 一.spark3.0特性(Introducing Apache Spark 3.0) 1.通过通过自适应查询执行,动态分区修剪和其他优化使 ...
- 基于gin的golang web开发:实现用户登录
前文分别介绍过了Resty和gin-jwt两个包,Resty是一个HTTP和REST客户端,gin-jwt是一个实现了JWT的Gin中间件.本文将使用这两个包来实现一个简单的用户登录功能. 环境准备 ...
- Android开源项目分类汇总-转载
太长了,还是转载吧...今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参 ...
- Java8的StreamAPI常用方法总结
目录 什么是Stream? Stream的创建 测试API 新建测试数据 findFirst.findAny anyMatch.noneMatch filter max.count peek.map ...
- 图的遍历BFS
图的遍历BFS 广度优先遍历 深度优先遍历 可以进行标记 树的广度优先遍历,我们用了辅助的队列 bool visited[MAX_VERTEX_NUM] //访问标记数组 //广度优先遍历 void ...
- 查询是否sci或者ei收录
1,如果查文章是不是被SCI检索:进入ISI Web of Knowledge,选择Web of Science 数据库,进行查询:2,如果查文章是不是被EI检索:进入EI Village, 选择Co ...
- Spark性能调优篇八之shuffle调优
1 task的内存缓冲调节参数 2 reduce端聚合内存占比 spark.shuffle.file.buffer map task的内存缓冲调节参数,默认是3 ...
- Redis史上最全文章教程
Redis 2020 史上最详细Redis教程 本篇文章并不讲解Redis,只是收集 Redis的优质文章教程 ,文章包含三部分: 理论.编程实战 .面试题. 需要有一定编程功底的人学习 ,如果基础不 ...
- 轻松理解HTTP缓存策略
上一篇文章我写了koa-static的源码解析,其中用到了HTTP的缓存策略,给返回的静态文件设置了一些缓存的头,比如Cache-Control之类的.于是我就跟朋友讨论了一下HTTP的缓存策略: 朋 ...