是一个同事搞的代码,我看到编译警告后,让他改,他改了还没提交,
然后我用没改的代码去查另外一个问题,遇到了这个UB问题的现象,折腾了半天。
这里有一个类似的例子,g++比较极端,gcc略好点(要加一句#include <stdbool.h>才能用gcc编译):
https://pvs-studio.com/en/blog/posts/cpp/0917/
C++标准里的这句,其实有点误导,前半句让人以为是会返回随机值,后半句定性为UB:
Flowing off the end of a function is equivalent to a return with no value; this results in undefined behavior in a value-returning function.
【 在 iconquer 的大作中提到: 】
: 文心的回答:
: 您的问题涉及到了C++的未定义行为(Undefined Behavior)以及GCC编译器在Release版本下的优化问题。
: 首先,C++标准规定,如果一个函数没有显式的返回语句,且函数的返回类型不是void,那么这个函数的返回值是未定义的。未定义行为是一种编译器不会进行任何错误检查的特殊行为,它可能会导致任何结果,包括看似合理的结果。
: ...................
--
修改:z16166 FROM 221.218.160.*
FROM 221.218.160.*