在这里返回临时未定义行为的地址?

时间:2012-08-30 19:05:09

标签: c++ memory-management undefined-behavior

这是c ++中未定义的行为吗?

#include <iostream>

const double& abs(const double& x){
    return x>0 ? x:-x;
}

int main () {

    double x = -10.0;
    double y = abs(x);

    std::cout << y << std::endl;

    return 0;
}   

g++不喜欢它:

mem.cpp: In function ‘const double& abs(const double&)’:
mem.cpp:4: warning: returning reference to temporary

和valgrind会产生各种错误。

1 个答案:

答案 0 :(得分:1)

是。三元运算符的结果是暂时的,并且会 从函数返回后不再存在。