primer C++笔记
算数运算符
算数运算符的运算对象和求值结果都是右值。
作用于指针
m%n匹配m的符号
逻辑和关系运算符
关系运算符
关系运算符满足左结合律
赋值运算符
vec进行了赋值而不是初始化
赋值运算符满足右结合律
int i,j;
i = j = 0;
赋值运算符优先级较低
复合赋值运算符
递增和递减运算符
在一条语句中混用解引用和递增运算符 :后置版本
后置运算符的优先级要高于解引用运算符 因此 **pBeg++ 等价于 (pBeg++)
求值顺序 未定义行为
成员访问运算符
点运算符优先级高于解引用运算符; 后置加加运算符优先级高于解引用运算符
(*p).size()
条件运算符
finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";
位运算符
设置第27位
sizeof运算符
sizeof返回的是表达式结果类型的大小。与众不同的是,sizeof并不实际计算其运算对象的值
sizeof *p //sizeof满足右结合律并且与*运算符的优先级一样。等价于sizeof(*p)
sizeof(ia) / sizeof(*ia) //返回ia的元素数量
逗号运算符
类型转换
其他隐式类型转换
数组转换成指针
类类型定义的转换
显示转换
static_cast dynamic_cast const_cast reinterpret_cast
static_cast
const_cast
const_cast只能改变运算对象的底层const
const char *pc;
char *p = const_cast<char *>(pc) //正确:但是通过p写值是未定义的行为
int a = 1;
const int *p = &a;
int *q = const_cast<int *>(p);
*q = 2;
cout << a << endl; //2
cout << *q << endl; //2
运算符优先级表