有时候,我们希望程序会根据条件的不同执行不同的操作,此时就要请出我们的判断语句了,C++中常用的判断语句有 if 语句和 switch 语句,下面将会分别介绍。
判断语句
if 语句和 if...else 语句:
C++ 中 if 语句的语法:
if(boolean_expression)
{
// 如果布尔表达式为真将执行的语句
}
如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。
ok也是很浅显易懂,但是如果我们想让布尔表达式为假时执行另一个语句怎么办呢?答案就是使用 else。
C++ 中 if...else 语句的语法:
if(boolean_expression)
{
// 如果布尔表达式为真将执行的语句
}
else
{
// 如果布尔表达式为假将执行的语句
}
当然我们也可以判断更多条件,这时候可以使用 else if。
C++ 中 if...else 语句的语法:
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 语句的语法:
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 语句不是必需的。
在使用过程中,最好遵循以下的建议:
- 必加
break:除非刻意实现fall-through(贯穿)逻辑(需注释说明) - 善用
default:处理未预见值(即使你认为不会出现) - 枚举替代魔数:
case Color::Red比case 1更安全,同时注意浮点数和字符串类型是不可行的。 - 性能敏感场景:优先选择
switch(如解析器、状态机) - 复杂条件表达式:仍用
if-else(如if (x>0 && y<0))
同样地,switch也支持嵌套。但是我个人觉得这样做会非常难读...
? : 运算符
条件运算符 ? :,可以用来替代 if...else 语句。它的一般形式如下:
Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表达式。
? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。
虽然在某些情况下使用 ?: 运算符确实会简化代码,但是这玩意的可读性简直是灾难,尤其是在嵌套的情况下,能别用就别用了吧...

Comments NOTHING