2014-10-04 3 views
1

참조로 함수에 전달 된 개체를 수정하는 대신 개체를 반환하는 것이 어떤 경우에 선호됩니까? 어느 것을 골라야하는지 어떻게 알 수 있습니까?함수 반환 값과 참조로 전달 된 수정 값

사실, 함수에서 개체를 반환 할 수 없으면 수행 할 수없는 일이 있지만 대신 참조로 전달 된 개체 만 수정하면됩니다.

+0

변경할 수없는 개체를 반환 할 수 있지만 참조로 전달 된 개체는 수정하여 정의 할 수 없습니다. –

+1

관련 : http://stackoverflow.com/questions/321068/returning-multiple-values-from-ac-function –

+2

함수의 "결과"를 값으로 반환하는 것은 함수의 "수학적 관점"에 적합하기 때문에 "깨끗한"것으로 간주됩니다. 함수를 호출하고보다 편리한 코드를 생성 할 수 있습니다.그러나 오브젝트를 작성하는 데 비용이 많이 드는 경우, 결과를 저장하기 위해 참조로 전달하여 오브젝트를 재사용하면 성능이 향상 될 수 있습니다. –

답변

1

무엇인가를 돌려 보내는 것은 쉬운 선택이지만 뭔가가 그것에 관해서 말하면 참조를 사용할 것입니다. 한 가지 이유는 성공/실패 코드와 같은 반환 값에 대해 염두에두고있는 점이 있기 때문입니다. 또 하나는 스택에 커 보이기 때문에 작은 컴퓨터를 사용하기 때문입니다. 그런 다음, 기존 변수 또는 구조를 새로 작성하는 대신 수정할 수 있습니다. 나는 그것이라고 생각한다.

참조 또는 포인터를 전달하여 결과를 수신하여 수행 할 수없는 작업에 대해서는 알지 못합니다.

+0

또 하나의 이유 : 반환 값을 무시하는 것이 끔찍한 오류 일 경우 C++에서 매개 변수를 참조로 가져 와서 결과를 "반환"하는 것이 좋습니다. 이것은 불행히도 GCC의'warn_unused_result' 속성이 C++에서 작동하지 않기 때문이며 반환 값을 무시하는 특정 함수는 끔찍한 오류이기 때문입니다. 예를 들어,'system()'과 비슷하지만, 사용자 라이브러리의 다른 함수들은 더 나쁠 수 있습니다. (예를 들어, 결과가 함수 호출을 "실행 취소"하는 RAII 유형이거나, 파이썬 콘텍스트 관리자와 같은). –

3

주요 차이점 실용

TYPE function() ; 

사이

void function (TYPE &value) ; 

는 전자가 식에 사용될 수 있다는 것이다.

a = 10 * function() ; 

주요 설계 고려 사항 (함수()) { }

경우.

그 외에도 의견을 제시해야합니다. 나는 객관적인 차이점을 고수 할 것입니다.

+0

그게 내가 방금 생각한거야. 아주 좋은 예는 연산자입니다. 그것들은 보통 물건을 변형시키고 그 결과를 돌려줍니다. 그것들이 없으면 전통적인 대수 형태로 벡터 대수학을 쓸 수 없습니다. – Tobias

2

그것의 아주 간단한 ... "값"에 의해

반환 : - 당신이 개체의 현재 상태와 객체의 복사본을 원하는 경우; - 원본 개체의 상태가 후자로 바뀌면 중요합니다.

반품 : - 다른 사람이 개체를 업데이트 할 때 올바른 상태를 유지하려는 경우. - 객체의 상태를 변경하고 다른 객체가 변경 사항을 인식하려는 경우;

이것이 가장 중요한 이유입니다. 참조로 돌아올 때 빨리 techinical 이유로

, 현재 언어는 일반적으로 다음과 같습니다

그러나

당신이 알고 있어야 특별한 사용 사례 존재한다. 속도가 필수 인 경우이 제약 조건을 고려하여 최상의 결정을 내려야합니다.

그러나 근본적인 결정은 개체의 상태를 어떻게 처리할지에 대한 것입니다.