4

这似乎是一个荒谬的问题,但今天我用 C++ 编写了一个成员函数,它应该返回和 int,但并非总是如此。我什至写了一个不返回值的非常简单的函数......

int derp()
{
    if (11 == 22) return 0;
}

这是最近的变化吗?我的编译器坏了吗?哈哈

编辑:这确实编译顺便说一句

4

2 回答 2

7

在非 void 函数中,所有控制路径都必须返回。这里的关键问题是编译器不需要诊断它。注意编译正确不一定相同。所有正确的代码都会编译,但并非所有编译的代码都是正确的。

于 2012-12-03T20:02:51.437 回答
4

不,C++ 从不要求所有控制路径都返回一个值。它在 C++11 和 C++03 中也有效(在语法上)。

一些编译器可以检测到您缺少返回的大多数情况,但不需要进行诊断。如果至少有一个返回的控制路径,大多数都不会发出诊断。

无论如何,它是UB。

于 2012-12-03T19:54:52.183 回答