具有缺失返回值的函数,运行时的行为

nab*_*lke 12 c++

正如所料,编译器(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节中指定的未定义行为:

流出函数末尾相当于没有值的返回; 这会导致值返回函数中的未定义行为.

  • 具体措辞: - 从函数末尾流出相当于没有值的`return`; 这会导致值返回函数中的未定义行为. (2认同)

Mux*_*oid 7

对于x86处理器,标准调用约定将返回值放入EAX寄存器.实际上,这意味着对于大多数编译器,如果我们到达函数的末尾而不返回,则将返回最后一个数学运算的结果.但是,你不能依赖它,它不便携.

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