每日复习笔记4.23

C++复习笔记

c++ primer笔记

表达式

算术操作符
操作符功能用法
+一元正号+ expression
-一元负号- expression
*乘号expression * expression
/除号expression / expression
%取余expression % expression
+加号expression + expression
-减号expression - expression

优先级是一元操作符优先级最高,其次是乘、除操作,最后是加、减操作。

关系操作符和逻辑操作符

expression || expression
以下操作符都产生了bool值。

操作符功能用法
!逻辑非!expression
<小于expression < expression
<=小于等于expression <= expression
>大于expression > expression
>=大于等于expression >= expression
==相等expression == expression
!=不等expression != expression
&&逻辑与expression && expression
在这里插入图片描述逻辑或在这里插入图片描述

逻辑操作符将其操作数视为条件表达式:手先对操作数求职;如果结果为0,则条件为假(false),否则为真(true)。

  1. 逻辑与、逻辑或操作符
    仅当逻辑与(&&)操作符的两个操作数都为true时,结果为true。
    对于逻辑或(or)操作符,只要两个操作数有一个是true,结果就是true。
    这里有一个短路求值的策略。
    逻辑或逻辑与总是先计算其左操作数,然后再计算其右操作数。只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会去求解其右操作数。例如,对于一个逻辑与运算的表达式,如果其左操作数的值为false时,不论右操作数值为true还是false,表达式结果都为false,此时就不会求解右操作数。

  2. 逻辑非操作符
    逻辑非操作符也是将其操作数值为条件表达式,产生预期操作数值相反的条件值。

  3. 不应该串接使用关系操作符

如果把多个关系操作符串接起来使用,结果往往不是我们所希望的结果。例如,

if(i < j < k){
	/* */
}

如果是上述这种写法,本意是使j大于i且小于k;但是实际上,只要k大于1,if中的条件表达式就一定为true。一因为此表达式会先计算i < j的值,只有0或1两个结果,然后表达式就变成了“1 < k ”或者"0 < k",所以只要k大于1,表达式就一定为真。想表达“j大于且i小于k”的含义,使用如下方式:

if(i < j && j < k){
	/*  */
}
  1. bool值字面量
    bool类型可转换为任何算术类型:bool值false用0表示,true则为1。
    expression | expression
位操作符
操作符功能用法
~位取反~expression
<<左移expression << expression
>>右移expression >> expression
&按位与expression & expression
^按位异或expression ^ expression
在这里插入图片描述按位或在这里插入图片描述

其中异或的含义:相同为0,不同为1。

赋值操作符

赋值操作符的左操作数必须是非const的左值。
数组名是不可修改的左值,因此数组不可用做赋值操作的目标。

  1. 赋值操作是右结合的
int ival,jval;
ival = jval = 0;

和其他的二元操作符不同,赋值操作是具有右结合性的。当表达式含有多个赋值操作符是,从右到左结合。上面的表达式,是将右边赋值操作的结果(jval)赋值给ival。

  1. 赋值操作优先级很低
    一般优先级低于关系操作和算术运算。

  2. 复合赋值操作符
    一般来说有:
    += -= *= /= %= <<= >>= &= ^= |=几种操作符
    a op= b 等价于 a = a op b;

自增、自减操作符

自增++、自减–操作分为前置和后置。
前置操作返回的是加1之后的值,后置操作是返回加1之前的值。

int a = 6;
int b = a++;  //b = 6 后置操作先赋值后自增
int c = ++a;  //c = 7 前置操作先自增后赋值
条件操作符

条件操作符是C++中唯一一个三目运算符,就意味着条件操作符需要三个操作数。用法如下:
condition ? expression1 :expression2;
其中condition是一个条件表达式。条件操作符先计算condition的值,如果值为非0,即true,则计算expression1;否则计算expression2.
等价于

if(condition){
	expression1;
}else{
	expression2;
}
sizeof操作符

sizeof操作符的作用是返回一个对象或者类型名的长度,返回值类型是size_t,长度单位是字节。sizeof表达式的结果是编译时的常量。

sizeof(type_name);  //可以是数据类型名
sizeof(expression);  //也可以是表达式
逗号操作符

逗号表达式是一组有逗号分隔的表达式,这些表达式是从左到右计算。逗号表达式的结果是其左右边表达式的值。如果最右边的操作数是左值,则逗号表达式的值也是一个左值。

new和delete表达式

new和delete表达式可以动态的创建和释放单个变量、对象或者数组。
定义变量时,必须指定其数据类型和名字。但是动态创建对象时,只需要指定其数据类型,不必为该对象命名。取而代之的是,new表达式返回指向新创建对象的指针,我们可以通过指针访问此对象:

int i;  //定义一个int型变量
int *pi = new int;  //动态创建一个int型变量

这个new表达式在自由存储区分配创建了一个整型对象,并返回此对象的地址,并用这个地址初始化指针pi。

  1. 动态创建对象的初始化
int i(1024);
int *pi = new int(1024);
string s(10,'9');
string *ps = new string(10,'9');

C++使用直接初始化规则初始化动态创建的对象。

  1. 动态创建对象的默认初始化
    如果不提供显式初始化,动态创建的对象与在函数内定义的变量初始化方式相同。即对于类类型的对象,则用该类的默认构造函数对对象初始化;对于内置类型则无初始化。
string *ps = new string;  //空字符串
int *pi = new int//未初始化的int型变量

也可以对动态创建的对象进行值初始化

string *ps = new string();  //一个空串
int *pi = new int();  //一个int型变量值为0
cls *pc = new cls();  //设cls是一个类名
int *pi = new int;  
int *pi = new int();  

第一个语句的int型变量没有初始化,而第二个语句的int型变量则被初始化为0。

  1. 撤销动态创建的对象
    动态创建的对象使用完之后,必须显式地释放掉对象所占用的内存空间。
    可以通过delete表达式释放指针所指向的地址空间。
delete pi;

注意:如果指针指向的不是new分配的内存地址,则对该指针使用delete表达式是不合法的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值