3.1.5 条件运算符
条件运算符有时称作三元运算符,因为它牵涉3个操作数。通过示例来理解该运算符应该是最好的办法。假设有两个变量a和b,我们希望将a和b中的最大值赋给第三个变量c。可以用下面的语句来实现:
- c = a > b a : b; // Set c to the maximum of a or b
条件运算符的第一个操作数必须是结果为bool值true或false的表达式,本例中的表达式是a > b。如果该表达式返回true,则第二个操作数(本例中是a)被选为结果值。如果第一个参数返回false,则第三个操作数(本例中是b)被选为结果值。因此,如果a大于b,则条件表达式a > b a : b的结果是a;否则是b。作为赋值操作的结果,该数值存储在c中。该赋值语句中使用条件运算符等价于下面的if语句:
- if(a > b)
- c = a;
- else
- c = b;
条件运算符通常可以写成下面的形式:
- condition expression1 : expression2
如果condition为true,则结果是expression1的值;如果condition为false,则结果是expression2的值。
试一试:在输出中使用条件运算符
条件运算符的常见用途是根据表达式的结果或变量的值来控制输出。可以根据指定的条件,通过选择文本字符串来改变输出的消息。
- // Ex3_04.cpp
- // The conditional operator selecting output
- #include <iostream>
- using std::cout;
- using std::endl;
- int main()
- {
- int nCakes(1); // Count of number of cakes
- cout << endl
- << "We have " << nCakes << " cake" << ((nCakes > 1) "s." : ".")
- << endl;
- ++nCakes;
- cout << endl
- << "We have " << nCakes << " cake" << ((nCakes > 1) "s." : ".")
- << endl;
- return 0;
- }
该程序的输出如下:
- We have 1 cake.
- We have 2 cakes.
示例说明
首先用数值1初始化变量nCakes,然后是一条显示蛋糕数量的输出语句。使用条件运算符只是想测试一下变量nCakes,以确定是有一块还是多块蛋糕:
- ((nCakes>1) "s." : ".")
如果nCakes大于1,则该表达式为"s.";否则为"."。该表达式能够为任意数量的蛋糕使用同一条输出语句,并得到语法上正确的输出。为证实这一点,在示例中使变量nCakes递增,然后重复执行相同的输出语句。
还有许多其他可以应用这类机制的情况,例如,在"is"和"are"之间进行选择。