非void函数的C ++崩溃没有return语句

use*_*853 -1 c++ android-ndk c++11

当像这样的非void函数没有返回任何内容时,我崩溃了:

bool ClassA::foo() {
    //---do something---
}

void ClassA::foo2() {
   foo();
}
Run Code Online (Sandbox Code Playgroud)

请注意,未使用此函数的返回值。崩溃是100%可重现的。它每次都崩溃。理想情况下,它应该发出警告,并且如果我不使用返回值,则不应崩溃。

此C ++代码在Android NDK版本r19上编译。

同样的代码在NDK-r15c上也能正常工作。

有什么最新变化吗?

Pau*_*ans 6

当像这样的非void函数没有返回任何内容时,我崩溃了:

因为这是未定义的行为。

C ++ 20标准草案的第8.6.3节:

从main以外的[non-void]函数的末尾流出会导致未定义的行为。

请注意,这与函数的实际调用方式无关。因此,即使返回值被忽略(例如在OP中),也是导致UB的“末尾流”。