《C++ Primer》读书笔记—第四章 表达式

声明:

  • 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
  • 学习一门程序设计语言最好的方法就是练习编程

1、表达式由一个或多个运算对象组成,对表达式求值将得到一个结果。字面值和变量是最简单的表达式,其结果就是字面值和变量的值。把一个运算符和一个或多个运算对象组合起来可以生成复杂的表达式。

2、指针不能转换成浮点数。

3、一个左值表达式的求职结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象。

4、在除法运算中,如果两个运算对象的符号相同则商为正,否则为负。C++11新标准规定负值的商一律向0取整(直接切除小数部分)。

5、短路求值:逻辑与和逻辑或都是先求左侧运算对象的值再求右侧,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧对象的值。

6、对于多重赋值的语句中的每一个对象,他的类型或者与右边的对象类型相同,或者可由右边的对象的类型转换的到。

7、赋值语句常出现在条件语句中,因为赋值运算的优先级较低。,所以赋值部分通常要加上括号。

8、后置递增运算符优先级高于解引用运算符,*pbeg++等价于*(pbeg++)。cout<<*(pbeg++)<<endl;  //输出pbeg开始指向的那个元素,并将指针向前移动一个位置。

9、成员访问运算符:点运算符获取类对象的一个成员;箭头运算符与点运算符有关,表达式ptr->mem等价于(*ptr).mem:

 1 int main(){
 3 string s1 = "a string";
 4 string *p=&s1;
 5   int n = s1.size();
 6   int n = (*p).size();
 7   int n = p->size();   //三个n的意义是一样的
 8 cout<<n<<endl;
 9 return 0;
10 }

10、条件运算的嵌套最好别超过两到三层。

11、前置版本和后置版本

  ++i

  i++

  前置版本是将运算对象的值改变,并返回改变后的对象。

  后置版本是先将原始值存储一份,然后改变运算对象的值,返回的则是原始值的副本。

11、位运算符作用于整数类型的运算对象,并把运算对象看成是二进制位的集合。

12、sizeof运算符返回一条表达式或者一个类型名字所占的字节数。无需提供一个具体的对象,因为要想知道类成员的大小无须真的获取该成员。

  ·char类型进行sizeof,结果为1。

  ·对引用类型执行sizeof得到被引用对象所占空间的大小。

  ·对指针执行sizeof运算得到指针本身所占空间的大小。

  ·对解引用指针执行sizeof得到指针指向的对象所占的空间的大小,指针不需要有效。

  ·对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将结果求和。不会将数组换成指针来处理。

  ·string对象或vector对象执行sizeof只返回该类型固定部分的大小,不会计算对象中元素占了多少空间。

 1 Sales_data data, *p;
 2
 3 sizeof (Sales_data);   //存储Sale_data类型对象所占空间的大小
 4
 5 sizeof data;    //data的类型的大小。即sizeof(Sales_data)
 6
 7 sizeof p;  //指针所占空间的大小
 8
 9 sizeof *p; //指针所指类型的空间的大小,即sizeof(Sales_data)
10
11 sizeof data.revenue //Sales_data的revenue成员对应类型的大小
12
13 sizeof Sales_data::revenue //另一种获取revenue大小的方式

13、隐式转换:C++不能直接将两个不同类型的值相加,而是先根据类型转换的规则设法将对象的类型统一后求值。

  应尽可能减少精度损失。如果既有整数又有浮点数,整数会转换成浮点数。

14、显式转换:

  static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast

  const_cast:只能改变运算对象的底层const。

15、这部分内容相对基础,简单。总结的较少。周末都玩了没有看书,进度已然慢了。抓紧吧。且随疾风前行。

时间: 2024-10-25 12:08:01

《C++ Primer》读书笔记—第四章 表达式的相关文章

《C++ Primer 4th》读书笔记 第5章-表达式

原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3912114.html <C++ Primer 4th>读书笔记 第5章-表达式

《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

第四章 Numpy基础:数组和矢量计算 实话说,用numpy的主要目的在于应用矢量化运算.Numpy并没有多么高级的数据分析功能,理解Numpy和面向数组的计算能有助于理解后面的pandas.按照课本的说法,作者关心的功能主要集中于: 用于数据整理和清理.子集构造和过滤.转换等快速的矢量化运算 常用的数组解法,如排序.唯一化.集合运算等 高效的描述统计和数据聚合/摘要运算 用于异构数据集的合并/连接运算的数据对齐和关系型数据运算 将条件逻辑表述为数组表达式(而不是带有if-elif-else分支

《Linux内核设计与实现》读书笔记 第四章 进程调度

第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的效果. 最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么总会有进程在执行. 4.1多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统.多任务能使多个进程处于堵塞或者睡眠状态.就是任务位于内存内但是不被执行,直到某一事件发生. 分类: l  非抢占式:除非进程自己主动停止运行

APUE读书笔记-第四章 文件和目录

到第四章了,不知什么时候才能把这本书看完,耽误的时间太多了. 第四章是在第三章的基础上,主要描述文件系统的其他性质和文件的性质. 4.2 stat.fstat.fstatat.lstat函数 首先来看看这四个函数的原型: #include <sys/stat.h> ///usr/include/x86_64-linux-gnu/sys/ int stat (const char *__restrict __file, struct stat *__restrict __buf) int fst

C primer plus 读书笔记第四章

本章的标题是字符串的格式化输入/输出,重点介绍输入和输出. 本章的第一段示例代码和上一张示例代码很相近,代码就不贴了,新出现的特性是使用了一个数组来存放字符串,C预处理命令和strlen()函数. 下面具体介绍这些概念. 1.字符串 C语言没有为字符串定义专门的变量类型,而是存储在char数组中. 注意: 1.scanf()读取字符串时,会在遇到第一个空白字符串,制表符或者换行符处停止读取.所以使用%s的scanf()只会读取一个单词而非整个句子(C语言一般用gets()来处理一般的字符串).

《linux内核设计与实现》读书笔记第四章

第4章 进程调度 4.1 多任务 多任务系统可以划分为:非抢占式多任务和抢占式多任务. Linux 提供了抢占式的多任务模式. 在抢占式多任务模式下,由调度程序来决定什么时候停止一个进程的运行.这个强制的挂起动作就叫做抢占. 在非抢占式多任务模式下,除非进程自己主动停止运行,否则它会一直执行.进程主动挂起自己的操作称为让步 . 4.2 Linux 的进程调度 1.O(1)调度器调度算法对于调度那些响应时间敏感的程序有先天不足. 响应时间敏感的程序称其为交互进程. 2.O(1)调度程序性能比较:

读书笔记 第四章

本章的学习,我了解到由于Android源码是一个开源的系统,然要匹配很多设备产品,也就是说一个版本的Android源码,可以编译出针对不同产品的系统.通过选择一个目标编译项,来决定编译出针对哪个产品的系统,通过lunch命令可知,让用户输入目标编译项,我们可以选择编译项前的数字,也可以直接输入编译项的名字.Android使用Linux内核,在源码级开发过程中,有时要修改内核代码,通常内核代码是和目标设备相关的,我们使用的是模拟器的内核,即使没有硬件设备也可以完成实验.编译Android的内核,需

《R语言实战》读书笔记--第四章 基本数据管理

本章内容: 操纵日期和缺失值 熟悉数据类型的转换 变量的创建和重编码 数据集的排序,合并与取子集 选入和丢弃变量 多说一句,数据预处理的时间是最长的--确实是这样的,额. 4.1一个示例 4.2创建新变量 算术运算符:+.-.*./.^(**)(求幂).x %% y(取余运算).x %/% y(整数除法). transform函数: transform函数现在只用于数据框.对数据框进行操作. 例子: mydata <- transform(mydata, sumx = x1+x2, meanx

javascript 数据结构和算法读书笔记 &gt; 第四章 栈

1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈push,出栈pop,获得栈顶元素peek, 三个方法. 2. 栈的实现 基本类结构如下: function Stack(){ this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek;