导图社区 C加加语句与表达式
C++的语句与表达式笔记,包括语句和语句块、运算符、类型转换、运算符优先级和结合性四部分内容,需要的收藏!
编辑于2021-08-08 21:26:08"重构人生的12条黄金法则:从拒绝平庸到活出独特自我首先打破认知枷锁,用‘反愿景’明确人生底线绝对自由等于混乱,平庸是最昂贵的代价接着用高标准重塑身份,让卓越成为习惯能力提升要聚焦实战,以生活为项目炼就深度通才每日推进关键任务,用持续创造撬动自由保持创业心态,把不确定性当跳板,用自我实验突破极限记住:所有努力只为活出不可复制的生命剧本,包括接纳过程中的重大失误。
在职场沟通场景中,日报的本质是「工作价值的结构化呈现工具」。 许多人之所以会陷入写作困境,核心矛盾并非表达能力不足,而是日常工作缺乏目标导向的思维框架与成果沉淀的行为模式。 这里我将尝试以麦肯锡式思维逻辑为底层框架,拆解从工作规划到日报输出的全流程方法论,帮助职场人建立「思考有模型、执行有标准、呈现有效率」的工作体系。
C 类的封装方法:类的定义,类的构造函数,成员函数,重载构造函数,析构函数,静态成员等详细案例解析和理论罗列。
社区模板帮助中心,点此进入>>
"重构人生的12条黄金法则:从拒绝平庸到活出独特自我首先打破认知枷锁,用‘反愿景’明确人生底线绝对自由等于混乱,平庸是最昂贵的代价接着用高标准重塑身份,让卓越成为习惯能力提升要聚焦实战,以生活为项目炼就深度通才每日推进关键任务,用持续创造撬动自由保持创业心态,把不确定性当跳板,用自我实验突破极限记住:所有努力只为活出不可复制的生命剧本,包括接纳过程中的重大失误。
在职场沟通场景中,日报的本质是「工作价值的结构化呈现工具」。 许多人之所以会陷入写作困境,核心矛盾并非表达能力不足,而是日常工作缺乏目标导向的思维框架与成果沉淀的行为模式。 这里我将尝试以麦肯锡式思维逻辑为底层框架,拆解从工作规划到日报输出的全流程方法论,帮助职场人建立「思考有模型、执行有标准、呈现有效率」的工作体系。
C 类的封装方法:类的定义,类的构造函数,成员函数,重载构造函数,析构函数,静态成员等详细案例解析和理论罗列。
C++语句与表达式
语句和语句块
语句是数据处理过程中的最小步骤,其标志是结尾处的分号“;”
空语句
;
表示什么都不做的空语句。虽然空语句没有什么意义,但在C++程序中是允许的。
语句块中的变量
语句块限定了变量的作用域(作用范围)。
在语句块中声明的变量,其作用范围从声明语句开始,直到语句块结束。一旦超出作用范围,则该变量就不再有效了。
表达式与语句的区别
;
表达式的结尾没有分号“;”。如果带上分号,则构成了一条语句。
所谓表达式就是一个对各种数值(包括对象)进行计算的过程。既然是计算,就会有结果。从这个意义上来说,表达式表达的就是一个数值,而这个数值是经过各种计算得到的。
参与计算过程的数值称为操作数,而表示操作的符号称为运算符。一个表达式由一个或多个操作数以及零或多个运算符构成。
复合表达式
如果一个表达式的操作数也是一个表达式,则前者称为复合表达式,而后者称为子表达式。
子表达式的计算顺序是由运算符决定的,准确地说是由运算符的优先级和结合性决定的
语句“a=b;”和“int a=b;”是不同的。前者是赋值,而后者是声明一个变量并初始化。初始化与赋值不同,初始化只能发生在变量声明时,而在程序中,一个变量可以多次赋值。
运算符
分类
按运算符作用的操作数分类
一元运算符
如取址运算符(&),其操作数只有一个变量。常见的取址表达式如“&variable”,其结果是变量variable在内存中的地址。
二元运算符
如算术运算符,每个都需要两个操作数,如“1+2”,“3*4”等。
三元运算符
在 C++中只有一个接受三个操作数的运算符“?:”,常见的表达式如“a>b?a:b”,其含义是如果a大于b,则表达式的结果是a的值,否则是b的值。
根据运算符的功能分类
算术运算符
括加、减、乘、除(四则运算)运算符(+、-、*、/)和求模运算符(%)。
求模运算符(或称取余运算符)%用于计算两个数相除的余数,左边的操作数被右边的操作数除。该运算符只能用来处理整数,
溢出问题
数据的取值范围是有限制的,取决于其类型的尺寸,例如short型数据只能取-32 768 ~ 32 767之间的数。如果某些算术运算的结果超出了范围,则会导致数据的“上溢出”或“下溢出”。一旦发生溢出,则其结果是未定义的
short c = 32767; c = c + 1; cout << c << endl; unsigned short d = 65535; d = d + 1; cout << d << endl;
其输出结果并不是32 768和65 536。不管实际输出的是什么结果,都是没有意义的,因为C++标准并没有对此做出规定。编程时,依据一种没有定义的行为是很危险的,而且其可移植性无法保证。
赋值运算符
C++的赋值运算符是“=”,这是一个二元运算符,接受两个操作数,
将右操作数b的值赋给左操作数a,即用b的值覆盖a的值。右操作数可以是常量,也可以是变量;而左操作数必须是一个左值,即该操作数有一个相关联的、可写的地址值。
左值的定义
1244 = ival
错误
int value = 1244; value = ival;
正确
const int value = 1024 value = ival
给const常量赋值也是错误的
自增自减运算符
后置
后置版本是先使用变量的值,然后再对变量施行自加和自减操作
前置
前置版本是先对变量施行自加和自减操作,然后再使用变量的值
关系运算符
比较的结果是一个bool型的值,即true或false
逻辑运算符
条件运算符
条件运算符(?:)是唯一的一个三元运算符
逗号运算符
逗号表达式是一系列由逗号分开的表达式,这些表达式从左向右计算,逗号表达式的结果是最右边表达式的值。
例如,在“a += 3, c * 5;”中,程序依然会先执行a的自增,再执行c * 5。
sizeof运算符
位操作运算符
位运算符把操作数解释成有序的位集合,每个位的值是0或1。位运算符允许程序员设置或测试独立的位。
位运算符一般用于处理整数。虽然整数可以是有符号的,也可以是无符号的,但一般是无符号的。因为在大多数的位操作中符号位的处理是未定义的,因此不同的编译器对符号位的处理可能会不同。
请不要把该运算符与逻辑与运算符&&相混淆。
类型转换
在表达式的计算过程中,经常需要计算两个不同类型的操作数,或者将一种类型的值赋给另一种类型的变量。
不同类型的数据在计算机中的处理方式不一样,例如double型和int型数据在内存组织和计算方法的实现上都不相同,所以为了完成上述操作必须进行类型转换。
分类
隐式类型转换
原则
类型总是被提升成大类型,以防止精度损失;大类型转换为小类型时,给出警告(不是编译错误)。
所谓的小类型、大类型是从类型尺寸的角度来讲的。也就是说,占用内存小的类型总是转换成占用内存大的类型,如char型到int型、int型到double型。
发生场景
混合类型的算术表达式中。
如果一个算术表达式中,参与运算的各个数据的类型不相同,则其中尺寸最大的数据类型成为目标类型。运算之前,编译器先将各个操作数转换成目标类型,这种转换也被称为算术转换。
1.2+3
1.2+3.0
4.0
用一种类型的表达式给另一种类型的变量赋值。
double a = 123;
标准的隐式转换
int b = 3.14159
精度损失,会导致一个编译警告
把一个表达式传递给一个函数调用,其类型与形参的类型不相同。
为一个函数传递参数时,如果实际传递的参数与函数声明中所用参数的类型不相同,那么就需要将所传递参数转换成函数所需参数的类型。
从一个函数返回一个表达式,其类型与函数的返回类型不相同。
在函数的return(返回)语句中,如果return表达式的类型与函数声明的返回类型不相同,就需要将实际返回值转换成函数的返回类型。在这种情况下目标转换类型是函数的返回类型。
double difference(int ival1, int ival2) { // 返回值提升为 double 类型 return ival1 - ival2 }
大类型向小类型转换在算术表达式中不会出现,但对于其他几种情形,却可能存在。虽然不会导致编译错误,但最好还是尽量避免,因为这会导致数据的精度损失。
特殊的隐式转换
char型数据可以当作整型数使用
由于在 C++程序中字符是用 ASCII 码表示的,所以字符可以当做整型数使用,其值是对应的ASCII码值。
int ival = 'A'
inval = 'a'
在ASCII码表范围内的整数,也可以当做对应的字符使用。
char cVal = 66
cVal = 98
bool型数据与其他数据类型转换
当程序中需要将其他数据类型转换为bool型时,如果传入的数据为零,则转换为false;如果不为0,则转换为true。将bool型数据转换为其他类型数据时,如果传入的数据为true,则转换为1;否则,转换为0。
bool res = 0
res = 1
res = -1
res = 0.0
int ival = true
iVal = false
在算术表达式中,尺寸小于整型的类型总是先被提升为整型
算术表达式中小于整型的类型,总是先被提升为整型。在算术表达式中,如果只含有char型、short型等数据,则这些数据先会被转换成整型。
short sVal = 1; char cVal = 'a'; cout << sVal + cVal << endl;
sVal转换为Int型的1,cVal转换成int型97
结果是98
显式类型转换
如果要将某个数据显式地转换为其他数据类型,则可以使用下面的表达式:
类型(数据)
int a = (int) 3.1415
(类型)数据
int a = int (3.1415)
上述类型转换的方法继承自C语言,C++也提供了自己的类型转换运算符static_cast。
int a = static cast<int>(3.1416)
char *p = NULL; p = const_cast<char*>("直角");
这是上一张学的哈
运算符优先级和结合性
优先级