1 / 31

C++ 0x 달려 BOA 요 ~

C++ 0x 달려 BOA 요 ~. 아 . 꿈 . 사 비밀 모임 발표 : 김연기. 발표자 는 뉴규 ?. 김연기 아 . 꿈 . 사 오후반 스터디 그룹 장소 예약 담당 (Pattern Oriented Software Architecture 2) 2008. 10 ~ Microsoft Visual C++ MVP 유콘시스템 Sw 개발팀 지상관제 장비 SW 개발 잉카 인터넷 보안개발팀 업데이트 모듈 개발 . http://twitter.com/scor7910

chessa
Download Presentation

C++ 0x 달려 BOA 요 ~

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ 0x 달려 BOA요~ 아.꿈.사 비밀 모임 발표 : 김연기

  2. 발표자 는 뉴규? 김연기 아.꿈.사 오후반 스터디 그룹장소 예약 담당 (Pattern Oriented Software Architecture 2) 2008. 10 ~ Microsoft Visual C++ MVP 유콘시스템 Sw개발팀 지상관제 장비 SW 개발 잉카 인터넷 보안개발팀 업데이트 모듈 개발. http://twitter.com/scor7910 http://scor7910.tistory.com

  3. 차례 • 새롭게 추가 된 것들. • Lambda • R-Value Reference • auto, decltype, constexpr • Smart Pointer • 참고자료. • Q&A

  4. Lambda • 명명되지 않은(Unnamed) 함수 객체. [] ()opt {} ->opt

  5. Lambda • 명명되지 않은(Unnamed) 함수 객체. [] () {} -> Lambda Introducer

  6. Lambda • 명명되지 않은(Unnamed) 함수 객체. []() {} -> Lambda Parameter declaration

  7. Lambda • 명명되지 않은(Unnamed) 함수 객체. [](){} -> Lambda Compound Statement

  8. Lambda • 명명되지 않은(Unnamed) 함수 객체. [](){} -> Lambda Return Type

  9. Lambda –사용- intmain() { vector<int> v; for (int i = 0; i < 10; ++i) { v.push_back(i); } for_each(v.begin(), v.end(), [](int n) { cout << n << " "; }); cout << endl; }

  10. Lambda –함수객체- struct LambdaFunctor { void operator()(int n) const { cout << n << " "; } }; ……. for_each(v.begin(), v.end(), LambdaFunctor() );

  11. Lambda –리턴- • []()->리턴 타입{…} • transform(v.begin(), v.end(), front_inserter(d), [](int n) -> double{ • if (n % 2 == 0) • { • return n * n * n; • } • else • { • return n / 2.0; • } • });

  12. Lambda –캡쳐- • 상위 스코프({…})의변수를 람다 구현내부에서 사용할 수 있다. • [변수1, 변수2] : 변수1, 변수2 캡쳐 • [&변수1, &변수2] : 변수1, 변수2 참조캡쳐 • [&] : 상위 스코프의 변수를 참조 캡쳐. • [=] : 상위 스코프의 변수를 값 캡쳐.

  13. Lambda –캡쳐- intx = 4; inty = 5; cout << "Input: "; cin >> x >> y; v.erase(remove_if(v.begin(), v.end(), [x, y](int n) { returnx < n && n < y; }), v.end()); int x = 4; int y = 5; for_each(v.begin(), v.end(), [=](int& r) mutable{ //값을 캡쳐하면 x,y는 const로 들어오지만 mutable 키워드로 //캡쳐된 변수를 변경가능한 변수로 만들어줌.         const int old = r;         r *= x * y;         x = y;         y = old;     });

  14. Lambda –캡쳐- intx = 4; inty = 5; cout << "Input: "; cin >> x >> y; v.erase(remove_if(v.begin(), v.end(), [&x, &y](int n) { returnx < n && n < y; }), v.end()); int x = 4; int y = 5; for_each(v.begin(), v.end(), [&](int& r) {         const int old = r;         r *= x * y;         x = y;         y = old;     });

  15. R-Value Reference • L-Value & R-Value

  16. R-Value Reference • L-Value & R-Value a b res ++a • 10 • 13 • b++ • (++a + b++)

  17. R-Value Reference • L-Value & R-Value L-Value R-Value a b res ++a • 10 • 13 • b++ • (++a + b++)

  18. R-Value Reference double& rd1 = 2.0; const double& rd2 = 2.0; double&& rd3 = 2.0; rd2 += 1; rd3 +=3;

  19. R-Value Reference double& rd1 = 2.0; ERROR!! const double& rd2 = 2.0; double&& rd3 = 2.0; rd2 += 1; ERROR!! rd3 +=3;

  20. R-Value Reference –Move-

  21. auto for (vector<int>::const_iterator itr = myvec.begin(); itr != myvec.end(); ++itr) for (auto itr = myvec.begin(); itr != myvec.end(); ++itr)

  22. decltype const int&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // x1 타입은 const int&& decltype(i) x2; // x2 타입은 int decltype(a->x) x3; // x3 타입은 double decltype((a->x)) x4 = x3; // x4 타입은 double&

  23. constexpr constexptrGetBufferSize(); TCHAR buffer[GetBufferSize ()+ 12];

  24. Smart Pointer –auto_ptr-

  25. Smart Pointer –auto_ptr-

  26. Smart Pointer –auto_ptr-

  27. Smart Pointer –shared_ptr-

  28. Smart Pointer -weak_ptr- • shared_ptr의 리소스를 카운팅을 증가하지않은채 가지고 있는 포인터. • 레퍼런스 카운팅에 영향을 주지 않는다. • Shared_ptr 객체를 생성후 사용해야 한다.

  29. Smart Pointer -unique_ptr- • 할당된 객체를 공유하지 않는 스마트 포인터. • Move 생성자/연산자만 사용할 수 있다.

  30. 참고자료 • http://msdn.microsoft.com/en-us/library/cscc687y.aspx • http://herbsutter.com • http://en.wikipedia.org/ • http://www.open-std.org/JTC1/SC22/WG21/ • Effective STL

  31. Q & A

More Related