条件操作符

来源:互联网 发布:linux 鸟哥私房菜 编辑:程序博客网 时间:2024/05/21 18:41

条件操作符(conditional operator)是C++中唯一的三元操作符,它允许将简单的if-else判断语句嵌入表达式中.条件操作符的语法格式为:

cond?expr1 : expr2;

其中,cond是一个条件判断表达式.条件操作符首先计算cond的值,如果cond的值为0,则条件为false;如果cond非0,则条件为true.无论如何,cond总是要被计算的.然后,条件为true时计算expr1,否则计算expr2.和逻辑与、逻辑非(&&和||)操作符一样,条件操作符保证了上述操作数的求解次序.expr1和expr2只有一个表达式被计算.下面的程序说明了条件操作符的用法:

int i=10,j=20,k=30;
//if i>j then maxVal=i else maxVal=j
int maxVal=i>j?i:j;

1.避免条件操作符的深度嵌套

可以使用一组嵌套的条件操作符求出三个变量的最大值,并将最大值赋给max

int i=10,j=20,k=30;
int max=i>j
?i>k ? i:k
:j>k ? j:k;

我们也可以用下面更长却更简单的比较语句实现相同的功能:

int max=i;
if(j>max)
max=j;
if(k>max)
max=k;

2.在输出表达式中使用条件操作符

条件操作符的优先级相当低.当我们要在一个更大的表达式中嵌入条件表达式时,通常必须用圆括号把条件表达式括起来.例如,经常使用条件操作符根据一定的条件输出一个或另一个值,在输出表达式中,如果不严格使用圆括号将条件操作符括起来,将会得到意外的结果:

cout<<(i<j?i:j);  //ok:prints larger of i and j
cout<<(i<j)?i:j;  //prints 1 or 0!
cout<<i<j?i:j;    //error:compares cout to int

第二个表达式比较有趣:它将i和j的比较结果视为<<操作符的操作数,输出1或0.<<操作符返回cout值,然后将返回结果作为条件操作符的判断条件.也就是,第二个表达式等效于:

cout<<(i<j);  //prints 1 or 0
cout?i:j;     //test cout and then evaluete i or j
//depending on whether cout evalueates to true or false

习题 5.20  编写程序提示用户输入两个数,然后报告哪个数比较小

#include <iostream>
using namespace std;
int main()
{
 int val1,val2;
 //提示用户输入两个数并接受输入
 cout<<"Enter two numbers:"<<endl;
 cin>>val1>>val2;
 //报告哪个数比较小
 cout<<"The smaller one is:"<<(val1<val2?val1:val2)<<endl;
 return 0;
}

崩溃了,这段程序有错么?为什么我编译出错

习题5.21  编写程序处理vector<int>对象的元素:将每个奇数值元素用该值的两倍替换

#include <iostream>
#include<vector>
using namespace std;
int main()
{
 vector<int> ivec(20,1);//ivec包含20个值为1的元素
 //将每个奇数值元素用该值的两倍替换
 for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
  *iter=(*iter%2==0?*iter:*iter*2);
 return 0;
}

崩溃中 - -

原创粉丝点击