c++ - 在 C++ 中使用 return 语句退出函数

标签 c++ function menu return submenu

<分区>

当我们有函数时,return 语句允许我们提前退出函数。即使对于没有返回类型的函数,我们也可以使用return 来退出当前函数。

我的问题是:使用return 退出函数以返回调用函数的点是否是一个好的编码习惯?

这种情况的一个很好的例子是带有子菜单的主菜单。

示例:

//Decalration
void mainMenu(); 
void subMenu(); 

int main()
{
    mainMenu();
    return 0;
}

//Definition
void mainMenu();
{
    //some codes
    subMenu();
}

void subMenu();
{
    int option;
    cout << "Choose 1 to return to main menu" << endl;
    cout << "Choose 2 to do whatever..." << endl;
    cin >> option;
    if (option == 1)
        return;    //Return to main menu (<--- Is this a good coding practice?)
    else
        //some codes
}

注意:我不是在作业中寻求帮助。这是一个工作代码,我只是想知道使用return语句返回到调用正确做法的地步吗?如果不是,返回调用点的正确方法应该是什么。

最佳答案

C 和 C++ 在这方面有所不同。

在 C 中,提前返回很容易导致清理(甚至关键业务代码)无法执行,尤其是在代码维护了一段时间之后。

在 C++ 中,由于使用了异常,因此必须始终牢记提前退出的可能性。因此,在良好的 C++ 代码中,多次返回不会有问题。清理由析构函数自动执行,C++“RAII”。


从那里开始,这是个人喜好、项目编码指南等问题。


关于您的代码示例,

void subMenu();
{
    int option;
    cout << "Choose 1 to return to main menu" << endl;
    cout << "Choose 2 to do whatever..." << endl;
    cin >> option;
    if (option == 1)
        return;    //Return to main menu (<--- Is this a good coding practice?)
    else
        //some codes
}

另一种选择就是

void subMenu();
{
    int option;
    cout << "Choose 1 to return to main menu" << endl;
    cout << "Choose 2 to do whatever..." << endl;
    cin >> option;
    if (option != 1)
    {
        //some codes
    }
}

这导致“退出模态上下文”被更明显地特殊处理,但它已经被特殊处理了。

关于c++ - 在 C++ 中使用 return 语句退出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23458512/

相关文章:

C++ 控制台键盘事件

c++ - "Objective-C is a superset of C more strictly than C++"到底是什么意思?

c++ - 为什么使用不匹配的参数调用重载函数仍然有效

java - 删除 Android 应用程序上的 'menu'

jquery - 如何使粘性菜单过渡平滑

c++ - 为什么 (18446744073709551615 == -1) 是真的?

c++ - 访问集合中字符串的第一个字母 C++

javascript - 编写 Javascript 队列

javascript - 纯 JavaScript 的粘性 header ,存在 DOM 问题

html - 如何创建线条来分隔菜单中的元素?