
一、逻辑值
if语句
if的括号里需要一个逻辑表达式,逻辑值是bool类型的true或false,注意在旧版C语言中没有bool类型。这个逻辑表达式可以是整数,整数的表现形式既可以是变量又可以是常量,任何不为零的整数的逻辑值为true,反之为false:
int a = 10, b = 0;
if (a) {
cout << "a true ";
}
if (b) {
cout << "b true ";
}
if (10) {
cout << "10 true ";
}
上述代码输出:a true 10 true
可以是char类型字符,因为字符作为逻辑值时可以自动转换为:
char c = 'k';
if (c) {
cout << "c true";
}
上述代码输出:c true
可以是逻辑运算式,一般有三种逻辑运算,与(&&)、或(||)、非(!),既可以单独使用也可以组合:
int a = 10, b = 0;
if (a && b) {
cout << "1 ";
}
if (a || b {
cout << "2 ";
}
if (!b) {
cout << "3 ";
}
上述代码输出:2 3
可以是比较式,如 ==、!=、>、<、>=、<=:
int a = 10, b = 15;
if (a == b) {
cout << "1 ";
}
if (a != b) {
cout << "2 ";
}
if (a < b) {
cout << "3 ";
}
上述代码输出:2 3
组合使用:
int a = 5, b = 0, c = 10;
if (a < c && !b) {
cout << "true";
}
//输出true
细节以及注意事项:
1.&&运算符的优先级比||高,如果想要先使用||,最好将其表达式用括号括起来,即便不影响逻辑:
int a = 0, b = 10, c = 20, d = 30;
//先运算10 == b && 20 == c
if (0 == a || 10 == b && 20 == c || 25 == d) {
}
//写成
if ((0 == a || 10 == b) && (20 == c || 25 == d)) {
}
2.&&会逻辑短路,也就是说&&前面的逻辑值如果为false,那么就直接退出,不会判断后面的逻辑值:
int a = 10, b = 20;
//20 == b不会被执行
if (15 == a && 20 == b) {
}
也就是说我们可以利用逻辑短路对条件进行优化,将容易为false的逻辑放在&&前面,可以减少&&后面的判断,提高性能。
4.嵌套问题,if的嵌套最好不要超过3层,如果超过了三层,最好进行优化,太多层的嵌套往往象征了代码的设计缺陷和不好的可读性。
switch语句
swicth语句的条件只能是基本数据类型的变量,如整形、字符,不能是浮点型。
int a = 10;
switch (a) {
default:
break;
case 1: {
//xxx
break;
}
}
char a = 'c';
switch (a) {
default:
break;
case 'a': {
//xxx
break;
}
}
二、代码风格问题
if语句风格
1.悬垂else问题,先看段代码:
int a = 10;
if (a > 0)
if (a > 1)
cout << "hhh";
else
cout << "xxx";
下面这个else是第一个if的分支还是第二个if的分支呢,貌似具有二义性。就C++而言,它规定else与离它最近的尚未匹配的if匹配,也就是说是第二个if。所以,最好对每个if语句加上花括号,并合理使用缩进:
int a = 10;
if (a > 0) {
if (a > 1) {
cout << "hhh";
} else {
cout << "xxx";
}
}
2.就算语句块只有一条语句,也建议加上花括号,有利于代码的扩展:
int a = 0;
if (0 == a)
cout << "hhh";
//改成
if (0 == a) {
cout << "hhh";
}
3.在用变量和常量进行等于比较时,建议常量写在==前面,防止少打一个=号变成对变量赋值:
int a = 10;
if (a == 10) {}
//最好写成
if (10 == a) {}
//特别是指针
int* ptr = &a;
//把
if (ptr == nullptr) {}
//写成
if (nullptr == ptr) {}
4.代码风格多种多样,可以自己选择:
//风格1,博主的风格,紧凑
if () {
//xxx
} else if () {
//xxx
} else {
//xxx
}
//风格2,秀气
if () {
//xxx
}
else if () {
//xxx
}
else {
//xxx
}
//风格3,规整
if ()
{
//xxx
}
else if ()
{
//xxx
}
else
{
//xxx
}
switch语句风格
switch的风格比较自由,case的括号可加可不加,多个case一起可以写在下面或者右边,default可以写在最上面也可以写在最下面,defualt情况多时建议写在最上面。
int a = 10;
switch () {
default:
break;
//加括号
case 1: {
break;
}
//不加括号
case 2:
break;
//左右case
case 3: case 4: {
break;
}
//上下case
case 5:
case 6: {
break;
}
}
case分支里最好不要写循环。
本篇博客到此为止,有问题欢迎在评论区评论。