表达式由一个或多个运算对象组成,对表达式求职将得到一个结果。字面值和变量是最简单的表达式,其结果就是字面值和变量的值。
表达式
基础
基础概念
C++定义了一元运算符和二元运算符。
运算符重载
当运算符作用域类类型的运算对象时,用户可以自行定义其含义。因为这种自定义的过程事实上已经是为已经存在的运算符赋予了另外一种含义,所以称之为重载运算符;
优先级
复合表达式是指含有两个或多个运算符的表达式。一般来说,表达式最终的值依赖于其子表达式的组合方式。高优先级运算符的运算对象要比低优先级运算符的运算对象更为紧密的结合在一起;
按照不同的方式加上括号就可以提升运算符优先级
求值顺序
优先级规定了运算对象的组合方式;
算术运算符
逻辑和关系运算符
关系运算符作用于算术类型或指针类型,逻辑运算符作用域任意能转换布尔值的类型;
赋值运算符
赋值运算符的左侧对象必须是一个可修改的左值;
int i = 0, j = 0, k = 0; //初始化而非赋值
const int c1 = i;
非法赋值:
1024 = k; //常量不可以是左值
i + j = k; //算术表达式是左值
c1 = k; //c1是常量,不可修改
c11标准中新的赋值方式:
vector<int> v1;
v1 = {
0,1,2,3,4,5,6,7,8,9}; //v1拥有10个元素,值从0到9
递增和递减运算符
递增运算符和递减运算符为对象的加1和减1提供了一种简洁的书写方式;这两个运算符还可以用于迭代器,因为很多迭代器本来不支持算术运算;
int i = 0, j;
j = ++i; //j = 1, i = 1 前置版本得到递增之后的值
j = i++; //j = 1, i = 2 后置版本得到递增之前的值
成员访问运算符
点运算符可以用于访问成员,其中,点运算符获取类对象的一个成员;箭头运算符与点运算符有关,表达式ptr->mem等价于(*ptr).mem;
条件运算符
条件运算符允许把简单的if-else嵌入到单个表达式中;
int main(void)
{
int a = 0;
int b = 2;
int c = 3;
a = b > c ? b : c;
cout << a << endl;
return 0;
}
位运算符
位运算符作用于整数类型的运算对象,并把运算对象堪称是二进制位的集合;
如果运算对象是“小整形“,它的值则会被自动提升成较大的整数类型;