【问题标题】:Does returning to another void function from a void function is legal in C++?从 void 函数返回到另一个 void 函数在 C++ 中是否合法?
【发布时间】:2021-06-06 00:52:25
【问题描述】:

C 标准 prohibit 这个。但我不确定 C++ 标准对此有何规定。

#include <iostream>

void bar() {
    std::cout << "From Bar" << "\n";
}

void foo() {
    std::cout << "From Foo" << "\n";
    
    return bar();
}

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

程序编译并运行良好。我喜欢return bar();而不是bar(); return;的风格

这在 C++11 中合法吗?

下面的答案提到它在最新草案中是合法的。

【问题讨论】:

  • 只需要声明bar(); 和之后的return; 就足够了。我不会称之为 recursion 顺便说一句。

标签: c++ recursion


【解决方案1】:

是的,这在 C++ 中是允许的。标准说(引用最新草案):

[stmt.return]

... 带有 void 类型操作数的 return 语句只能在返回类型为 cv void 的函数中使用。 ...

【讨论】:

  • 该草案是否适用于 C++11 或 C++20(或未来)?
  • @jeffbRTC 当前草案可能适用于未来。您可以查看较旧的草稿,看看规则是否随时间发生了变化。
  • 在哪里可以找到旧草稿的链接?
  • 迄今为止所有已批准的 C++ 标准中都存在类似的声明,尽管措辞略有变化。例如,C++98,第 6.3.3 节 [stmt.return],第 3 段指出。“带有“cvvoid”类型表达式的返回语句只能用于返回类型为 cv void 的函数;表达式在函数返回其调用者之前被评估。"
猜你喜欢
  • 2023-01-28
  • 2016-08-28
  • 2016-04-22
  • 2021-04-02
  • 1970-01-01
  • 2011-03-26
  • 2017-07-13
  • 2015-01-24
  • 1970-01-01
相关资源
最近更新 更多