본문 바로가기

C++ 11

afx_msg의 의미 afx_msg는 MFC에서 메소드(이벤트 핸들러)를 오버라이딩 할 때 앞에 자동적으로 적히게 됩니다.afx_msg는 다음과 같이 정의되어 있습니다.#define afx_msg결론적으로 afx_msg는 아무 의미가 없는 정의입니다.afx_msg는 보통 virtual의 의미를 담고 사용합니다.virtual에 대한 내용은 아래의 링크를 통해서 확인할 수 있습니다.2014/12/03 - [Programming/C&C++] - 다형성과 가상함수부모클래스에서 virtual로 선언한 이후에 자식클래스가 구현할 수 있게 해주는 것입니다.부모만 virtual 선언하면 자식은 굳이 virtual을 선언하지 않아도 됩니다.그런데도 afx_msg를 사용하는 이유가 있습니다. 부모클래스의 메소드(함수) 중에는 virtual이 .. 더보기
[C++11] RValue Reference(2) 3. Move SemanticsRValue Reference는 Move Semantics를 통해서 성능 향상이 가능합니다.객체의 리소스를 다른 객체로 이동시켜주는 것이 Move Semantics입니다.왜 기존의 복사가 아닌 이동을 사용해야 되는가에 대한 이유는 다음과 같습니다.RValue가 표현식 이후에 어디에서도 참조할 수 없는 임시적인 값이기 때문에 복사 대신 이동을 하는 것입니다.LValue라면 리소스의 이동을 해버리면 원본이 훼손되는 문제가 있지만 RValue는 그런 문제가 생기지 않습니다.이 Move Semantics의 이점은 복사 생성자, 복사 대입 연산자 등에서 발생하는불필요한 리소스의 할당 및 복사, 해제의 과정을 생략할 수 있다는 점입니다.STL의 vector를 통해서 자세히 알아보도록 .. 더보기
[C++11] RValue Reference(1) C++11에서 새로 추가된 내용은 RValue Reference입니다.RValue Reference의 특징과 더불어 Move Sematics와 Perfect Forwarding에 대해서 알아보겠습니다.RValue는 간단해 보이는 구문이기는 하지만 실제로는 이해하기가 상당히 복잡한 편입니다.1. RValue와 LValueC++의 모든 표현식은 RValue나 LValue로 구분이 가능합니다.보통 LValue를 대입 연산자의 좌측에 있는 값, RValue를 우측에 있는 값으로 표현하는데 C++에서는 그런 방법으로 구분하지 않습니다.식이 표현이 지속성을 가질 때 LValue라고 하며 범위(Scope) 내의 다른 부분에서 다시 사용이 가능한 값입니다.그에 반해 RValue는 이런 지속성을 가지지 않는 임시적인 값.. 더보기
[C++11] 이름 없는 함수, 람다(Lambda)(2) 이름 없는 함수, 람다(Lambda)(1) 링크는 다음과 같습니다.2014/12/11 - [Programming/C++11&14] - [C++11] 이름 없는 함수, 람다(Lambda)(1)람다에 대한 설명에 앞서서 람다의 구조에 대한 이미지를 다시 보도록 하겠습니다.1. 캡처(Capture)캡처는 해당 람다 구문을 포함하고 있는 Scope에 선언된 변수를 사용할 수 있게 해줍니다.캡처는 이미지에서 [=]로 표시된 부분입니다.기본적으로 []를 사용하면 Scope의 변수에 접근이 불가능하게 됩니다. #include using namespace std; void main() { int a = 0, b = 1; []() { // cout 더보기