일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 보편 참조
- lua
- 암시적 변환
- 예외
- 스마트 포인터
- virtual function
- 반복자
- 상속
- 영화
- 영화 리뷰
- resource management class
- effective stl
- UE4
- c++
- operator new
- effective modern c++
- implicit conversion
- 언리얼
- more effective c++
- Smart Pointer
- iterator
- 오블완
- reference
- 게임
- Effective c++
- exception
- universal reference
- 티스토리챌린지
- 참조자
- std::async
- Today
- Total
목록universal reference (3)
스토리텔링 개발자
항목 28. 참조 축약을 숙지하라 보편 참조의 타입 추론templatevoid func(T&& param);Widget widgetFactory(); // rValue를 리턴하는 함수Widget w; // 변수(lValue)func(w); // T는 Widget&로 추론된다.func(widgetFactory()); // T는 Widget로 추론된다.lValue인지 rValue인지에 따라 참조가 타입에 포함되는지 여부가 갈린다.lValue : 참조(&)가 타입에 포함되어 추론된다.rValue : 비참조로 추론된다. 타입 추론과 참조 축약참조에 대한 참조는 위법 사항이다.int x;...auto& & rx = x; // 에러!!!그렇다면 참조를 받는 함수 템플릿에 lValue를 넘겨준 상황(위 예제에..
항목 25. rValue에는 std::move를, 보편 참조에는 std::forward를 사용하라 move와 forwardrValue 참조의 경우 다른 함수로 이동시킬 수 있음이 확실하다.std::move를 사용하여 rValue로 캐스팅 해주어야 한다.class Widget{public: Widget(Widget&& rhs) : name(std::move(rhs.name)), p(std::move(rhs.p)) { ... }...private: std::string name; std::hsared_ptr p;};보편 참조는 이동 가능한 객체일 수도 있고 아닐 수도 있다.(항목 24 참조)std::forward를 사용해 주어야 한다.c..
항목 24. 보편 참조와 rValue를 구별하라 T&& 라는 표현반드시 rValue 참조가 아니다.void f(Widget&& param); // rValueWidget&& var1 = Widget(); // rValueauto&& var2 = var1; // rValue 아님templatevoid f(std::vector&& param); // rValuetemplatevoid f(T&& param); // rValue 아님두 가지 의미rValue 참조보편 참조(universal reference)rValue 참조 혹은 lValue 참조 둘 중 하나라는 뜻때에 따라서 lValue처럼 행동할 때도 있다.거의 모든 것에 묶을 수 있다. 보편 참조의 두 가지 문맥함수 템플릿 매개변수templatevo..