c++ - 非 void 函数上的 C++ 崩溃没有返回语句
问题描述
当像这样的非 void 函数没有返回任何内容时,我遇到了崩溃:
bool ClassA::foo() {
//---do something---
}
void ClassA::foo2() {
foo();
}
请注意,未使用此函数的返回值。并且崩溃是 100% 可重现的。它每次都崩溃。理想情况下它应该产生一个警告,如果我不使用返回值,它不应该崩溃。
此 C++ 代码在 Android NDK 版本 r19 上编译。
同样的代码在 NDK-r15c 上也可以正常工作。
有最新的变化吗?
解决方案
当像这样的非 void 函数没有返回任何内容时,我遇到了崩溃:
因为这是未定义的行为。
C++20 标准草案第 8.6.3 节:
从除 main 之外的 [non-void] 函数的末尾流出会导致未定义的行为。
请注意,这与函数的实际调用方式无关。因此,即使忽略返回值(如在 OP 的情况下),导致 UB 的也是“从末端流出”。
推荐阅读
- python - 如何在 python tkinter 画布中使用 create_line 创建五边形和六边形?
- mysql - 显示其他表中每一行的所有数据和计数
- angular-material - 在编辑组件中设置下拉值
- java - 如何解决 wsdl 文件中的消息标签错误?
- libgdx - 在某个原点旋转后获取 Actor 位置
- php - 如何在 PHP 中分解具有多位数字的整数数组
- c# - 如何从 c# 的 knx 组地址学习传感器数据?
- tensor2tensor - 如何在tensor2tensor中使用F1分数
- .net - IIS 错误 启动应用程序时发生错误
- android - 如何在android中单击按钮或查看另一个活动的背后