停止! 以C ++的名义; 或为什么C ++函数不需要return关键字

tl; dr:C ++函数不需要 在它们中 使用 return 关键字即可使其具有良好的格式和可编译性,尽管它可能会导致未定义的行为。 您的特定编译器也可能发出警告或错误。 在几乎所有情况下,都需要一个 return 关键字。

C ++是一门以其失败能力而无法编译的语言而臭名昭著的语言,乍一看似乎对规范有很大的疏忽:非void函数不需要return关键字即可生成可编译的码。

显然,它已经注意到存在问题并显示了警告,但是无论如何都已经继续并创建了可运行的可执行文件。

那么为什么会这样呢? 这有什么连锁反应?

简而言之,在C ++规范中没有任何地方说明函数必须具有return关键字才能生成可编译的代码。 但是,它确实说,具有非空返回类型的任何函数,如果到达最后一行(您的右括号所在的位置),都会产生未定义的行为。

未定义的行为可能是任何东西-该程序可能崩溃,它可能返回垃圾值(这很可能是!),该程序甚至可能试图发动政变,并试图强行推翻当地政府。 这完全取决于编译器要执行的操作。

稍后我们将看一下特定的措词,但现在让我们考虑一下这对编译器的影响。

因为并非所有函数都必须返回。

对此没有特殊的编码编程建议-我当然不建议您在任何地方的代码中使用此怪癖。 希望它可以鼓励您对C ++的工作方式进行更深入的研究,并借此机会查看规范。

在评论中让我知道您是否觉得这很有趣,是否有任何要补充的内容,或者您​​认为我在解释暂停问题时犯了任何错误!

干杯!


一些进一步的阅读参考:

https://stackoverflow.com/questions/3402178/omitting-return-statement-in-c

C ++程序员应该知道哪些常见的未定义行为?

C ++程序员应该知道哪些常见的未定义行为? 像这样说:a [i] = i ++;

stackoverflow.com

https://stackoverflow.com/questions/1610030/why-does-flowing-off-the-end-of-a-non-void-function-without-returning-a-value-no