### 赋值运算符

赋值运算符是一种最简单、经常使用的运算符，它用于将运算符右边的操作数赋值给左边的操作数。最简单的赋值运算符是“=”在之前的实例中，随处可以见到赋值运算符的使用。在介绍赋值运算符之前，先来讨论赋值与初始化的区别，在进行对象赋值或初始化操作时，均使用“=”运算符。那么赋值和初始化有何区别呢？

对象的初始化只进行一次，即在定义对象时为其提供一个初始值。例如，下面的语句定义一个整型变量，初始化为 100。

int nLen = 100; //定义一个整型变量，初始化为 100

而对象的赋值操作可以进行多次。例如，下面的语句对变量进行多次赋值。

int nLen = 100; //初始化操作

nLen = 120; //赋值操作

int nCount; //定义一个整型变量

nCount = 80; //赋值操作

nCount = 150; //赋值操作

在使用赋值运算符时，赋值运算符左右两端的操作数数据类型必须相同或兼容（编译器能够对两中数据类型进行隐式转换），例如将一个字符指针变量赋值给一个整型变量是非法的。

char *pszChar = "mrkj";

int nNum;

nNum = pszChar; //错误的赋值语句

对于赋值运算符左边的操作数必须是可寻址的，不能够是一个常数或者表达式。例如：

int nNum = 10; //定义一个整型变量，初始化为 10

int nLen = 20; //定义一个整型变量，初始化为 20

10 = nNum; //错误的赋值语句，左边操作时不能够是一个常数

nNum + nLen = 100; //错误的赋值语句，赋值语句左边不能是表达式

除了“=”赋值运算符之外，C++语言还提供了+=、-=、*=、/=和%=等赋值运算符，这些运算符的使用方法类似，我们只以“+=”运算符为例进行介绍。

在程序中进行数值计算时，有时需要以当前变量的值为基础进行操作。例如将一个整型变量的值加 10。程序中可以写为如下的代码：

int nNum = 10;

nNum = nNum + 10; //将变量 nNum 加 10

使用“+=”运算符可以对上面的代码进行简化。例如：

int nNum = 10;

nNum += 10; //将变量 nNum 加 10

“+=”运算符的作用是将运算符左边的操作数与右边的操作数相加，再将结果赋值给左边的操作数。因此语句“nNum += 10;”与“nNum = nNum + 10;”的作用是相同的。

类似的“-=”运算符的作用是将运算符左边的操作数与右边的操作数相减，再将结果赋值给左边的操作数。表 1 描述了 C++赋值运算符的运算方式。

表 1 C++赋值运算符

赋值运算符 | 示例 | 结果 | 描述
= | int nVar = 10; | nVar 等于 10 | 简单赋值
+= | int nVar = 10; nVar +=5; | nVar 等于 15 | 将左边的表达式与右边的表达式相加，再赋值给左边的表达式
-= | int nVar = 10; nVar -=5; | nVar 等于 5 | 将左边的表达式与右边的表达式相减，再赋值给左边的表达式
*= | int nVar = 10; nVar *=5; | nVar 等于 50 | 将左边的表达式与右边的表达式相乘，再赋值给左边的表达式
/= | int nVar = 10; nVar /=5; | nVar 等于 2 | 将左边的表达式与右边的表达式相除，再赋值给左边的表达式
%= | int nVar = 10; nVar %=5; | nVar 等于 0 | 将左边的表达式与右边的表达式取模，再赋值给左边的表达式