[c++ korea] effective modern c++ study item 22,28
TRANSCRIPT
![Page 1: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/1.jpg)
Effective Modern C++ StudyC++ Korea
![Page 2: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/2.jpg)
![Page 3: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/3.jpg)
Effective Modern C++ StudyC++ Korea3
widget.h
string vector gadget.h
![Page 4: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/4.jpg)
Effective Modern C++ StudyC++ Korea4
widget.cpp
string vector gadget.h widget.h
![Page 5: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/5.jpg)
Effective Modern C++ StudyC++ Korea5
조금더나은모양
![Page 6: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/6.jpg)
![Page 7: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/7.jpg)
Effective Modern C++ StudyC++ Korea7
![Page 8: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/8.jpg)
Effective Modern C++ StudyC++ Korea8
header에서는 정의만할수있도록할것.
???
![Page 9: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/9.jpg)
Effective Modern C++ StudyC++ Korea9
![Page 10: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/10.jpg)
Effective Modern C++ StudyC++ Korea10
![Page 11: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/11.jpg)
![Page 12: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/12.jpg)
Effective Modern C++ StudyC++ Korea
template<typename T>void func(T&& param);
T가 아닌 param의 type
![Page 13: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/13.jpg)
Effective Modern C++ StudyC++ Korea
template<typename T>void func(T&& param);
Widget widgetFactory(); // function returning rvalueWidget w; // a variable (an lvalue)func(w); // call func with lvalue; T deduced
// to be Widget&func(widgetFactory()); // call func with rvalue; T deduced
// to be Widget
![Page 14: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/14.jpg)
Effective Modern C++ StudyC++ Korea
int x;auto& & rx = x; // error! can't declare reference to reference
![Page 15: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/15.jpg)
Effective Modern C++ StudyC++ Korea
void func(Widget& && param);
void func(Widget& param);
![Page 16: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/16.jpg)
Effective Modern C++ StudyC++ Korea
template<typename T>void f(T&& fParam){
someFunc(std::forward<T>(fParam)); // forward fParam to} // someFunc
template<typename T> T&& forward(typename remove_reference<T>::type& param){
return static_cast<T&&>(param);}
![Page 17: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/17.jpg)
Effective Modern C++ StudyC++ Korea
Widget& && forward(typenameremove_reference<Widget&>::type& param){
return static_cast<Widget& &&>(param);}
Widget& && forward(Widget& param){
return static_cast<Widget& &&>(param);}
Widget& forward(Widget& param) {
return static_cast<Widget&>(param);}
![Page 18: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/18.jpg)
Effective Modern C++ StudyC++ Korea
Widget&& forward(typenameremove_reference<Widget>::type& param){
return static_cast<Widget&&>(param);}
Widget&& forward(Widget& param){
return static_cast<Widget&&>(param);}
![Page 19: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/19.jpg)
Effective Modern C++ StudyC++ Korea
template<typename T> T&& forward(remove_reference_t<T>& param) {
return static_cast<T&&>(param);}
![Page 20: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/20.jpg)
Effective Modern C++ StudyC++ Korea
template<typename T>void func(T&& param);Widget widgetFactory(); // function returning rvalueWidget w; // a variable (an lvalue)func(w); // call func with lvalue; T deduced
// to be Widget&func(widgetFactory()); // call func with rvalue; T deduced
// to be Widget
![Page 21: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/21.jpg)
Effective Modern C++ StudyC++ Korea
auto&& w1 = w;
Widget& && w1 = w;
auto&& w2 = widgetFactory();
Widget&& w2 = widgetFactory();
![Page 22: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/22.jpg)
Effective Modern C++ StudyC++ Korea
template<typename T>class Widget {public:typedef T&& RvalueRefToT;
};
Widget<int&> w;
typedef int& && RvalueRefToT;
typedef int& RvalueRefToT;
![Page 23: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/23.jpg)
Effective Modern C++ StudyC++ Korea
![Page 24: [C++ Korea] Effective Modern C++ Study item 22,28](https://reader034.vdocuments.mx/reader034/viewer/2022042615/55b6e452bb61eb575e8b4589/html5/thumbnails/24.jpg)
Effective Modern C++ StudyC++ Korea