首页 > 代码库 > 《C++ Primer》读书笔记—第四章 表达式

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

 

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