C++Primer学习——第4章 表达式

表达式


当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。

一个重要的原则:在需要右值的地方可以用左值来代替,但是不能把右值当作左值使用。当一个左值被当成右值来使用时,实际使用的是它的内容。

使用关键字decltype,如果表达式的求值结果为左值,得到的是一个引用类型。

处理复合表达式

  1. 拿不准的时候最好用括号来强制让表达式的组合关系符合程序逻辑的要求。
  2. 如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象。(当改变运算对象的子表达式本身就是另外一个子表达式的运算对象时规则无效)

C++新标准规定商一律向0取整(直接切除小数部分)。

短路求值:逻辑与运算符和逻辑或运算符都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。

赋值运算符

如果赋值运算符的左右两个运算对象类型不同,则右侧运算对象将转换成左侧运算对象的类型。

C++11新标准允许使用花括号括起来的初始值列表作为赋值语句的右侧运算对象。


std::vector<int> vi;
vi = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

赋值运算满足右结合,对于多重赋值语句中的每一个对象,它的类型或者与右边对象的类型相同、或者可由右边对象类型转换得到。

除非必须,否则不用递增递减运算符的后置版本


*i++ == *(i++);

建议将位运算符用于无符号类型的数据!!!!

位运算符

左移运算符在右侧插入值为0的二进制位。右移运算符的行为则依赖于其左侧运算对象的类型:如果该运算对象是无符号类型,在左侧插入值为0的二进制位;如果该运算对象是带符号类型,在左侧插入符号位的副本(负)或值为0(正)的二进制位。

逗号运算符

按照从左向右的顺序依次求值,逗号运算符的真正结果是最右侧表达式的值。

类型转换

显示转换

static_cast

任何具有明确定义的类型转换,只要不包含const都可以是使用static_cast。

const_cast

const_cast只能改变运算对象的底层const。

reinterpret_cast

通常为运算对象的位模式提供较低层次上的重新解释。

避免强制类型转换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值