- [Modern C++ 정리] Temporary 32022년 09월 06일
- starryeye
- 작성자
- 2022.09.06.:28
함수 인자에 temporary를 사용할 때를 알아 보겠다.
이전 포스팅과 동일한 Point 클래스 선언
foo 함수는 함수 인자로 포인트 객체를 요구한다.
상수 참조 자료형 사용 (이전 포스팅 참조)
상수 이므로 함수 내부에서는 pt를 수정 할 수 없다.
goo 함수는 함수 인자로 Point 객체의 reference를 받도록 하였다.
개발자의 의도는 인자로 받은 객체를 수정하고 싶다는 것이다. (상수 const 키워드를 뺌)
하지만..
해당 인자 자료형으로는 임시 객체를 받을 수 없다.
(이유는.. main 함수에서 사용하는 코드에서 알아보겠다..)
main() 함수를 보겠다.
이름 있는 객체 pt를 선언하고..
이를 foo 함수에 넣어주었다.
(상수 참조 자료형으로 넣음)
pt는 main() 함수가 끝나는 시점에 파괴 될 것이다.
foo() 함수에 임시 객체를 인자로 넣어주었다.
(상수 참조 자료형으로 넣음)
임시 객체는 foo함수 인자로 전달 후, 31 line이 끝나는 순간 바로 파괴 된다.
goo() 함수에 임시 객체를 인자로 넣는 시도를 하였다.
이는 에러이다.
이유는..
임시 객체는 등호의 왼쪽에 올 수 없으며(lvalue가 아님)
등호에 오른쪽에 올 수 있다.(rvalue 이다.)
하지만.. goo()함수 인자로 const가 없어 상수성이 없으므로 수정하겠다는 의도 이므로..
서로 모순이다.
따라서, 임시 객체는 reference로 넘길수 없다.
<참고>
임시 객체를 넘기고 수정을 하고 싶다면..
임시 객체 자체는 상수 참조로 넘긴 순간 수정이 불가능 하지만..
함수 내부에서 복사를 따로 하고 수정하여 사용할 수는 있을 것이다.
'C++' 카테고리의 다른 글
[Modern C++ 정리] Temporary 5 (0) 2022.09.06 [Modern C++ 정리] Temporary 4 (0) 2022.09.06 [Modern C++ 정리] Temporary 2 (0) 2022.09.05 [Modern C++ 정리] Temporary 1 (0) 2022.09.05 [C++] template (0) 2022.08.14 다음글이전글이전 글이 없습니다.댓글