C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.4 ?:运算符
6.4 ?:运算符
C++有一个常被用来代替if else语句的运算符,这个运算符被称为条件运算符(?:),它是C++中唯一一个需要3个操作数的运算符。该运算符的通用格式如下:
expression1 ? expression2 : expression3
如果expression1为true,则整个条件表达式的值为expression2的值;否则,整个表达式的值为expression3的值。下面的两个示例演示了该运算符是如何工作的:
5 > 3 ? 10 : 12 //5 > 3 is true, so expression value is 10
3 == 9 ? 25 : 18 //3 == 9 is false, so expression value is 18
可以这样解释第一个示例:如果5大于3,则整个表达式的值为10,否则为12。当然,在实际的编程中,这些表达式中将包含变量。
程序清单6.9使用条件运算符来确定两个值中比较大的一个。
程序清单6.9 condit.cpp
//condit.cpp -- using the conditional operator
#include<iostream>
int main()
{
using namespace std;
int a, b;
cout << "Enter two integers: ";
cin >> a >> b;
cout << "The larger of " << a << " and " << b;
int c = a > b ? a : b; //c = a if a > b, else c = b
cout << " is " << c << endl;
return 0;
}
下面是该程序的运行情况:
Enter two integers: 25 28
The larger of 25 and 28 is 28
该程序的关键部分是下面的语句:
int c = a > b ? a : b;
它与下面的语句等效:
int c;
if (a > b)
c = a;
else
c = b;
与if else序列相比,条件运算符更简洁,但第一次遇到时不那么容易理解。这两种方法之间的区别是,条件运算符生成一个表达式,因此是一个值,可以将其赋给变量或将其放到一个更大的表达式中,程序清单6.9中的程序正是这样做的,它将条件表达式的值赋给变量c。条件运算符格式简洁、语法奇特、外观与众不同,因此在欣赏这些特点的程序员中广受欢迎。其中一个技巧(它完成一个应被谴责的任务——隐藏代码)是将条件表达式嵌套在另一个条件表达式中,如下所示:
const char x[2][20] = { "Jason ", "at your service\n" };
const char* y = "Quillstone ";
for (int i = 0; i < 3; i++)
cout << ((i < 2) ? !i ? x[i] : y : x[1] );
这是一种费解的方式(但绝不是最难理解的),它按下面的顺序打印3个字符串:
Jason Quillstone at your service
从可读性来说,条件运算符最适合于简单关系和简单表达式的值:
x = (x > y) ? x : y;
当代码变得更复杂时,使用if else语句来表达可能更为清晰。