내용으로 건너뛰기
GINS WIKI 긴스 위키
사용자 도구
로그인
사이트 도구
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
현재 위치:
긴스위키 GINS wiki
»
개발 언어
»
cpp
»
포인터 배열 자동 삭제 (auto_ptr 흉내)
추적:
검색
language:cpp:cpptip
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== 포인터 배열 자동 삭제 (auto_ptr 흉내) ====== <code cpp> std::vector<BYTE> vector(cbType); pType = (WM_MEDIA_TYPE*)&vector[0]; </code> ====== __event ====== 2015 부터는 삭제될 예정이니 쓰지 말라고 경고를 띄운다. * [[https://msdn.microsoft.com/en-us/library/mt723604.aspx|Visual C++ What's New 2003 through 2015]] * Deprecation of attributed ATL code support (Level 1 (/W1) on-by-default) * C4467 경고 발생. 경고를 없애고 싶다면, * 컴파일 옵션 : /Wv:18 or /wd:4467 \\ <sub>또는</sub> * 코드에 %%#pragma warning(disable:4467)%% 추가 전에 쓰던 방법처럼 * 함수 포인터를 사용하던지 * std::function 과 std::bind를 조합해서 쓰던지 * ( 함수 포인터 or (std::function)) 과 람다 함수를 쓰던지 ====== 람다 ====== 이름이 필요 없는 즉석 함수. C++ 언어는 c#과는 좀 다르게 구성되어 있다. <code cpp> { [] // 람다 시작 (캡쳐) () // 파라미터 정의 창 {} // 함수 본체 (); // 함수 호출. 호출하는 경우. // 예2 : 바로 실행 auto fn1 = []() { /* 어쩌구 저쩌구 */ }(); // 예2 : 선언만 해서 넘기는 경우 auto fn2 = []() { /* 어쩌구 저쩌구 */ }; } </code> 파라미터가 있는 경우 <code cpp> auto _fn = []( int n ) { std::cout << "Num: " << n << std::endl; }; _fn( 100 ); _fn( 200 ); </code> 리턴 값에 대한 설정의 경우 * return 이 실행 되면 알아서 리턴 타입이 설정된다. * 정확하게 하려면 '함수본체'의 앞 부분에 리턴 타입을 설정 한다. <code cpp> // 알아서 설정 되도록 auto tfn1 = []() { return 3.14f; }; auto tfn2 = []( float _f ) { return f; }; // 확실히 지정한다. auto tfn2 = []( float _f ) -> float { return f; }; </code> 캡처 람다 함수 외부의 변수를 람다 함수에서 사용하고 싶은 경우, 그 변수를 캡쳐<sup>Capture</sup>하면 된다. 캡처는 **복사**, **참조** 로 전달 가능 하다. * 참조로 전달할 때는 & * 복사로 전달할 때는 **변수 이름**을 적는다. * 람다 표현의 '[]' 사이에 캡처할 변수 이름을 적는다. | _TotalMoney 를 람다 함수 내부로 참조로 가져와 사용하는 예제. \\ 또한 for_each 를 사용하는 예제도 | | <code cpp> #include <tchar.h> #include <vector> #include <algorithm> int test_func() { std::vector<int> _Moneys; _Moneys.push_back(100); _Moneys.push_back(120); int _TotalMoney = 0; // [_TotalMoney] : 복사 // [&_TotalMoney] : 참조 std::for_each( _Moneys.begin(), _Moneys.end(), [&_TotalMoney](int _m) { _TotalMoney += _m; } ); wprintf(_T("_TotalMoney: %d\n"), _TotalMoney); } </code> | %%[]%% 사이에 * 변수 이름을 한개 이상 적을 수 있다.<code cpp> int v1, int v2; [&v1, &v2](){}(); // 이런 식으로 </code> * 이름을 적은 변수들은 람다 함수 내부에서 사용할 수 있다. * 전체를 통째로 복사 또는 참조 하려면 '[]' 사이에 * '[&]' : 통째로 참조 * '[=]' : 통째로 복사 통째로 모두 참조, 복사하더라도 변수 각각에 다른 방식을 지정할 수 있다. 같은 변수에 대해 중복 설정은 안된다. <code cpp> int v1, v2, v3, v4; [&, v1, v2]{}; // v1, v2 는 복사. 나머지는 참조. [=, &v1, &v2]{}; // v1, v2 는 참조. 나머지는 복사. [v1, v1]{}; // 에러. 같은 변수 사용. [&, &v1]{}; // 에러. 디폴트가 참조인데 v1을 다시 참조로 설정 [=, v1]{}; // 에러. 디폴트가 복사인데 v1을 다시 복사로 설정 </code>
language/cpp/cpptip.txt
· 마지막으로 수정됨: 2024/04/23 22:44 저자
127.0.0.1
문서 도구
문서 보기
이전 판
역링크
맨 위로