C++提供了一套丰富的运算符,它们分别是:
- 算术运算符
- 逻辑运算符与关系运算符
- 赋值运算符
- 递增和递减运算符
- 成员访问运算符
- 条件运算符
- 位运算符
- sizeof 运算符
- 逗号运算符
运算符和表达式的关键是掌握各种运算符的优先级关系及他们各自满足哪种结合律。
** *iter++
与 ++*iter
可以看出,解引用运算符优先级高于前置/后置++;**
#include<vector>
using namespace std;
int main()
{
vector<int> vInt{ 1, 3, 5 };
auto i = vInt.begin();
auto a = ++*i;
auto b = *i++;
cout << b << endl;
cout << a << endl;
return 0;
}```
**算术运算的几条规则**
一是除法:整数相除结果还是整数,当除法的两个运算对象的符号不同时,商为负,C++11规定,一律向0取整。
二是取余:如果取余的两个运算对象的符号不同,则有m%(-n)等于m%n,(-m)%n等于-(m)%n;
**针对一个陌生的表达式**
someValue ? ++x, ++y : --x, --y 等价于(someValue ? ++x, ++y : --x), --y
这是由于条件运算符的优先级高于逗号运算符;
**类型转换**
- 旧式的强制转换类型:(type)expr;
- 显式转换:cast-name<type> (expr);
其中:cast-name可以是static_cast,dynamic_cast,const_cast和reinterpret_cast中的一种。
static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;
const_cast:只能改变运算对象的底层const。
```const char *pc;
char *p = const_cast<char*>(pc);```