language:cpp:cpptip
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
language:cpp:cpptip [2017/06/24 17:47] – kieuns | language:cpp:cpptip [2024/04/23 22:44] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ====== 포인터 배열 자동 삭제 (auto_ptr 흉내) ====== | ||
+ | <code cpp> | ||
+ | std:: | ||
+ | pType = (WM_MEDIA_TYPE*)& | ||
+ | </ | ||
+ | |||
+ | ====== __event ====== | ||
+ | |||
+ | 2015 부터는 삭제될 예정이니 쓰지 말라고 경고를 띄운다. | ||
+ | |||
+ | * [[https:// | ||
+ | * Deprecation of attributed ATL code support (Level 1 (/W1) on-by-default) | ||
+ | * C4467 경고 발생. 경고를 없애고 싶다면, | ||
+ | * 컴파일 옵션 : /Wv:18 or /wd:4467 \\ < | ||
+ | * 코드에 %%#pragma warning(disable: | ||
+ | |||
+ | 전에 쓰던 방법처럼 | ||
+ | |||
+ | * 함수 포인터를 사용하던지 | ||
+ | * std:: | ||
+ | * ( 함수 포인터 or (std:: | ||
+ | |||
+ | ====== 람다 ====== | ||
+ | |||
+ | 이름이 필요 없는 즉석 함수. C++ 언어는 c#과는 좀 다르게 구성되어 있다. | ||
+ | |||
+ | <code cpp> | ||
+ | { | ||
+ | [] // 람다 시작 (캡쳐) | ||
+ | () // 파라미터 정의 창 | ||
+ | {} // 함수 본체 | ||
+ | (); // 함수 호출. 호출하는 경우. | ||
+ | | ||
+ | // 예2 : 바로 실행 | ||
+ | auto fn1 = []() { /* 어쩌구 저쩌구 */ }(); | ||
+ | | ||
+ | // 예2 : 선언만 해서 넘기는 경우 | ||
+ | auto fn2 = []() { /* 어쩌구 저쩌구 */ }; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 파라미터가 있는 경우 | ||
+ | |||
+ | <code cpp> | ||
+ | auto _fn = []( int n ) { std::cout << "Num: " << n << std::endl; }; | ||
+ | _fn( 100 ); | ||
+ | _fn( 200 ); | ||
+ | </ | ||
+ | |||
+ | 리턴 값에 대한 설정의 경우 | ||
+ | |||
+ | * return 이 실행 되면 알아서 리턴 타입이 설정된다. | ||
+ | * 정확하게 하려면 ' | ||
+ | |||
+ | <code cpp> | ||
+ | // 알아서 설정 되도록 | ||
+ | auto tfn1 = []() { return 3.14f; }; | ||
+ | auto tfn2 = []( float _f ) { return f; }; | ||
+ | // 확실히 지정한다. | ||
+ | auto tfn2 = []( float _f ) -> float { return f; }; | ||
+ | </ | ||
+ | |||
+ | 캡처 | ||
+ | |||
+ | 람다 함수 외부의 변수를 람다 함수에서 사용하고 싶은 경우, 그 변수를 캡쳐< | ||
+ | |||
+ | 캡처는 **복사**, **참조** 로 전달 가능 하다. | ||
+ | |||
+ | * 참조로 전달할 때는 & | ||
+ | * 복사로 전달할 때는 **변수 이름**을 적는다. | ||
+ | * 람다 표현의 ' | ||
+ | |||
+ | | _TotalMoney 를 람다 함수 내부로 참조로 가져와 사용하는 예제. \\ 또한 for_each 를 사용하는 예제도 | | ||
+ | | <code cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | int test_func() | ||
+ | { | ||
+ | std:: | ||
+ | _Moneys.push_back(100); | ||
+ | _Moneys.push_back(120); | ||
+ | int _TotalMoney = 0; | ||
+ | // [_TotalMoney] | ||
+ | // [& | ||
+ | std:: | ||
+ | _TotalMoney += _m; | ||
+ | } ); | ||
+ | wprintf(_T(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | %%[]%% 사이에 | ||
+ | |||
+ | * 변수 이름을 한개 이상 적을 수 있다.< | ||
+ | int v1, int v2; | ||
+ | [&v1, & | ||
+ | </ | ||
+ | * 이름을 적은 변수들은 람다 함수 내부에서 사용할 수 있다. | ||
+ | * 전체를 통째로 복사 또는 참조 하려면 ' | ||
+ | * ' | ||
+ | * ' | ||
+ | |||
+ | 통째로 모두 참조, 복사하더라도 변수 각각에 다른 방식을 지정할 수 있다. | ||
+ | 같은 변수에 대해 중복 설정은 안된다. | ||
+ | |||
+ | <code cpp> | ||
+ | int v1, v2, v3, v4; | ||
+ | |||
+ | [&, v1, v2]{}; | ||
+ | [=, &v1, &v2]{}; // v1, v2 는 참조. 나머지는 복사. | ||
+ | [v1, v1]{}; | ||
+ | [&, & | ||
+ | [=, v1]{}; | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||