C++编译器 - 忘记了返回语句

Sun*_*ner 3 c++ compiler-errors

我写了一个简单的函数来返回一个字符串让我在屏幕上显示.

static std::string  myFun(int myId){
  std::ostringstream stream;
  int myStatus;
  if(get_status(&myStatus)) stream << get_error();
  else{
    stream << "my status:" << myStatus;
  }
    return stream.str();
}
Run Code Online (Sandbox Code Playgroud)

代码本身可能并不重要.但我把它包含在以防万一.我遇到的问题是因为在我最初的尝试中,我忘了包含return语句

return stream.str();
Run Code Online (Sandbox Code Playgroud)

编译器编译没有错误,但是当我运行它时.该程序不断收到消息

Aborted(core dumped)
Run Code Online (Sandbox Code Playgroud)

我吓坏了,我搜索了stackoverflow并安装了valgrind和一切.然后我检查代码,我意识到我只是忘记包含return语句!我希望编译器能够注意到这些错误.

有人可以向我解释为什么编译器无法检测到错误吗?

Bat*_*eba 7

未定义return在非void函数的所有控制路径上没有值的代码的行为.(C++有很多未定义的构造;也许是开发人员喜欢最大性能和可移植性的结果.)

一个好的编译器会警告你这个,甚至会提供设置来将警告(以及其他警告)升级为错误.请参阅编译器文档.