复合语句
写在花括号{}中的内容组成的语句,就是复合语句。特别的,如果你只写了一个花括号,里面什么内容都没有,这也是一种空语句,相当于只有一个分号。
复合语句有三个主要特点:
1,整个花括号中虽然可能包括了多条语句,但是算作一个复合语句。
2,复合语句有自己的作用域,因此在离开复合语句以后,其中定义的变量会销毁。
3,复合语句的结束不需要分号,当然也许从这是一个语句的角度来说,应该要写分号才对,但是不写分号可以算作是一种福利。也就是既然已经知道它在哪里结束了,就不用再额外写结束标志了。
复合语句的作用
1,当只需要一条语句,但是一条语句无法满足实际需要的时候,需要使用复合语句。经常会发生于选择或者循环语句使用的时候。
#include <iostream>
using namespace std;
int main()
{
int a = 500;
if (a > 0)
{
a += 20;
cout << "a: " << a << endl;
}
}
2,由于复合语句有自己独立的作用域,因此,可以通过复合语句来定义重名变量。
这个在很多情况下,可能是很有用的。因为很多时候,给变量起一个好的名字也是很困难的,尤其在反复使用相同的功能的情况下,如果必须保证变量不重名的话,很可能就要加数字表示了。因此,如果可以将定义重名变量的部分写入复合语句之中,就可以让变量名可以重复使用。
#include <iostream>
using namespace std;
int main()
{
{
int a = 520;
cout << a << endl;
}
// 这两个a所在的作用域不同,不会互相影响
int a = 1314;
cout << a << endl;
}
思考:是否应该总是使用复合语句
之前,我们说到在条件或者循环语句中,可以使用复合语句,那么,如果不使用复合语句也可以完成,是否应该总是使用复合语句呢?
#include <iostream>
using namespace std;
int main()
{
int a = 520;
// 不使用复合语句
if (a > 0)
cout << a << endl;
// 使用复合语句
if (a > 0)
{
cout << a << endl;
}
}
最终的运行结果自然是没有差别的,但是像这样只需要一个简单语句就可以完成的工作,到底是否应该使用复合语句呢?
使用复合语句的坏处是什么,很显然是不美观。第一种没使用复合语句的写法很简洁,一句话就解决了。第二种使用了复合语句的写法很多余,就是花括号没有发挥作用。那么在这种情况下,到底使用复合语句好不好呢?似乎答案已经明确了,不使用复合语句更好。
但是真的是这样吗?如果从长远角度来说的话,这个程序如果以后还需要更新和维护,那么很可能发生这样一种情况,以前在这个if语句中,只需要一句就能解决的问题,现在解决不了了,必须要增加更多的语句。在这种情况下,如果我们使用的是不使用复合语句的版本,那么我们还要先为其添加花括号,然后才能开始写新的需求,比较麻烦。而如果使用的是有复合语句的版本,那么我们直接换行以后,继续添加语句即可。那这样来看的话,似乎又是总是使用复合语句更好了。
因此,如果我们非要得到一个结论的话,那就是:在能不用复合语句的情况下,如果这段代码是不会改变的(至少在可以预见的未来,你认为它应该不会被改变),那么,不使用复合语句更好。如果这段代码,后续随时都可能改变,那么应该总是使用复合语句。
当然,这是一个建议,最终要如何决定代码风格自然还是取决于你自己。
顺便一提,如果你决定要能不使用复合语句就不使用复合语句的话,我的建议是,如果你还不明确代码要怎么写,你可以先把复合语句的花括号写上。如果发现没用到,那再删掉就是了。这样可以有效避免,你认为这里不需要复合语句,等到第一句写完了,才发现需要复合语句的情况。毕竟,删掉括号要比添加括号更加容易。
本文详细介绍了C++中的复合语句,包括其特点、作用及使用场景。讨论了是否应总是使用复合语句的问题,指出在代码易变性和美观性的权衡中,复合语句的选择应视具体情况而定。最后提供了一种编写代码的建议,以避免因需求变化导致的代码调整困难。
392






