为什么gcc 4.6.1
在没有return语句的情况下编译以下函数?
uint32_t& siof_solution() {
static uint32_t example = (uint32_t) 7; // Doesn't really matter
// return example;
}
返回1
。 我看到了。
答案 0 :(得分:9)
即使C ++函数声明它们,也不需要返回值。如果他们不这样做,结果是未定义的行为。在你的情况下,通过Sheer Dumb Luck,代码似乎正在工作,但它不便携而且不安全。这可能会崩溃,返回垃圾指针,导致调试错误等等。
我认为这个决定的原因主要是与C的向后兼容,尽管我不确定。
希望这有帮助!
答案 1 :(得分:0)
回程检查以某种方式关闭。我甚至不记得C ++中是否需要它。你的案例中返回的值是内存垃圾。