【问题标题】:C++ returning more than once?C++ 不止一次返回?
【发布时间】:2015-01-18 16:12:24
【问题描述】:

这是有效的吗?项目会编译吗?我现在无法访问编译器,但我的朋友在他的代码中有这个:

int returnTwice () {
  return 1;
  return 2;
}

为什么以及如何不合适?

谢谢!

感谢大家提出建设性意见。

【问题讨论】:

  • “朋友”是指“家庭作业”?
  • 如果你有互联网,那么你就有一个编译器。 ideone.com
  • 确保您可以访问编译器:ideone.com 仅作为示例。
  • 这段代码的问题不是双重返回。
  • 那你为什么不问问你的朋友呢?

标签: c++ return


【解决方案1】:

部分有效。

无效部分是您尝试在表达式中声明变量,这是不允许的。但是有多个无条件的return 语句并没有什么不合法的,但是只会执行第一个。

【讨论】:

    【解决方案2】:

    不,这在 C++ 或我所知道的任何其他编程语言中是不可能的。

    正如回答您问题的另一位用户所说,只会执行第一个 return 语句。完全取决于编译器,它可能会给你一个错误或警告,告诉你在一个定义的范围内有两个 return 函数,这里没有语法错误。 p>

    在 C++ 中,可以通过将每个变量放入一个向量并返回它来返回两个或多个值,如 documented in this question.

    return 返回分配给它的值并退出函数。

    在其他编程语言中,例如Lua 可以使用return variable1, variable2;

    【讨论】:

    • 在 Python 中也是如此(在我看来比 Lua 更流行)。
    • @Caduchon 我相信大多数“原始”语言都支持returning,PHP 肯定支持,我认为Java 也支持。
    【解决方案3】:

    这在 C++ 中是不可能的。但是,如果你想要类似的行为,你可以使用boost::tuple

    boost::tuple<double,double> figInfo(const Figure& fig)
    {
      double p = fig.getPerimeter();
      double s = fig.getSurface();
      return boost::make_tuple(p,s);
    }
    
    boost::tuple<std::string, unsigned short int, std::string> profile()
    {
      std::string first_name = "Christophe";
      unsigned short int age = 29;
      std::string address = "Unspecified";
      return boost::make_tuple(first_name, age, address);
    }
    

    【讨论】:

      【解决方案4】:

      当一个函数返回时,它停止执行。第一次 return 执行后的所有内容将永远不会被执行。因此,您应该为此类函数获得“错误:无法访问的代码”。

      【讨论】:

      • 这将是一个警告,而不是错误,它完全由编译器自行决定——标准没有强制要求。
      • 是的,我一直认为作为警告会更好。我只是从来没有这样看。
      猜你喜欢
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      相关资源
      最近更新 更多