为什么这个C ++编译?

时间:2012-02-16 20:27:17

标签: c++ function return

  

可能重复:
  Why can you return from a non-void function without returning a value without producing a compiler error?

为什么gcc 4.6.1在没有return语句的情况下编译以下函数?

uint32_t& siof_solution() {
   static uint32_t example = (uint32_t) 7; // Doesn't really matter
   // return example;
}

返回1我看到了

2 个答案:

答案 0 :(得分:9)

即使C ++函数声明它们,也不需要返回值。如果他们不这样做,结果是未定义的行为。在你的情况下,通过Sheer Dumb Luck,代码似乎正在工作,但它不便携而且不安全。这可能会崩溃,返回垃圾指针,导致调试错误等等。

我认为这个决定的原因主要是与C的向后兼容,尽管我不确定。

希望这有帮助!

答案 1 :(得分:0)

回程检查以某种方式关闭。我甚至不记得C ++中是否需要它。你的案例中返回的值是内存垃圾。

相关问题