【问题标题】:Difference in a way of writing a void function return [duplicate]编写void函数返回的方式的差异[重复]
【发布时间】:2015-06-07 06:05:53
【问题描述】:

这是我找到的代码 sn-p here

void App::onSave()
{
    if (filename.isEmpty())
        return onSaveAs();

//do saving here
}

void App::onSaveAs()
{
    QString f = QFileDialog::getSaveFileName(NULL, "Save as", "", "*.sb");
    if (!f.isEmpty())
    {

//filename generation

        return onSave();
    }
}

我的问题是:return onSave(); 之间有什么区别,因为它写在这里,和类似的东西:

onSave();
return;

这让我很困惑,因为这些函数是 void 类型并且不返回任何内容。

【问题讨论】:

  • 嗯,看起来是有效的。我不知道!谢谢你教我一些新东西。
  • @MrLister 没问题! ;) 实际上,我也没有。这就是让我如此惊讶的原因。

标签: c++ return void


【解决方案1】:

C++ 标准说:

带有 void 类型表达式的 return 语句只能在返回类型为 cv void 的函数中使用;表达式在函数返回给它的调用者之前被计算。

所以这两种形式在 C++ 中是等价的。

请注意,C 标准说:

带有表达式的return语句不得出现在返回类型为void的函数中

在 C++ 中放宽这个限制可能与模板有关。

【讨论】:

    【解决方案2】:

    你问:

    有什么区别

    return onSave();
    

    onSave();
    return;
    

    两者没有区别。

    【讨论】:

    • 两者都编译成相同的二进制文件,在任何优化级别上?好的。
    • @Lister,我对此没有明确的答案。如果两者之间有任何性能差异,我会感到非常惊讶。
    猜你喜欢
    • 2015-04-04
    • 2016-08-28
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多