C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[29091] Re:Re: 일반 함수는 perfect forwarding이 안되는 거였군요
질문 [] 1579 읽음    2022-03-16 18:02
확실히 이해하고 있지 못해서 아리송했었는데
perfect forwarding이 template만 되고 일반 함수는 안되는 거였군요
대단히 감사합니다. 복 받으실 거에요 ^^


빌더(TWx) 님이 쓰신 글 :
: 질문 님이 쓰신 글 :
: : http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=28886
: :
: : C++빌더님께서 알려주신 버그패치 잘 쓰고있습니다.
: : Rad Studio 11 에서도 이 template 버그가 고쳐지지 않고 있던데 황당하네요.
: : 몇년째 버그를 방치하고 있다니
: : 소비자를 봉으로 보는 건지 뭐 이런 개발회사가 있는지 모르겠습니다.
: :
: : 제가 궁금한 건요.
: :
: : T&& t
: :
: : 버그패치를 보면 위와 같이 rvalue 레퍼런스를 이용하시던데요.
: : 그럼 옵티마이징을 위해서 perfect forwarding 이용할 법 한데 안쓰고 계셔서요
: : 특별한 이유가 있는 건지 궁금하네요.
:
:
:
:
:
: 답변:
:
:
: rvalue move semantic rule, perfect forwarding을 완전하게 이해하고 있지 못하다면...
: C++언어에 대한 공부가 전혀 되어 있지 않은 거고, C++ 프로그래머라고 할 수 없을 정도로
: 코드 최적화를 위한 굉장히 중요한 개념인데요.
:
: T&& t는 template Type Deduction Rule에 의해서 lvalue 와 rvalue 모두 받을 수 있는 레퍼런스 이므로
: 엄격하게 말하면 rvalue reference 가 아니고, universal reference 입니다.
:
: int&& ri = 7;
:
: 에서 ri는 rvalue로만 바인드 될 수 있는 rvalue reference 이지만...
:
: template <typename T>
: void foo(T&& t){}
:
: 와 같이 Indirect로 Type Deduction 이 적용되는 경우...
: 여기서 t는 rvalue reference가 아니고, lvalue와 rvalue 다 바인드 될 수 있는 universal reference 입니다.
:
:

:
: 버그패치 코드에서 perfect forwarding을 적용하지 않은 것은...
:
: Format() 함수는 델파이로 구현되어 있는 함수에 불과하고...
: 델파이 파스칼 언어는... 코드 최적화를 위한 move semantic, perfect forwarding 개념 자체를
: 아예 갖고있지 않기 때문에 perfect forwarding 사용이 불가능 합니다.
:
: perfect forwarding 을 적용할 수 있으려면...
: 라이브러리가 rvalue move semantic rule을 지원하도록...
: C++로 구현되어 있어야 하죠.
:
: 델파이 파스칼 언어는 코드 최적화를 위한 그런 개념 자체가 없어요.
: 그래서 RTL도 속도를 낸답시고 단무지 같은 방법으로 어셈블리 코드를 잔뜩 쓰고 있죠.
:
: 델파이 파스칼은 Language specification이 간단해서 초보자들이 쉽게 사용할 수 있는 언어에 불과함.
:
:
:
: 이와같이 perfect forwarding이 불가능한 델파이 파스칼 언어의 한계에도 불구하고
: 버그패치 코드에서 T&& (univarsal reference)을 사용한 것은...
:
: 1. const, volatile 과 같은 qualifier 속성을 잃지 않으면서 파라미터를 전달할 수 있고
:
: 2. reference collapsing rule 에 의해서 template 파라미터가 lvaue reference 나 rvalue reference 가
:    될 수 있기 때문에 불필요한 복사가 일어나지 않도록 할수 있는
:
: C++언어의 랭귀지 파워를 활용하기 위한 것임..
:
:
:

+ -

관련 글 리스트
29089 C++빌더님. template 버그패치 잘 쓰고 있습니다. 질문 1845 2022/03/13
29090     Re: 델파이 파스칼 언어의 한계로 perfect forwarding이 불가능. 빌더(TWx) 2059 2022/03/15
29091         Re:Re: 일반 함수는 perfect forwarding이 안되는 거였군요 질문 1579 2022/03/16
29092             Re:Re:Re: No!!!. 엠바 컴파일러만 불가능 빌더(TWx) 1729 2022/03/17
29093                 Re:Re:Re:Re: No!!!. 엠바 컴파일러만 불가능 봄이다 1561 2022/03/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.