这是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会产生各种错误。
答案 0 :(得分:1)
是。三元运算符的结果是暂时的,并且会 从函数返回后不再存在。