2012-08-30 1 views
2

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

@JamesMcLaughlin 이것은 더 큰 또는 더 적은 기능을 가진 샘플 코드 스 니펫 일뿐입니다. – GradGuy

+0

하지만 왜 복식을 참조로 전달합니까? 기본 유형의 경우 일반적으로 값을 전달하는 것이 빠릅니다. –

답변

1

예. 삼항 연산자의 결과는 임시이며, 함수에서 돌아 오면 이 사라집니다.