第四章 表达式
字面值、变量、算术和逻辑运算式都属于表达式
4.1 基础
第一小节提到了运算符分类、类型转换、运算符重载、左右值等基本概念
C++运算符
类型转换
隐式转换 - cppreference.com包含所有自动类型转换的规则
一般算术转换 - cppreference.com讲了算术二元运算符一般会做的公共类型转换
具体见4.11节
运算符重载
只能重载运算对象和返回值的类型,优先级、结合律、运算对象个数不可重载
见后文
左右值
这里只作简单区分【Modern C++】深入理解左值、右值-c++ 左值 右值:
左值一般可以代替右值使用,反过来不允许
优先级与结合律
用多了就知道结合律了,一般都带括号比较稳妥
求值顺序
只有&&、||、?:、,四种运算符规定了求值顺序
其他运算符没有规定(有利有弊)
4.2 算术运算符
会进行一般算术转换(见上面类型转换);对象和结果都是右值;
溢出属于UB;
除法向0取整;取余运算规则是m%n=m - (m/n) * n
4.3 逻辑和关系运算符
&&和||都有短路策略:左侧为真(假)才对右侧求值
- 练习4.10