先了解一下自增和自减的运算符:
自增(++)和自减(--)操作符为对象提供加1或减1操作:
int i = 0, j;
j = ++i; // j = 1, i = 1: prefix yields incremented value
j = i++; // j = 1, i = 2: postfix yields unincremented value
因为前置操作返回加1后的值,所以返回对象本身,这是左值。而后置操作返回的则是右值。
一个具体的例子来区分这个左值和右值:
1 #include <iostream> 2 using namespace std; 3 4 void F(int a) { 5 cout << a <<endl; 6 } 7 8 int main() { 9 int i = 0; 10 F(i); 11 ++i = 10; // OK ++i is a l-value 12 // i++ = 20; // Error i++ is a r-value 13 F(i); 14 15 return 0; 16 }
显示结果为:
svpm-dev# ./foo 0 10
前置操作需要做的工作更少,只需要加1后返回加一后的结果即可。而后置操符必须先保存操作数原来的值,以便返回加一之前的值作为操作的结果。
对于int型对象和指针,编译器可能优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。
------------------------------------------------------------------------------------------------------------------------------
再回到C++为什么是C++这个问题上来,为什么不是++C呢?
C++的C说明了它本质上是从C语言演化过来的,C++语言是C语言的超集,是在C语言基础上进行的扩展(引入了new、delete等C语言中没有的操作符,增加了面向对象程序设计的支持,等等),是先有C语言,在进行C++。
根据自增操作符前、后置形式的差别,C++表示对C语言进行扩展之后,还可以使用C语言的内容,而写成++C则表示无法再使用C的原始值了,也就是说C++不能向下兼容C了,这与实际情况不符。