c++表达式

左值和右值

当一个对象被用作右值,用的是对象的值(内容);当对象被用作左值,用的是对象的身份(在内存中的位置);
重要原则:左值可以当成右值使用,右值不可以当作左值使用。当左值被当成右值使用时,实际使用的是它的内容。

求值顺序

有四种运算符规定了求值顺序。(&&),(||),(?: ),(,)。
bool b=true;
bool b2=-b;b2是true(-1)
bool值不应该参与运算,对大多数运算符来说bool型运算对象被提升为int。
整数相除结果还为整数,商的小数部分被丢弃。
取余操作的运算对象必须为整数。

逻辑和关系运算符

关系运算符作用于算数或指针类型,逻辑运算符作用于任意能转换成bool值的类型。逻辑运算符和关系运算符的返回值都是bool型。
进行比较运算时除非比较对象为bool类型,否则不用bool值字面值true和false作为运算对象。

赋值运算符

赋值运算符满足右结合律。
赋值运算符优先级低于关系运算符的优先级,所以在条件语句中,赋值部分通常加括号。

递增和递减运算符

前置版本和后置版本
前置:将运算对象+1,然后将改变后的对象作为求值结果。
后置:将运算对象+1,但求值结果时运算对象改变之前那个值的副本。
除非必须,否则不用递增递减运算符的后置版本。

auto p=v.begin();
while(p!=v.end()&&*p>=0)
cout<<*p++<<endl;

*p++等价于 * (p++),p++把p的值+1,然后返回p的初始值副本作为求值结果。

成员访问运算符

表达式ptr->mem等价于(*ptr).mem;

条件运算符

?:条件运算符满足右结合律,运算对象一般按照从右向左顺序组合。

位运算符

逻辑操作:&&、||、!。
位运算符:&、|、^。

sizeof运算符

返回一条表达式或一个类型名字所占用的字节数。
对char或者类型为char表达式执行sizeof运算,结果为1
对引用类型执行sizeof得到引用对象所占空间大小
对指针执行sizeof得到指针本身所占空间大小
对解引用指针执行sizeof得到指针指向对象所占空间大小,指针不需要有效
对数组执行sizeof得到整个数组所占空间大小,sizeof不会把数组转换成指针处理。
对string或vector对象执行sizeof运算只返回该类型固定部分大小,不会计算对象中的元素占用多少空间。
因为sizeof返回值是常量表达式,可以用sizeof的结果声明数组的维度。

类型转换

隐式转换

数组转换成指针:在大多数数组表达式中,数组自动转换成指向数组首元素的指针。
指针的转换:常量整数值0或者字面值nullptr可以转换成任意指针类型;指向任意非常量的指针能转换成void*;指向任何对象的指针能转换成const void*

显式转换

命名的强制类型转换
cast-name< type >(expression);
cast-name:static_cast、dynamic_cast、const_cast、reinterpret_cast

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值