C++ Primer 5th学习笔记3 表达式

1、算术运算符

运算符功能描述
+一元正号+ expr
-一元负号- expr
*乘法expr * expr
/除法expr / expr
%求余expr % expr
+加法expr + expr
-减法expr - expr

  上述运算符的优先级中,由上往下,一元运算符优先级最高,其次是乘除运算,最后是加减运算,所有的运算符都满足左结合律。

  对于求余运算,如果m和n都是整数,且m非0;则表达式(m/n)*n+m%n的求值结果与m相等,即若m%n不为0,则结果的符号和m相同。除了-m导致溢出的特殊情况,其他时候(-m)/nm/(-n)都等于-(m/n)m%(-n)等于m%n(-m)%n等于-(m%n)

2、逻辑运算符

运算符结合律功能描述
逻辑非!expr
<小于expr < expr
<=小于等于expr <= expr
>大于expr > expr
>=大于等于expr >= expr
==相等expr == expr
!=不相等expr != expr
&&逻辑与expr && expr
||逻辑或expr || expr

对于逻辑与和或运算有以下规则(短路求值):

  • 逻辑与运算:当且仅当左侧运算对象为真时才对右侧运算对象求值
  • 逻辑与运算:当且仅当左侧运算对象为假时才对右侧运算对象求值

3、递增和递减运算符

  递增运算符(++)和递减运算符(–)提供了简单的加1和减1操作。有两种形式:前置版本和后者版本。区别在于,前置版本是先将运算符对象加1(或减1),然后改变后的对象作为求值结果。后置版本也会将运算对象加1,但求值结果是运算对象改变之前那个值的副本:

int i = 0, k = 0, j;
j = ++i;        //j = 1, i = 1:前置版本得到递增之后的值
j = k++;        //j = 0, k = 1:后置版本得到递增之前的值

  简单来说就是,符号和变量谁在前,先执行谁。递增在前,就先递增再求值;递增在后,就先求值再递增。

4、成员访问运算符

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

string s1 = "a string", *p = &s1;
auto n = s1.size();
n = (*p).size();
n = p->size(); 

Tip:解引用运算符的优先级低于点运算符,因此执行解引用运算的子表达式两端必须加上括号

5、条件运算符

  条件运算符(?:)使用方法:
cond ? expr1 : expr2;
cond是判断条件的表达式,若cond为真,则计算expr1,并返回其值,否则计算expr2,返回expr2。

6、位运算符

  位运算常常用于整数类型的运算对象,其运算对象可看作是二进制位的集合

运算符功能描述
~位求反~ expr
<<左移expr1 << expr2
>>右移expr1 >> expr2
&位与expr1 & expr2
^位异或expr1 ^ expr2
|位或expr1 | expr2

  将变量var的第n位置1:
var |= 1 << n;

  将变量var的第n位置0:
var &= ~(1 << n;)

7、sizeof运算符

  sizeof运算符返回一条表达式或一个类型名字所占的字节数。其运算结果部分依赖于其作用的类型:

  • 对char或者类型为char的表达式执行sizeof,其结果是1
  • 对引用类型执行sizeof运算得到被引用对象所占空间的大小
  • 对指针执行sizeof运算得到指针本身所占空间的大小
  • 对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效
  • 对数组执行sizeof运算得到整个数组所占空间的大小
  • 对string/vector对象执行sizeof运算,只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值