正如所料,编译器(VisualStudio 2008)将发出警告
警告C4715:'doSomethingWith':并非所有控制路径都返回一个值
编译以下代码时:
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;
}
Run Code Online (Sandbox Code Playgroud)
但程序运行得很好.函数doSomethingWith()的返回值为0.
是仅仅是未定义的行为,还是存在一定的规则如何在运行时创建/计算结果值.非POD数据类型作为返回值会发生什么?
pio*_*otr 17
它是ISO C++标准6.6.3节中指定的未定义行为:
流出函数末尾相当于没有值的返回; 这会导致值返回函数中的未定义行为.
对于x86处理器,标准调用约定将返回值放入EAX寄存器.实际上,这意味着对于大多数编译器,如果我们到达函数的末尾而不返回,则将返回最后一个数学运算的结果.但是,你不能依赖它,它不便携.
http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl