【C/C++超级基本功】条件(分支)语句精髓

文章详细介绍了C++中的if语句和switch语句的使用,包括逻辑值的处理,如bool类型、整数、字符和逻辑运算。同时,讨论了代码风格问题,如避免悬垂else,使用花括号增加可读性,以及switch语句的结构和风格多样性。还提到了if语句和switch语句的嵌套与优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

一、逻辑值

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分支里最好不要写循环。

本篇博客到此为止,有问题欢迎在评论区评论。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值