首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

使用赋值运算符=可以把计算的结果存储到变量中。下面看一个例子。假定用下面的语句声明3个变量:

int total_fruit = 0;

int apples = 10;

int oranges = 6;

用下面的语句可以计算出水果的总数:

total_fruit = apples + oranges;

这个语句首先计算“=”号右边的值,即苹果和桔子的总和,再把结果存储在“=”号左边的total_fruit 变量中。

等号右边的表达式可以非常复杂。如果定义了变量boys和girls,他们分别包含分享水果的男孩和女孩,用下面的语句可以计算出每个孩子得到的水果数:

int fruit_per_child = 0;

fruit_per_child = (apples + oranges) / (boys + girls);

注意可以声明变量fruit_per_child,再直接用表达式的结果对它进行初始化:

int fruit_per_child = (apples + oranges) / (boys + girls);

可以用任何表达式来初始化变量,只要所涉及的变量都已定义即可。

程序示例2.3—— 使用赋值运算符

可以把上面的代码段打包到一个可执行程序中,看看它的执行结果:

//Program 2.3 – Using the assignment operator

#include <iostream>

using std::cout;

using std::endl;

int main() {

int apples = 10;

int oranges = 6;

int boys=3;

int girls=4;

int fruit_per_child = (apples + oranges) / (boys + girls);

cout << endl

<< " Each child gets "

<< fruit_per_child<<" fruit.";

cout << endl;

return 0;

}

程序的执行结果如下所示:

Each child gets 2 fruits.

这就是上面讨论的结果。

2.5.1 多次赋值

还可以在一个语句中执行多次赋值。例如,下面的代码给apples和oranges赋予相同的值:

apples = oranges =10;

因为赋值运算符是右相关的,所以这个语句首先在oranges中存储值10,再把oranges的值存储在apples中,它相当于:

apples = (oranges =10);

这说明,表达式(oranges =10)有一个值,也就是存储在oranges中的值10。这没有什么可惊讶的。有时需要在表达式中把一个值赋予一个变量,再把该值用于其他目的。可以编写下面的语句:

fruit = (oranges =10) + (apples = 11);

这个语句在oranges中存储值10,在apples中存储值11,然后把两个变量加在一起,把结果存储在fruit中。这说明赋值表达式有一个值。但是,尽管可以编写这样的语句,但最好不要这么做。作为一个规则,应限制每个语句中的操作次数。应提高代码的清晰度,避免其含义模糊,以便于其他程序员以后理解和修改这些代码。

2.5.2 修改变量的值

因为赋值操作先计算右边的内容,再把结果存储在左边的变量中,所以可以编写下面的语句:

apples = apples *2;

这个语句使用apples的当前值,先计算右边的值apples *2,然后再把结果存储在apples变量中。因此,该语句的结果就是使存储在apples中的值翻倍。

对变量的已有值进行操作,这种情况已越来越频繁了。因此,C++提供了一种特殊形式的赋值运算符,以缩写方式表达这种表达式。

op= 赋值运算符

之所以称为op= 赋值运算符,是因为它们由一个运算符和一个等于号“=”组成。使用这样的运算符,上面使apples值翻倍的语句就可以改写为:

apples *=2;

这个语句执行的操作与上一个语句完全相同。apples变量先乘以等号右边的表达式的值,再把结果存储回apples中。等号右边的表达式可以是任意表达式。例如,下面的语句:

apples *= oranges + 2;

等价于:

apples = apples * (oranges + 2);

这里先给oranges加2,把相加的结果与存储在apples中的值相乘,再把相乘的结果存储在apples中(在此不要考虑为什么要把苹果和桔子的数量相乘)。

op= 形式的赋值也可以和加法运算符一起使用,所以,要给oranges加2,可以编写下面的语句:

oranges += 2;

这等价于:

oranges = oranges + 2;

现在就产生了一种模式。使用op= 运算符编写赋值语句的一般形式如下:

lhs op = rhs;

其中lhs是一个变量,rhs是一个表达式。这等价于语句:

lhs = lhs op (rhs);

rhs外的括号表示,表达式rhs先计算,其结果是op操作的右操作数。

注意:

lhs是lvalue,是可以赋值的一个实体。之所以称为lvalue,是因为它们出现在等号的左边。C++中每个表达式的结果都是lvalue或rvalue。rvalue是一个结果,而不是lvalue,即它不能出现在赋值操作的左边。

可以对所有的运算符使用op= 形式。表2-8是一个完整的列表,包括第3章将介绍的一些运算符。

表2-8 op=赋值运算符

操 作

运 算 符

操 作

运 算 符

+

按位与

&

-

按位或

|

*

按位异或

^

/

向左移位

<<

取模

向右移位

>>

注意在运算符和“=”之间没有空格。如果包含空格,就会出现错误。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论