2013-12-12 2 views
2

범위를 벗어날 수 있으므로 참조로 로컬 변수를 반환 할 수 없다는 것을 알고 있습니다. 나는 통과 된 참조를 돌려 보내는 것에 관해서는 약간 혼란 스럽다. 예를 들어 아래의 예는 합법적입니까, 아니면 정의되지 않은 동작으로 이어질까요? 절대적으로 괜찮습니다, 사실은 운영자 체인을 허용하는, 매우 자주 < < 등이 어떻게 구현되는지 비회원 운영자의객체에 전달 된 참조를 반환합니다.

classobject &function(classobject &obj) { 
return obj; 
} 
+3

아무 것도 죽지 않습니다. 그들이 당신에게 준 것을 돌려주고 있습니다. 항상 출력과 입력에 대한 수업 지원을 제공 할 때 발생합니다. – chris

답변

6

.

중요한 점은 객체 수명입니다. 객체가 참조로 전달된다는 것을 알기 때문에 함수 호출보다 오래 있어야합니다. 이렇게하면 동일한 참조를 반환하는 것이 안전합니다.

0

이것은 합법적이며 명시적인 함수 인수 대신 인수가 *this 임에도 불구하고 cout<<으로 사용됩니다. cout에 대한 참조를 반환하며 cout<<"a"<<"b";을 허용합니다.

+0

비회원 연산자 <<()는 @ Veritas의 예제와 같이 스트림 객체를 참조로 가져옵니다. – polkadotcadaver

관련 문제