缺less返回值的函数,运行时的行为

正如所料,编译器(VisualStudio 2008)将发出警告

警告C4715:'doSomethingWith':并不是所有的控制path都返回一个值

编译下面的代码时:

int doSomethingWith(int value) { int returnValue = 3; bool condition = false; if(condition) // returnValue += value; // DOH return returnValue; } int main(int argc, char* argv[]) { int foo = 10; int result = doSomethingWith(foo); return 0; } 

但程序运行得很好。 函数doSomethingWith()的返回值是0。

是只是未定义的行为,或者是否有一定的规则如何在运行时创build/计算结果值。 非POD数据types作为返回值会发生什么情况?

它是未定义的行为,如ISO C ++标准第6.6.3节所述:

从函数的结尾stream出相当于没有值的返回; 这会导致值返回函数中的未定义行为。

对于x86处理器,标准调用约定将返回值放到EAX寄存器中。 实际上,这意味着对于大多数编译器来说,如果我们到达函数的末尾而没有返回最后一次math运算的结果,将会返回。 你不能依靠它,它不是便携式的。

http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl

不从一个返回值的函数返回值会导致未定义的行为。