导图 - 第4章 表达式
4.1 基础
4.1.1 基本概念
表达式、运算符、运算对象
表达式的计算结果,依赖运算符的优先级、结合律,以及运算对象的求值顺序
运算符重载
左值和右值
decltype 与左值右值
捋一下:
假设有 int *p = &a;
,decltype(p)
,毫无疑问会推导出int *
假如是 decltype(&a)
,即变量a
的地址,是右值(已无法再取地址了),所以 decltype
推导出来的是一个指向 a
的指针,也是 int *
那么,decltype(&p)
,会推导出一个指向p
的指针,即指向指针的指针,那么推导出来的类型就是 int **
decltype 见 《C++ Primer 第5版》第2章 变量和基本类型 笔记
其他参考博客:qq_38196982 - C++ decltype用法详解
4.1.2 优先级与结合律 & 4.1.3 求值顺序
4.2 算术运算符
举例
一元负号运算符,获取运算对象的副本(可能需要提升),返回其负值
除非 -m
导致溢出(以下是未溢出时的情况)
4.3 逻辑和关系运算符
举例
注意:i < j < k
不等于 i < j && j < k
但是
i < j < k
可在Python中使用
4.4 赋值运算符
赋值的要求是:赋值运算符的左边必须是一个左值
左值:能取到地址的表达式
赋值运算满足右结合律
赋值运算的优先级较低
有时需要加括号哦
复合赋值运算符
4.5 递增和递减运算符:++
、--
尽量使用前置++、--
,但有时,后置也有其优势(理解更直观)
书上对这里的解释如下:
我的理解:后置 ++
其实就是,a++
本身返回的就是a
在++
之前的值,但是语句结束,a
又会是++
之后的值