2020-C++高级程序设计-C++ 表达式

C++ 表达式

  1. C++中的表达式由以下三种组成:
    1. operand
    2. operator
    3. others
  2. 求值需要受到以下元素的制约:
    1. 优先级
    2. 结合性
    3. 类型转换约定(强制类型转换)
      • coresion
      • casting
    4. 求值次序:收到编译器的影响
    5. 副作用:破坏可移植性,降低可读性
    6. 视频1:43
  3. 注意:防止溢出
  4. 类型转换是由compiler决定的
    • type casting强制类型转换
    • 例子:d + x/y*d + ++y:初始条件全为int
    • 强制类型转换:d + (double) x/y*d + ++y

1. 基本运算符

运算符 名称 作用
<< 插入运算符 将后面的插入流中去,也可以被理解为重定向运算符
>> 取出运算符 按顺序读入参数,以空格为分隔符
~ 取反运算符 按位取反
* 指针运算符 取出指针所对应的内存地址中的值
sizeof 求字节数运算符 返回该变量或者数据结构占据的字节数
-> 指向成员运算符 用于拿到成员中变量
  1. 二元运算符
  2. 逗号运算符:表示按照顺序向下计算,并且将最后的计算结果赋值给最左边的
    • a = 3 * 5,a * 4 => a = 60

2. 表达式的种类

  1. 表达式可以大致分为一下几种:
    1. 算术
    2. 关系和逻辑
    3. 赋值
    4. 逗号
    5. 字位运算符
  2. 操作符可以重载
    • 实现多态,避免多函数
    • 无权利定义操作符

2.1. 赋值表达式

  1. C++为左值表达式
  2. 左值 = 右值表达式
    1. 左值:可以出现在赋值表达式左部的表达式,具有存放数据的空间。
    2. 类型不同时,先计算右值表达式的值,然后转换为左值表达式,之后赋值
  3. 11中出现了右值表达式,int && x = 1

2.2. 算术表达式

  1. 增量和减量操作符
    1. 前增量(前减量):++a(–a)
    2. 后增量(后减量):a++(a–)
    3. 提高编译结果的执行效率
1
2
3
4
5
6
7
8
9
10
11
12
int main() {
int a = 1;
int b, c, d, e;
cout << a << endl;//1 a = 1
b = a++;
cout << b << endl;//1 b = 1 a = 2
c = a--;
cout << c << endl;//2 c = 2 a = 1
d = ++a;
cout << d << endl;//2 d = 2 a = 2
e = --a;
cout << e << endl;//1 e = 1 a = 1

2.3. 条件表达式

  1. <exp1>?<exp2>:<exp3>
  2. 唯一的三目运算符,不允许进行重载
  3. 只计算一个运动分量
  4. 如果<exp2><exp3>的值类型相同且均为左值,则该条件运算符表达式为左值表达式。
  5. 可以嵌套(满足就近原则)

2.4. 逗号表达式

  1. 也就是进行连续计算
  2. <exp1>,<exp2>,...,<expn>
  3. <expn>的值是逗号表达式的值
1
2
3
4
5
int a,b,c;
d = (a = 1,b = a + 2,c = b + 3)
//a = 1
//b = 3
//c = d = 6
  1. <exp n>为左值,则该逗号表达式为左值

2.5. 字位运算符表达式

  1. 对于整形数二进制位(bit)的操作,将整形数看做二进制序列
    • 复位和置位进行操作
操作符名 操作符 参与运算元数 备注
按位取反 ~ 单目 -
按位与 & 双目 复位
按位或 | 双目 置位
异或 ^ 双目 -
  1. 对于异或^:
    1. 与全0的二进制串进行运算:不变
    2. 与全1的二进制串进行运算:取反
    3. 与本身的运算:清零
    4. 与同一个对象进行异或运算两次:还原,应用:进行加密
  2. 交换两个整数x和y:如何写函数
1
2
3
4
5
6
7
8
9
10
11
12
//允许中间变量
int t = x;
x = y;
y = t
//不允许中间变量
a = a ^ b
b = b ^ a
a = a ^ b
//或者
x = x + y
y = x - y
x = x - y

2.6. 移位运算符表达式

  1. 不仅仅只是进行移位运算
  2. 还有将相应的数据进行转换。

2.7. 处理Overflow

  1. 在C++中计算出负值不正确的结果:我们统一称为exception

2.8. 左值表达式和右值表达式

  1. 左值表达式:++i
  2. 右值表达式:i++

2020-C++高级程序设计-C++ 表达式
https://spricoder.github.io/2020/07/01/2020-C-plus-plus-advanced-programming/2020-C-plus-plus-advanced-programming-C++%20%E8%A1%A8%E8%BE%BE%E5%BC%8F/
作者
SpriCoder
发布于
2020年7月1日
许可协议