当前位置:嗨网首页>书籍在线阅读

14-三目运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

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语句来表达可能更为清晰。