这两个运算符执行两种极其常见的循环操作,将循环计数加1或减1。这两个运算符都有两种变体,前缀版本位于操作数前面,如++x,后缀版本位于操作数后面,如x++。两个版本对操作数的影响是一样的,但是影响的时间不同。
#include <iostream>
int main()
{
using std::cout;
int a = 20;
int b = 20;
cout << "a = " << a << ": b = " << b << "\n";
cout << "a++ = " << a++ << ": ++b = " << ++b << "\n";
cout << "a = " << a << ": b = " << b << "\n";
// std::cin.get();
return 0;
}
a++意味着使用a的当前值计算表达式,然后将a的值加1;而++b的意思是先将b的值加1,然后使用新值来计算表达式。
y = (4+ x++) + (6+x++)
4+x++不是一个完整的表达式,因此cpp不保证x的值在计算子表达式4+x++后立即增加1.在这个例子中,整条赋值语句是一个完整表达式,而分号标示了顺序点,因此cpp只保证程序执行到下一条语句之前,x的值被递增两次。cpp没有规定是在计算每个子表达式之后将x的值递增,还是整个表达式计算完毕之后才将x的值递增,应避免使用这样的表达式。
对于内置类型,采用哪种格式不会有差别,但对于用户定义的类型,如果有用户定义的递增和递减运算符,则前缀格式的效率更高。