【问题标题】:Using a return statement outside of a loop and one inside of it in a function [duplicate]在循环之外使用返回语句,在函数中使用循环内部的语句[重复]
【发布时间】:2021-02-04 19:35:09
【问题描述】:

“C++ Primer”指出,在包含return 的循环之后未能提供return 是一个错误。

这是真的吗?我知道的是,一旦return 语句被执行,控制就会跳过函数的其余部分回到调用函数。

那么,在循环之外需要return 是什么?

【问题讨论】:

  • 如果循环完成而没有执行return
  • C++ 入门第 5 版 - 6.3.2
  • 我可以想象在循环之后不需要返回的代码,例如,如果循环是无限的。所以我认为这是一条普遍的好建议,而不是硬性规定。基本上所有通过非空函数的可能控制路径都应该返回一个值。
  • 请张贴完整的报价。我可以想象这本书指的是循环,例如不一定有超过零次的迭代,一个在某处有中断或其他控制流的循环
  • 我忍不住提出这个问题,我接受的答案是:stackoverflow.com/questions/46467407/…

标签: c++ function loops return


【解决方案1】:

如果函数具有非void 返回类型,您需要在函数执行流程中每个 可能的非异常退出点使用return 语句。这意味着在循环之后有一个return 语句,以防循环结束而没有触及其内部return,例如:

void loop1()
{
    for(...)
    {
        if (condition)
            return; // <-- function exits here
    }
    // <-- if reach here, return is optional...
}

int loop2()
{
    for(...)
    {
        if (condition)
            return ...; // <-- function exits here
    }
    return ...; // <-- if reach here, return is required...
}

【讨论】:

  • 如果我确定内部return 语句将被执行怎么办?在循环之后不提供一个仍然是错误吗?
  • 好吧,在一个奇怪的代码设计世界中,您可以通过使用throw 语句来避免最后的return 语句。
  • @Mason 这可能是原因之一,编译器仅将其报告为警告。
  • @Mason 当返回类型不是void 时,每条路径都必须指向return,无论是循环还是其他控制流
  • @AdrianMole 这并不奇怪。例如,at 成员函数可以很好地做到这一点,如果循环搜索一个元素,并且该函数指定它如果找不到则抛出。
猜你喜欢
  • 2018-08-05
  • 2019-02-12
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多