1、递增和递减操作符
同一条语句对同一个值不要使用多次的递增递减操作。
如:x=2*x++*(3-++x); 在不同的操作系统中将产生不同的结果(规则“修改后使用”和“使用后修改”可能变得模糊不清)。
副作用点(sideeffect):指的是就算表达式时对某些东西(如存储在变量中的值)进行了修改
顺序点(sequencepoint):是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用都进行了评估。语句中的分号就是一个顺序点。任何完整的表达式末尾都是一个顺序点。
再看上述的例子,表达式2*x++不是一个完整表达式,因此,C++不保证x的值在计算2*x++后立刻加1。由于整条语句是一个表达式,所以,执行完这条语句后,x加了2。
前缀格式(++n)和后缀格式(n++),在执行速度上,前缀格式的效率更高。因为前缀函数将值加1,然后返回;但是后缀首先复制一个拷贝,将其加1,然后将复制的拷贝返回。
1、前缀递增、前缀递减和引用解除操作符*的优先级相同,采用右结合。
2、后缀递增和后缀递减的优先级相同,比前缀操作符的优先级更高,采用左结合。
如:doubelarr[5]={21.1,32.8,23.4,45.2,37.4};
Double*pt=arr;
++pt;//ptpointtoarr[1],32.8
*++pt//==*(++pt)pointtoarr[2]23.4
++*pt//==++(*pt)pointtoarr[2]24.4
(*pt)++// pointtoarr[2]25.4
*pt++//==*(pt++) pointtoarr[2]25.4但是执行完这句语句后,pt的值将为arr[3]的地址。
所有操作符中,逗号操作符的优先级最低。
逗号表达式的值是第二部分的值
Data=17,240; 被解释为:(Data=17),240; 所以,Data=240;
若ch为char变量,则:
cin>>ch;//忽略空格、换行、制表符
cin.get(ch);//不管字符是什么,都存储到ch,而且返回输入字符