有时候,我们希望程序会根据条件的不同执行不同的操作,此时就要请出我们的判断语句了,C++中常用的判断语句有 if 语句和 switch 语句,下面将会分别介绍。

判断语句:

if 语句和 if…else 语句:

C++ 中 if 语句的语法:

1
2
3
4
if(boolean_expression)
{
// 如果布尔表达式为真将执行的语句
}

如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。

ok,也是很浅显易懂,但是如果我们想让布尔表达式为假时执行另一个语句怎么办呢?答案就是使用 else。

C++ 中 if…else 语句的语法:

1
2
3
4
5
6
7
8
if(boolean_expression)
{
// 如果布尔表达式为真将执行的语句
}
else
{
// 如果布尔表达式为假将执行的语句
}

C++ 中 if…else if 语句的语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(boolean_expression 1)
{
// 当布尔表达式 1 为真时执行
}
else if( boolean_expression 2)
{
// 当布尔表达式 2 为真时执行
}
else if( boolean_expression 3)
{
// 当布尔表达式 3 为真时执行
}
else
{
// 当上面条件都不为真时执行
}

但是,当使用 if…else if…else 语句时,以下几点需要注意:
- 一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。 - 一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。 - 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。

同时,if 语句和 if…else 语句也可以进行嵌套,不过多赘述。

switch 语句:

当我们需要判断很多条件时,除了连续的 if…else if…else 语句之外,还可以使用 switch 语句,他有以下几个好处:
- 执行效率更高 - 代码结构更清晰 - 类型安全限制

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

以下是C++ 中 switch 语句的语法:

1
2
3
4
5
6
7
8
9
10
11
12
switch(expression){
case constant-expression :
statement(s);
break; // 可选的
case constant-expression :
statement(s);
break; // 可选的

// 您可以有任意数量的 case 语句
default : // 可选的
statement(s);
}

switch 语句必须遵循下面的规则: - switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。 - 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。 - case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。 - 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。 - 当遇到 break 语句时,switch 终止(直接跳出switch),控制流将跳转到 switch 语句后的下一行。 - 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。 - 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

在使用过程中,最好遵循以下的建议: 1. 必加break:除非刻意实现fall-through(贯穿)逻辑(需注释说明) 2. 善用default:处理未预见值(即使你认为不会出现) 3. 枚举替代魔数case Color::Red 比 case 1 更安全,同时注意浮点数和字符串类型是不可行的。 4. 性能敏感场景:优先选择 switch(如解析器、状态机) 5. 复杂条件表达式:仍用 if-else(如 if (x>0 && y<0)

同样地,switch也支持嵌套。~~但是我个人觉得这样做会非常难读… ~~

? : 运算符:

条件运算符 ? :,可以用来替代 if…else 语句。它的一般形式如下:

1
Exp1 ? Exp2 : Exp3;

其中,Exp1、Exp2 和 Exp3 是表达式。 ? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。

在某些情况下使用 ?: 运算符确实会简化代码,但是这玩意的可读性挺差的,看情况使用。

小结:学习了C++中判断语句的用法。