📜  C C++三元运算符–一些有趣的观察(1)

📅  最后修改于: 2023-12-03 15:13:44.231000             🧑  作者: Mango

C/C++ 三元运算符 – 一些有趣的观察

简介

C/C++ 中的三元运算符是一种非常强大的表达式,通常形式为:

condition ? true_expression : false_expression;

其中,condition 是一个德尔布尔表达式(即返回 true 或 false),true_expression 和 false_expression 是两个表达式。如果 condition 的值为 true,则返回 true_expression 的值;否则返回 false_expression 的值。

一些有趣的观察
1. 三元运算符的返回值可以被忽略

和其他表达式一样,三元运算符的返回值可以被忽略掉,即不进行任何操作。这时,三元运算符只用来做一个简单的选择器。

a > b ? a : b; // 返回 a 和 b 中的最大值
2. 三元运算符中的表达式具有类型转换

当 true_expression 和 false_expression 的类型不同时,编译器会进行类型转换。通常情况下,编译器会将宽度小的整数类型转换为宽度大的类型,从而保证最终的表达式类型一致。

char c = 0;
int i = 1;
int result = (c != 0) ? c : i; // c 首先被提升为 int 类型,然后再执行
3. 三元运算符具有优先级

三元运算符是表达式中优先级最低的,通常情况下,我们需要使用圆括号来改变表达式的执行顺序。

int a = 0, b = 1, c = 2;
int result = a ? b : c++; // 此处的执行顺序为 a, b, c++

为了避免出现一些令人迷惑的结构,我们通常建议将三元运算符用圆括号括起来。

int result = a ? b : (c++); // 此处的执行顺序为 a, b, c
4. 三元运算符可用于递归调用

在 C/C++ 中,我们可以使用递归调用来完成某些复杂的操作。在这种情况下,三元运算符可以用来代替 if 语句。

int factorial(int n) {
    return (n <= 1) ? 1 : (n * factorial(n - 1));
}
5. 三元运算符可以用于选择数组元素

我们可以使用三元运算符来选择一个数组中的元素,例如:

int a[2] = {1, 2};
int i = 0;
int j = 1;
int result = (i > j) ? a[0] : a[1]; // 返回 a[1]
总结

三元运算符是 C/C++ 中非常强大的表达式之一,它的使用可以方便我们完成许多复杂的操作。在使用三元运算符时,我们需要注意一些细节,例如优先级、类型转换等等。