2.4.9 ++和—

    对于表达式“x=x+1;”、“x=x-1”(或写为“x+=1”、“x-=1”),有种更简洁的写法“x++”(或“++x”)、“x—”(或“—x”)。“++”、“—”称为加1运算符和减1运算符,其都是单目运算符,优先级高于任何双目运算符,结合性为从右到左。

    “++”和“—”多有两种形式:前缀形式(“++x”、“—x”)和后缀形式(“x++”、“x—”)。前后缀运算的效果是不同的,见代码2.14。

    代码2.14 加1运算符的前缀形式和后缀形式PrefixAndPostfix


    <——————————————文件名:example214.cpp————————————-> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 int A=10,B;//声明两个int型变量 06 B=A++;//变量A后缀形式的自增,赋值给B 07 cout<<"A is"<<A<<endl; 08 cout<<"B is"<<B<<endl; 09 A=10; 10 B=++A;//变量A前缀形式的自增,赋值给B 11 cout<<"A is"<<A<<endl; 12 cout<<"B is"<<B<<endl; 13 return 0; 14 }

    【代码解析】代码第6行是变量A的后缀形式的自增,其意义是将A的数值先赋值给B,然后增加A的值。代码第10行是变量A的前缀形式自增,其意义是将A的数值先增加1,然后再赋值给B。

    输出结果如下所示。


    A is 11 B is 10 A is 11 B is 11

    读者可以很明显地看出前后缀运算的区别,前缀形式是先进行增1或减1运算,再参与到表达式运算中,而后缀形式是先参与表达式的运算,后增1或减1。

    从本质上讲,++和—运算属于复合赋值运算符,因此要求操作数为可修改的左值,如“++(A+B)”这样的写法是非法的,因为A+B不是左值。

    注意

    像“x++”或“x—”这样的写法都不是左值,因此类似“++x++”或“x++++”这样的写法都是非法的,但“++x”和“—x”是左值,像“++++x”这样的写法是正确的。