C++复合语句(代码块)详解与嵌套用法(含代码示例)

什么是复合语句(代码块)?

复合语句(又称“代码块”或“块语句”)是由零条或多条语句组成的集合,编译器将其视为一条完整语句。

代码块以左大括号 { 开始,以右大括号 } 结束,其间放置待执行的语句。在任何允许出现单条语句的上下文中,均可使用代码块。代码块末尾无需分号。

在函数定义中,函数体本身就是一个代码块:

int add(int x, int y)
{ // 代码块开始
    return x + y;
} // 代码块结束(无分号)

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

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

    return 0;

} // 代码块结束(无分号)

代码块的嵌套

虽然函数不能嵌套定义,但代码块可以嵌套在其他代码块之内:

int add(int x, int y)
{ // 外层代码块
    return x + y;
} // 外层代码块结束

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

    int value {};

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

    return 0;

} // 外层代码块结束

在这种嵌套关系中,包含其他代码块的称为“外层代码块”,被包含的称为“内层代码块”或“嵌套代码块”。

使用代码块实现条件多语句执行

代码块最常见的用途之一是与 if 语句结合。默认情况下,if 语句在条件为真时仅执行一条语句;若需执行多条语句,可用代码块替换该单条语句。

示例:

#include <iostream>

int main()
{ // 外层代码块开始
    std::cout << "请输入一个整数: ";
    int value {};
    std::cin >> value;

    if (value >= 0)
    { // 嵌套代码块开始
        std::cout << value << " 是非负整数\n";
        std::cout << "该数的两倍为 " << value * 2 << '\n';
    } // 嵌套代码块结束
    else
    { // 另一嵌套代码块开始
        std::cout << value << " 是负整数\n";
        std::cout << "该数的绝对值为 " << -value << '\n';
    } // 另一嵌套代码块结束

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

当用户输入 3 时,程序输出:

请输入一个整数: 3
3 是非负整数
该数的两倍为 6

输入 -4 时,输出:

请输入一个整数: -4
-4 是负整数
该数的绝对值为 4

代码块的嵌套层级

甚至可以在嵌套代码块内再嵌套代码块:

#include <iostream>

int main()
{ // 层级 1 的代码块
    std::cout << "请输入一个整数: ";
    int value {};
    std::cin >> value;

    if (value > 0)
    { // 层级 2 的代码块
        if ((value % 2) == 0)
        { // 层级 3 的代码块
            std::cout << value << " 是正偶数\n";
        }
        else
        { // 层级 3 的另一代码块
            std::cout << value << " 是正奇数\n";
        }
    }

    return 0;
}

函数的“嵌套层级”(nesting level 或 nesting depth)指在函数内部任一时刻所能处于的最大代码块深度(包含最外层)。上例共有 4 个代码块,但最大嵌套层级为 3,因为程序运行时不可能同时位于超过 3 层代码块内。

C++ 标准要求编译器至少支持 256 层嵌套,但并非所有实现均满足(例如,截至撰写时 Visual Studio 支持的层数更少)。

最佳实践
将函数的嵌套层级控制在 3 层以内。若嵌套过深,应将最深层代码块提取为独立函数,以提高可读性与可维护性。

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"