条件运算符和条件表达式

一、条件运算符概述

条件运算符是 C++ 中唯一的一个三元运算符,符号为 ? :。它能够实现简单的选择功能,根据条件的真假从两个表达式中选择一个进行求值。

条件表达式的一般形式为:

表达式1 ? 表达式2 : 表达式3

其中,表达式1 必须是 bool 类型。表达式2 和表达式3 可以是任何类型,且两者的类型可以不同。条件表达式的最终类型是表达式2 和表达式3 中类型较高的那一个(按照C++ 的类型提升规则确定)。

二、条件表达式的求解过程

条件表达式的求解顺序为:

首先求解表达式1。如果表达式1 的值为 true,则求解表达式2,并将表达式2 的值作为整个条件表达式的结果,表达式3 不再求解。如果表达式1 的值为 false,则求解表达式3,并将表达式3 的值作为整个条件表达式的结果,表达式2 不再求解。

三、示例分析

示例一:求两个数中的较小值

int a = 52, b = 34;
int min = a > b ? b : a;
cout << min << endl;

分析:表达式1 为 a > b,即 52 > 34,结果为 true。因此取表达式2 的值,即 b 的值 34。整个条件表达式的结果为 34,赋给变量 min。输出 34。

示例二:根据分数判断及格与否

int score = 56;
cout << (score >= 60 ? "pass" : "fail");Code language: JavaScript (javascript)

分析:表达式1 为 score >= 60,即 56 >= 60,结果为 false。因此取表达式3 的值,即字符串 “fail”。输出 fail。

注意:条件表达式中表达式2 和表达式3 的类型不同,此处表达式2 为 const char[5] 类型(”pass”),表达式3 为 const char[5] 类型(”fail”),类型相同,最终类型为 const char*。

四、代码示例

以下代码演示了条件运算符的多种用法:

#include <iostream>
using namespace std;

int main()
{
    // 示例1:求两个数的最大值
    int x = 15, y = 28;
    int max = x > y ? x : y;
    cout << "max = " << max << endl;   // 输出 28

    // 示例2:判断奇偶数
    int num = 7;
    cout << num << " is " << (num % 2 == 0 ? "even" : "odd") << endl;   // 输出 odd

    // 示例3:条件表达式嵌套
    int a = 10, b = 20, c = 5;
    int largest = a > b ? (a > c ? a : c) : (b > c ? b : c);
    cout << "largest = " << largest << endl;   // 输出 20

    // 示例4:不同类型表达式
    double d = 3.14;
    int i = 5;
    cout << (i > d ? i : d) << endl;   // i > d 为 false,取 d,输出 3.14

    // 示例5:在赋值中使用
    int score = 85;
    char grade = score >= 90 ? 'A' : (score >= 80 ? 'B' : (score >= 70 ? 'C' : 'D'));
    cout << "grade = " << grade << endl;   // 输出 B

    return 0;
}Code language: PHP (php)

五、注意事项

  • 条件运算符的优先级较低,通常建议将整个条件表达式用括号括起来,尤其是在与其他运算符混合使用时。
  • 条件表达式具有短路特性:根据表达式1 的结果,只求解表达式2 或表达式3 中的一个,另一个不求解。
  • 条件运算符可以嵌套使用,但嵌套过多会降低代码可读性,此时应考虑使用 if-else 语句。
  • 表达式2 和表达式3 的类型不同时,编译器会按照类型转换规则进行提升,最终类型由提升后的类型决定。

六、小结

  • 条件运算符是 C++ 中唯一的三元运算符,形式为 表达式1 ? 表达式2 : 表达式3。
  • 表达式1 必须是 bool 类型,表达式2 和表达式3 可以是任何类型。
  • 条件表达式的求解:先求表达式1,为 true 则求表达式2,为 false 则求表达式3。
  • 条件表达式常用于简单的二选一赋值场景,可以替代简短的 if-else 语句。
  • 注意优先级和类型提升规则,嵌套使用时注意可读性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注