46-C++表达式和语句

表达式和语句

for语句的控制部分使用3个表达式。由于其自身加强的句法限制,C++成为非常具有表现力的语言,任何值或任何有效的值和运算符的组合都是表达式。例如,10是值为10的表达式(一点都不奇怪),28*20是值为560的表达式。在C++中,每个表达式都有值。通常值是很明显的。例如,下面的表达式由两个值和一个加号组成,它的值为49;

 22+27

有时值不那么明显,例如,下面是一个表达式,因为它由两个值和一个赋值运算符组成:

x = 20;

C++将赋值表达式的值定义为左侧成员的值,因此这个表达式的值为20。由于赋值表达式有值,因此,可以编写下面这样的语句:

maids = (cooks = 4 )+3;

表达式cooks=4的值为4,因此maids的值为7.然而,C++虽然允许这样做,但并不意味着应鼓励这种做法。允许存在上述语句存在的原则也允许编写如下的语句:

x=y=z=0;

这种方法可以快速地将若干个变量设置为相同的值。优先级表表明,赋值运算符是从右向左结合的,因此首先将0赋给z,然后将z=0赋给y,依次类推。

最后,正如前面指出的,像x<y这样的关系表达式将被判定为bool值true或false。程序中的小程序指出了有关表达式的值的一些重要方面。<<运算符的优先级比表达式中使用的运算符高,因此代码使用括号来获得正确的运算顺序。

//express.cpp——values of expressions
#include<iostream>
int main()
{
	using namespace std;
	int x;
	
	cout<<"The expression x = 100 has the value ";
	cout<<(x=100)<<endl;
	cout<<"Now x = "<<x<<endl;
	cout<<"The expression c < 3 has the value ";
	cout<<(x<3)<<endl;
	cout<<"The expression c > 3 has the value ";
	cout<<(x>3)<<endl;
	cout.setf(ios_base::boolalpha);//a newer C++ feature 
	cout<<"The expression c < 3 has the value ";
	cout<<(x<3)<<endl;
	cout<<"The expression c > 3 has the value ";
	cout<<(x>3)<<endl;
	return 0;
 } 

注意:老式C++实现可能要求使用ios: boolalpha,而不是ios_base:: boolalpha来作为cout.setf()的参数。有些老式实现甚至无法识别这两种形式。

 

下面是该程序的输出:

通常,cout在显示bool值之前将它们转换为int,但cout.setf( ios :: boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0。

注意:C++表达式是值或值与运算符的组合,每个C++表达式都有值。

为判定表达式x=100,C++必须将100赋给x。当判定表达式的值这种操作改变了内存中数据的值时,我们说表达式有副作用。因此,判定赋值表达式会带来这样的副作用,即修改被赋值者的值。有可能吧赋值看作预期的效果,但从C++的构造方法这个角度来看,判定表达式才是主要作用。并不是所有的表达式都有副作用。例如,判定x+15将计算出一个新的值,但不会修改x的值。然而,判定 ++x +15就有副作用,因为它将x+1。

从表达式到语句的转变很容易,只要加分号即可。因此,下面是一个表达式:

age = 100

而下面是一条语句:

age = 100;

更准确地说,这是一条表达式语句。只要加上分号,所有的表达式都可以成为语句,但不一定有编程意义。例如,如果rodents是个变量,则下面就是一条有效的C++语句:

rodents +6 ;

编译器允许这样的语句,但它没有完成任何有用的工作。程序仅仅是计算和,而没有使用得到的结果,然后便进入下一条语句(智能编译器甚可能跳过这条语句)。

 

猜你喜欢

转载自blog.csdn.net/qq_41200424/article/details/82383037