在C++的switch
语句中,case
标签用于标识一个特定的值或情况,而break
语句用于终止switch
语句的执行,并跳出到switch
语句之后的第一条语句。将case
和break
搭配使用的主要目的是防止switch
语句的“贯穿”(fall through)行为。
“贯穿”是指当一个case
语句匹配成功并执行完相应的代码块后,如果没有break
语句,程序会继续执行下一个case
语句的代码块,直到遇到break
语句或switch
语句结束。这种行为可能不是程序员想要的,因为它可能导致逻辑错误或不可预测的行为。
#include <iostream>
int main() {
int value = 2;
switch (value) {
case 1:
std::cout << "Value is 1" << std::endl;
case 2:
std::cout << "Value is 2" << std::endl;
case 3:
std::cout << "Value is 3" << std::endl;
default:
std::cout << "Unknown value" << std::endl;
}
return 0;
}
value
与case 2
匹配时,由于没有break
语句,程序会继续执行case 3
和default
的代码块。
为了避免这种情况,每个case
语句后面都应该紧跟一个break
语句,除非你有意使用“贯穿”行为来实现某种特定的逻辑(这种情况很少见,并且通常不推荐)。
case后面可以直接跟return。
int basicOp(char op, int val1, int val2) {
switch(op) {
case '+': return val1+val2;
case '-': return val1-val2;
case '*': return val1*val2;
case '/': return val2 != 0 ? val1/val2 : 0;
}
}