C++에서 Lambda는 Lambda Expression을 줄일 말이고 Lambda라는 것은 program source상에서만 존재하는 것이고

Closure는 runtime에 생성된 lambda object를 말한다.


auto f = [&](int x, int y) { return fudgeFactor * (x + y); };

파란 부분이 labmda이고 runtime에 생성된 f가 closure에 해당한다.


REF

http://scottmeyers.blogspot.kr/2013/05/lambdas-vs-closures.html


Happy Coding~:)

directives 종류
http://msdn.microsoft.com/en-us/library/ed8yd1ha(vs.71).aspx
컴파일러 옵션
http://msdn.microsoft.com/en-us/library/6s2x2bzy.aspx

선언
/define, /d

한개씩 추가하는 경우 /d:USE_CONSOLE
여러개 한꺼번에 추가 세미콜론으로 구분 /d:USE_CONSOLE;USE_MSG


EOF
More C++ Idiom에는 non-throwing swap이라고 나와있는데 exception safe swap이 더 맘에 든다.:)

exception safe swap은 제목 그대로 exception에 안전한 swap 기능을 구현하는 것이다. 먼저 기존 swap 함수를 보자.
하지만 이 코드에 문제점은 swap하기 위해 사용하는 임시 객체의 생성,소멸,자원획득,반납등의 큰 비용을 소비할 수 있다는 것이다. 이를 해결하기 위한 기본 아이디어는 객체를 복사하는 것이 아닌 객체의 포인터를 복사하는 것으로 대체하는 것이다. 객체 자체를 복사하지 않고 포인터만 복사하므로 exception safe한 코드가 된다.
추가적으로 generic programming을 위해서 std namespace에도 swap을 추가해 놓는다.
stl내부에 추가적인 template class를 추가하는 것은 금지되어 있으나 완전 특수화 class는 추가할 수 있다. 따라서 아래와 같이 선언 가능하다.

추가적으로 non-throwing swap idiom은 어떤 상황에서는 애매한 부분도 존재한다고 하니 내용을 좀 더 확인해 봐야합니다. (Namespace issues with specialized swap)


참고
More C++ Idiom - non-throwing swap
Namespace issues with specialized swap

EOF

대입 연산자를 구현할때 Exception에 안전한 코드를 작성하는 방법이다.

파라미터를 레퍼런스 형태로 전달하는(passed-by-reference) 경우에는 내부에 temp 개체를 생성(RAII)하고 swap합니다.


여기서 자기대입에 대한 처리를 추가하면 이렇게 됩니다.
자기대입인 경우에는 Temp객체도 생성되지 않으니 효율도 더 좋아지겠네요.

파라미터가 레퍼런스형태가 아닌 값형태로 전달(passed-by-value)인 경우에는 더 단순해 집니다.

코드에서는 한가지 가정하고 있는 부분이 있는데 swap 함수 에서는 exception을 발생시키지 않는다는 것입니다. 이 부분에 대해서 따로 살펴보도록 하죠.

출처
http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-and-swap
Effective C++ 항목11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자.

+ Recent posts