第四章:表达式

1、求值顺序:运算对象的求值顺序与优先级和结合律无关

i = f(i) + g(i)*h(i) + j(i);        //如果这里的各个函数与i无关,则无所谓,如果内部都改变了i则会出错
  • 如果几个函数影响同一个对象,则会产生未定义的行为

2、当拿不准求值顺序时,用括号来强制组合

3、赋值运算符:左侧运算对象必须是一个可修改的左值

4、对于++、--;最好使用前置版本,这样避免后置版本的复制副本的性能消耗

5、位运算:

  • 因为在移位中,符号位没有规定如何处理,所以最好使用无符号类型来处理位移运算
  • 右侧运算对象一定不能为负,而且要小于结果的位数,否则会出现未定义行为
  • char类型的运算对象,首先会被提升为int类型

6、sizeof运算符:返回一个表达式或一个类型名字所占的字节数

const char *s = "hello";
sizeof(*s) = 1;        //*s为第一个char:h;所以返回为1
sizeof(s) = 4;        //为一个指针,返回为4
const char st[] = "hello";
sizeof(st) = 6        //对于一个数组,sizeof会返回大小的和;其中包括最后的‘\0’
  • 对于string类型和vector类型sizeof只会返回该类型固定部分的大小;
  • 测试结果sting类型固定为28;vector类型固定为16

7、类型转换:在大多数表达式中,小的形值会自动转换为大整型再计算

8、类型转换:除了在重载函数中使用const_cast外,其他地方应该避免使用强制类型转换

时间: 2024-08-27 01:16:13

第四章:表达式的相关文章

javascript权威指南第四章表达式与运算符

表达式:包括常量,变量,数组访问表达式 data = [1, 2, 3]. 运算符是将简单表达式组成复杂表达式的常用方法. 原始表达式:常量或直接量,关键字和变量. 对象,数组的初始化表达式实际就是新创建的对象和数组,这些初始化表达式有时也叫”对象(数组)直接量“,数组初始化表达式中的元素初始化表达式也可以是数组初始化表达式(也就是嵌套)例子: var matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];数组直接量中元素可省略 即:var sparseArray

C++ Primer 第四章 表达式

基础 运算符根据运算对象的个数分为一元.二元.三元运算符,相同的符号可能表示不同的运算符,具体符号的含义根据上下文决定.一般运算对象可以自动转换为运算符所需的类型.根据运算对象的不同运算符可以表示不同的含义,称为运算符的重载. 左值表示能放在赋值运算符的左侧,右值则不能.当一个对象被用作右值时,用的是对象的内容,当一个对象被用作左值时,用的是对象的身份(内存位置).某些运算符必须要求运算对象为左值,左值可以当成右值使用. 运算符拥有不同的优先级和结合律,括号拥有最高的优先级. 大部分运算符没有规

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

声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程 1.表达式由一个或多个运算对象组成,对表达式求值将得到一个结果.字面值和变量是最简单的表达式,其结果就是字面值和变量的值.把一个运算符和一个或多个运算对象组合起来可以生成复杂的表达式. 2.指针不能转换成浮点数. 3.一个左值表达式的求职结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象. 4.在除法运算中,如果两个运

构建之法学习(第四章 两人合作)

第四章 两人合作 1.代码规范  1)代码风格规范.主要是文字上的规定,看似表面文章,实际上非常重要. *原则:简明,易读,无二义性 *缩进:4个空格 *行宽:行宽必须限制,可以限定为100字符 *括号:在复杂的条件表达式中,用括号清除地表示逻辑优先级 *断行与空白的{}行:推荐格式如下 if ( condition ) {        DoSomething(); } else {       DoSomethingElse(); } *分行:不要把多条语句放在一行上.并且,不要把多个变量定

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找.文本替换. 3.1  查找文本 如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序.POSIX采用三种不同grep变体:grep.egrep.fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式.who | grep -F root上面使用-F选项,以查找固定字符串r

第四章 复合类型

第四章  复合类型 4.1  数组 4.1.1  数组简介 数组(array)是一种数据格式,能够存储多个同类型的值. 声明数组的通用格式如下: typeName arrayName[arraySize]; 表达式arraySize指定数组的元素数目,它只能是以下三种情况之一: 1)        整型常数(如10,枚举值也可以): 2)        const值 3)        常量表达式(如8 * sizeof(int)) 注意:使用数组要注意下标的正确.编译器不会检查使用的下标是否有

第四章 组合逻辑电路

组合逻辑分析方法 如果有逻辑图 根据逻辑图写出逻辑表达式 根据表达式写出真值表 根据真值表的规律找出实现的规律 逻辑电路设计方法 根据需求描述找出变量和自变量,同时定义0和1的表达方式 根据变量和自变量的关系列出真值表 根据真值表列出表达式 化简表达式得到最简与或式 如果需要用与非门表示 则需要把最简与或式进行两次取反然后化简 如果需要用与或非门则 可以把最简与或式的卡诺图画出来然后取所有的0项合并 编码器 普通编码器 每次只允许一个数字送入 3位二进制普通编码器为例说明 列出真值表每次输入8位

java:第四章

第四章: switch ···case 选择结构 switch (表达方式){ case 值1:语句;break; case 值2:语句;break; ...... default:语句n; } 解释:如果表达式的值为值1,那么执行语句1 如果表达式的值为值2,那么执行语句2 ...... 如果表达式从上到下都没有匹配到值, 那么执行default后面的语句n 1.表达式可是整形,字符型,JDK1.7可以是string类型 注意:2.break:表示终止,表达式整个switch语句结束 3.如果

C++ Primer Plus学习:第四章

C++入门第四章:复合类型 1 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 使用数组前,首先要声明.声明包括三个方面: 存储每个元素中值的类型 数组名 数组中的元素个数 声明的通用风格如下: typename arrayname[arrysize]; 注;arrysize指定元素数目,必须是整型常量,不能是变量. 数组的很多用途均基于这样一个事实:可以单独访问数组元素.方法是使用下表或索引对元素进行编号.C++数组从0开始编号,并使用带索引的方括号表示法来指定数组元素. 注

C和指针 (pointers on C)——第十四章:预处理器

第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什么#include,#define #ifdef #undef这些,可是绝对用的不多.作为全面了解学C,还是应该都看一看. 预处理器使用方法非常讲究,用不好会失误,用好了会大大加快执行时速度(不是编译速度). 总结: C程序的第一个步骤就是预处理.预处理器共包括下面几个符号: 1.#define 定