c++ 0x 에 람다함수가 새로 추가 되었다..
visual studio 2010버전에서부터 쓸수 있는데..
기본적인 람다식
auto func = []() { std::cout << "람다 테스트" << endl; }; func();
인자가 있는 람다식
auto func = [](int k) { std::cout << "람다 테스트 int k : " << k << endl; }; func(10);
반환값이 있는 람다식
auto func = [](int k) { return k; }; int k = func(10);
반환값이 명시되어 있는 람다식
auto func = [](int k) -> int // 반환값을 int로 지정한다! { return k; }; int k = func(10);
값을 참조 하는 람다식
int nNum = 10; auto func = [&](int k) // []안의 &는 참조.. 람다식 밖에 있는 변수를 참조한다 { // [&nNum]과 같이 특정 변수만 가져올수도 있다! nNum = k; }; func(10);
값을 복사 하는 람다식
int nNum = 10; auto func = [=](int k) // []안의 = 은 값을 복사 해온다. { // [nNum]과 같이 사용할수 있다. int nTest = nNum; nNum = k; // 이와같이 하면 값의 복사기 때문에 nNum에 값을 넣어도 nNum의 값은 바뀌지 않는다. }; // 다군다나 람다식에서는 무의미하기 때문인지 에러를 발생시킨다. func(10);
재귀함수로 사용하는 람다식
std::tr1::function<void(int)> funtest = [&funtest](int k) //auto 대신 function을 사용했다. { //재귀 호출에서는 타입을 명시해야되기때문에 function으로 if(k != 0) //람다식이 function임을 알려준다. { cout << k << endl; funtest(--k); } }; funtest(10);
visual studio 2010이 아니면 위에서 처럼 auto를 사용할수가 없다..
vs 2010 아래버전에서는.
std::tr1::function<반환값(인자)> 이런식으로 사용을 해야만 된다!.
'C..C++....' 카테고리의 다른 글
error LNK 2005 xxxx이(가) MSVCPRT(D).lib 혹은 LIBCPMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법 (0) | 2011.08.02 |
---|---|
문자열 사용.. (0) | 2011.07.06 |
c/c++에서 문자열 인코딩 변환! 유니코드 멀티바이트 UTF-8 쉽게 변환해보자~! (5) | 2011.06.17 |
error LNK 2005 xxxx이(가) MSVCRT(D).lib 혹은 LIBCMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법 (2) | 2011.06.13 |
gtest,unittest++ (0) | 2011.05.19 |