在函数中间使用返回语句是否有用?C++

4

我有一个问题需要问,很长一段时间以来一直没有找到解释。我的老师们一直告诉我,在函数中间不应包含 return 语句,但从未告诉我原因。这主要是针对编程语言C、C++、C#和Java。

break 语句同样如此。

以下是一段代码示例,由于其中的 return 语句而被认为是无效的。

void Stack::Extract()
{
    if (Times == 0) 
    {
        cout << "The stack is empty, no number can be drawn" << endl;
        return;
    }

    cout << "Extracted value: " << Vet[Counter-1] << endl;
    Vet[Counter-1] = 0;
    Times--;
    Counter = Times;
}

这是从堆栈(通过数组实现)中提取值的函数,这是一个分配给班级的简单练习。

我在这里询问信息,因为如果不允许在函数中间使用返回,则需要知道原因

在这种情况下,我保存了临时变量的声明和if / else结构的连接,以及防止在不需要时执行整个函数代码。

编辑“需要详细信息或澄清”:

我正在阅读所有的评论并感谢您的帮助。我的问题就是我写的那样,所以我认为它不需要详细信息或澄清。


12
你的老师们错误地将自己的看法当作事实陈述。如果你的代码干净整洁,那么在方法中间甚至靠近开头放置返回语句是没有任何问题的。优秀的代码永远胜过严格的规则——尤其是那些毫无理由的规则。(借用我最喜欢的作者特里·普拉切特的话:规则是为了在你打破它们之前先让你思考它们)。 - Franz Gleichmann
6
了解:早期返回模式 ;- ) - Scheff's Cat
3
历史上有一些不再像过去那么重要的原因,不建议这样做。在早期的编译器中,由于优化能力较差,会影响到优化结果。此外,在旧代码中,如果某人使用 "new" 分配内存到一个裸指针中,另一个开发者在函数中间加入"return" 却没有意识到,可能会导致内存泄漏。现在随着每个人都使用 RAII、智能指针和其他可以帮助你避免错误的工具,这种风险已经减少了。 - Joe
4
我知道这很难相信,但您的老师可能从来没有亲自编写过实际的生产代码。 - Dave Doknjas
4
“经典”例子可以是复杂的搜索算法——一旦找到匹配项,返回结果是一个明显清晰的方法,而不是一堆中断和“已找到”标志。 - Martin James
显示剩余16条评论
1个回答

10

在函数内使用返回值可以使生活变得更加轻松。

if (x == 0) return;
do other stuff..

代码变得更易读。 我猜,你的老师对这一点有一种奇怪的方法。 我的建议是:只要你必须遵守他的规定,请遵守他的规定。 之后就像99%的行业那样去做。


5
如果老师真的花时间写代码,他们会遵循99%的规则:"当你知道完成了,就离开方法。" - Dave Doknjas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接