c++ - 在 C++ 函数中使用多个作用域 block

标签 c++ function scope block

<分区>

我开始越来越喜欢使用连续作用域 block 编写长 C++ 算法函数,如下所示:

void my_algorithm(const MyStruct1 &iparam1, MyStruct2 &oparam2)
{
    // First block
    MyStruct3 intermediate_var3;
    {
        double temporary_var;
        // Functional step 1.1
        // Functional step 1.2
        intermediate_var3 = ...
    }
    // Second block
    MyStruct4 intermediate_var4;
    {
        double temporary_var;
        // Functional step 2.1
        // Functional step 2.2
        intermediate_var4 = ...
    }
    // Final block
    {
        int temporary_var;
        oparam2 = ...
    }
}

我开始认为这是一个很好的方法来阐明函数结构和限制临时变量的范围(例如计数器ijk 等)。我看到这样的范围 block 在 C 函数中有意义以启用新的声明(请参阅 Why enclose blocks of C code in curly braces?)。

在 C++ 的上下文中,这是好的还是坏的做法?

最佳答案

这是一个明确的信号,您应该将这些单独的 block 提取到单独的函数中。

MyStruct3 DoSth3(params)
{
    double temporary_var;
    // Functional step 1.1
    // Functional step 1.2
    return ...
}

MyStruct4 DoSth4(params)
{
    double temporary_var;
    // Functional step 2.1
    // Functional step 2.2
    intermediate_var4 = ...
}

void my_algorithm(const MyStruct1 &iparam1, MyStruct2 &oparam2)
{
    // First block
    MyStruct3 intermediate_var3 = DoSth3(params);

    // Second block
    MyStruct4 intermediate_var4 = DoSth4(params);

    int temporary_var;
    oparam2 = ...
}

您可能会担心 DoSth3DoSth4 是公开的,因为它们在 my_algorithm 的上下文中应该是私有(private)的。这种情况可以通过以下方式解决:

class my_algorithm
{
private:
    static MyStruct3 DoSth3(params);
    static MyStruct4 DoSth4(params);

public:
    static void Perform(const MyStruct1 &iparam1, MyStruct2 &oparam2);
};

关于c++ - 在 C++ 函数中使用多个作用域 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21278015/

相关文章:

c++ - 有没有办法转发声明协方差?

c++ - 如何在将函数作为参数的函数的参数内定义函数

c++ - Boost Spirit Lexeme与No_skip

Javascript 将事件传递给函数

c++ - 我需要通过我的函数传递什么样的参数。另外,如何让它根据用户需要循环多次?

Python 全局命名空间值

c++ - makefile 发布多个定义

c# - 在没有参数的另一个函数中使用一个函数的变量?

c - 在文件中查找给定的句子

php - 从 CodeIgniter 中的 View 检查 session