章节目录

代码块

本节阅读量:

代码块语句(block statement)是零个或多个语句组成的一组复合语句,编译器将其视为单个语句。

代码块以「 { 」符号开始,以「 } 」符号结束,要执行的语句放在两者之间。代码块可以在允许单个语句的任何地方使用。末尾不需要分号。

您已经看到了编写函数时的代码块示例,因为函数体是代码块:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
int add(int x, int y)
{ // 代码块开始
    return x + y;
} // 代码块结束 (没有分号)

int main()
{ // 代码块开始

    // 多个语句
    int value {}; // 这是变量初始化,不是代码块
    add(3, 4);

    return 0;

} // 代码块结束 (没有分号)

代码块嵌套

函数不能嵌套在其他函数中,但代码块可以嵌套在其他块中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
int add(int x, int y)
{ // 代码块开始
    return x + y;
} // 代码块结束 

int main()
{ // 外围代码块

    // 多个语句
    int value {};

    { // 内部嵌套的代码块
        add(3, 4);
    } // 内部嵌套的代码块结束

    return 0;

} // 外围代码块结束

使用代码块在条件语句中执行多个语句

代码块的最常见用例之一是与if语句结合使用。默认情况下,如果条件表达式的计算结果为true,则if语句执行单个语句。如果希望在这时执行多个语句,则可以用语句块替换这条语句。

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>

int main()
{ // 外围代码块
    std::cout << "Enter an integer: ";
    int value {};
    std::cin >> value;
    
    if (value >= 0)
    { // 内部嵌套的代码块
        std::cout << value << " is a positive integer (or zero)\n";
        std::cout << "Double this number is " << value * 2 << '\n';
    } // 内部嵌套的代码块结束
    else
    { // 内部嵌套的代码块
        std::cout << value << " is a negative integer\n";
        std::cout << "The positive of this number is " << -value << '\n';
    } // 内部嵌套的代码块结束

    return 0;
} // 外围代码块结束

如果用户输入数字3,该程序将打印:

1
2
3
Enter an integer: 3
3 is a positive integer (or zero)
Double this number is 6

如果用户输入数字-4,该程序将打印:

1
2
3
Enter an integer: -4
-4 is a negative integer
The positive of this number is 4

代码块多层嵌套

代码块可以多层嵌套:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

int main()
{ // block 1, 层级 1
    std::cout << "Enter an integer: ";
    int value {};
    std::cin >> value;
    
    if (value >  0)
    { // block 2, 层级 2
        if ((value % 2) == 0)
        { // block 3, 层级 3
            std::cout << value << " is positive and even\n";
        }
        else
        { // block 4, 层级 3
            std::cout << value << " is positive and odd\n";
        }
    }

    return 0;
}

函数中代码块的最大嵌套深度,是从最外围到最内层的代码块的级数。在上面的函数中,有4个块,但嵌套级别为3,因为在该程序中,最大只能到第三层。

C++标准规定C++编译器应该支持256级嵌套——然而,并非所有的编译器都支持(例如,在编写本文时,VisualStudio支持较少的嵌套)。

最好将嵌套级别保持在3或更少。正如过长的函数是重构的良好候选者(分解为较小的函数)一样,过度嵌套的块很难阅读,也是重构的良好候选对象(大多数嵌套的块可以重构为单独的函数)。


6.7 第六章总结

上一节

7.1 自定义命名空间和作用域解析操作符

下一节