表达式中如果没有指定运算的顺序,表达式如果指向并修改了同一个变量会引发未知错误,因为程序不知道先对变量执行什么操作。
以下几个运算符指定了执行顺序。
&& 从左到右,只有左侧值为真才执行右侧
|| 同上
? : 从左到右计算
, 规定了逗号运算符的计算顺序,从左到右计算,左侧计算以后将左侧的值丢弃,再计算右侧的值,逗号运算符的真正结果是逗号右侧的值。逗号运算符的优先级非常低,比其他运算符都低。
注意:
1.确定不了的时候加括号,让运算的顺序更清晰。
2.一旦在表达式中改变了某个对象的值,在其他地方就不要在使用这个对象了。
整数相除的结果还是整数,多余的部分被剔除了。21/6=3
两个数相除,只要两个数的符号相同,结果就是正数,符号不同,结果是负数。
取余不一样%,如果取余的两个对象符号相同,结果是正数,符号不同,m%(-n)=m%n, (-m)%n=-(m%n)
想要表达a>b,b>c,c>d需要用表达式:a>b&&b>c&&c>d, 不能连着写,那样会造成错误
建议除非必须,否则都用++i
iter++返回的是iter加1之前的值。cout<<*iter++<<endl;这种写法比较好,*iter++ = *(iter++);
成员访问运算符:
有两种成员访问运算符,一种是.,一种是->,点运算符获取类对象的一个成员,箭头和点运算符有关系 a->m=(*a).m
sizeof运算符
对引用类型进行sizeof运算得到被引用对象所占空间的大小
对指针进行sizeof运算得到指针本身所占空间的大小 int* p; sizeof p;
对解引用指针进行sizeof运算得到指针指向的对象所占空间的大小,指针无需有效 int *p; sizeof *p;
对数组进行sizeof运算得到数组的大小
对string或vector进行sizeof运算得到该类型固定部分的大小,不计算对象中的元素占据了多少空间