C++ 基础 第五章 表达式基础与详述

表达式基础——引入

表达式由一个到多个操作数组成,可以求值并通常会返回求值结果

通常包含操作符

表达式基础——左值与右值

传统区分:按照等号划分。C++中不这么区分,比如const int不能放在等号左边

值类别:

-泛左值glvalue。求值确定一个对象、位域或函数个体。 

-纯右值prvalue。用于初始化对象或作为操作数

-亡值xvalue。泛左值,其包含的资源可以重新使用

左值与右值的转化

- 左值临时转化为右值

- 临时具体化

再论decltype

-  亡值 T&&

- 左值 T&

- 右值 T

类型转换

隐式类型转换:不是什么东西都能转换。比如字符串和float。

数值提升:内存小的转换为内存大的,在数值上无损。

数值转换:可能有数值损失。

显示类型转换:static_cast(3) + 0.5。等价于3+0.5 

                        const_cast<> 可以去除常量性,不安全

                        reinterpret_cast 对一块内存重新解释,但是也有限制

                        C类型的转换,直接(新类型),可能会出问题

算术操作符

一元与二元的加减乘除。

一元+x、-x。优先级最高

二元x+y,x-y

均为左结合。 

整数相除产生整数,向0取整

求余只能接受整数类型

逻辑与关系操作符

逻辑:与或非。非零int转换为bool值都是true。逻辑短路,与操作先算左边。左边是0就不算右边的

关系:<=>。能比较算术或者指针的大小,不能串联比如a>b>c。C++里面有<=>操作符。

比如 res = (a <=>b),可以做到一次判断,C++20才有的。

操作数和结果均为右值。

位操作符

接受右值,进行位运算,返回右值

除了取反均是左结合

位操作时候会有类型提升,把char变成int

没有短路逻辑

一定情况下等价于乘以或除以2的幂,但是效率更高

赋值操作符

左操作数是可以修改的左值 ;右操作数为右值,可以转换为左操作数的类型

赋值操作符是右结合的

求值结果为左操作数。(x=5)=2...因为x=5的返回值是x,所以最后是给x赋2

小心区分=与==

自增与自减运算符

++;--

分为a++/a--或者++a/--a

比如y = ++x,x会跟着+1,y=x++,x不加y会加

操作数为左值,前缀时候返回左值,后缀时候返回右值

其他操作符

-成员访问操作符.

str a

a.x

操作数什么值,就返回相应左值或者右值

-条件操作符 true ? 3 : 5

第一个操作数是bool(先求值),根据真或者假。:前面是真,后面是假,是哪个就执行哪个,但是后两个的类型必须相同

-逗号操作符

(2,3,4,5)返回最后一个值

你可能感兴趣的:(java,开发语言)