오픈 소스 C++ 라이브러리인 'Boost 라이브러리'가 11월 15일에 1.48 버전이 나왔습니다.
boost 라이브러리는 근래에 업데이트를 할 때 새로운 C++ 표준인 C++11에 맞춘 업데이트를
종종 하고 있습니다.

그 중 이번 1.48에서는 boost::move 라는 것이 추가 되었습니다.
C++11을 공부하신 분들은 이게 뭔지 딱 바로 아실겁니다^^

네 바로 RValue Reference를 위한 것입니다.
현재 VC++ 10을 사용하지 못하는데 RValue Reference를 사용하고 싶다면
당장 boost 라이브러리를 설치하고 사용하세요.

사용 방법은 VC++ 10과 같습니다. 차이는 네임스페이스만 다릅니다.

std::vector<int> v1;
v1.push_back(10);
v1.push_back(12);
 
 
std::vector<int> v2 = boost::move(v1);



ps) 위의 move는 올바르게 동작하지 않습니다. 이유는 아직 VC++ 8,9의 stl 컨테이너에는
RValue Reference 기능을 정의하지 않았기 때문입니다.
그래서 이 문제를 해결하는 방법이 또 있습니다. 이것은 다음 글에 알려드리겠습니다^^


저작자 표시
신고
by 흥배 2011.12.09 09:00
http://www.techdays.co.kr/


마이크로소프트의 최신 기술들을 소개하고 있습니다.
네이티브 개발부터 Azure까지 총 망라하고 있습니다.

웹에서 바로 볼 수도 있고 동영상 다운로드도 가능합니다.

저는 C++0x의 "RValue Reference와 lambda 완전 이해"라는 제목으로 강연을 했습니다.
예전에 블로그 포스팅을 할 때 부족함 부분이 있다고 느껴져서 처음부터 끝까지 설명하려고 했지만
제가 아직 온라인 강연은 너무 약해서 제대로 전달 될지는 모르겠네요 ;;;;;
만약 제 강연 내용이 제대로 전달 되었다면 제가 여기에서 한 내용만 이해하시면
RValue Reference와 lambda는 거의 대부분 마스터 하셨다고 생각하셔됩니다.

다행히 조만간에 C++0x와 관련된 글을 정리해서 공개할 예정이니 동영상 강의가 많이 부족하시면
이걸로 보충하시면 될듯 합니다.^^;;;;;

http://www.techdays.co.kr/2010spring/view.asp?s3=1&b_no=8



저작자 표시
신고
by 흥배 2010.03.29 19:54

RValue Reference에 관한 글의 마지막으로 Perfect Forwarding에 대해서 설명합니다.

 

 

인수 전달 문제

 

< Code 1. >

void inner(int& i)

{

}

 

template <typename T> void outer(T& t) {

           inner(t);

}

 

 

int main()

{

           int a = 5;

           outer(a);

 

           outer(6);

           return 0;

}


<Code 1>을 컴파일 하면 outer(6)에서 컴파일 에러가 발생합니다.

error C2664: 'outer' : cannot convert parameter 1 from 'int' to 'int &'라는 에러 결과가 출력됩니다. <Code 1>을 컴파일 하기 위해서 파라메터에 const를 포함하는 함수를 재정의 해야 합니다.

 

...........나머지 글은 여기에서 봐 주세요^^;

저작자 표시
신고
by 흥배 2009.05.27 01:15

STL RValue Reference

 

앞선 글에서 C++0x STL에는 RValue Reference가 적용되었다고 말했습니다.

이 덕분에 기존의 코드를 수정하지 않고 C++0x의 컴파일러로 빌드만 해도 프로그램의 성능이 좋아집니다.

 

 

RValue Reference가 적용된 C++0x STL vector

VC++ 10 vector쪽 소스 코드를 보면 이전의 vector에는 없던 코드가 있습니다.

< Code 1. STL vector의 소스 중 일부 >

.........................


계속 보실 분들은 여기에서 봐 주세요^^;


저작자 표시
신고
by 흥배 2009.05.20 01:07

이번 회는 Move 생성자와 Move 대입 연산자를 정의 했을 때 어떤 결과가 나오는지, 그리고 std::move 라는 것에 대해서 이야기 하겠습니다.



복사 생성자와 대입 연산자만 정의했을 때

 

< Code 1. 복사 생성자와 대입 연산자 정의 >

class NPC

{ 

public:

           int NPCCode;

          string Name;

 

           NPC()

           {

                     cout << "기본 생성자" << endl;

           }

 

           NPC( int _NpcCode, string _Name )

           {

                     cout << "인자가 있는 생성자" << endl;

           }

 

           NPC(NPC& other)

           {

                     cout << "복사 생성자" << endl;

           }

 

           NPC& operator=(const NPC& npc)

           {

               cout << "대입 연산자" << endl;

               return *this;

           }

};

 

int main()

{

           NPC npc1( NPC( 10,"Orge1") );

          

           NPC npc2(11,"Orge2");

           NPC npc3 = npc2;

          

           NPC npc4;

           NPC npc5;

           npc5 = npc4;

 

           return 0;

}

 

< 결과 >


당연한 결과가 나왔죠^^

 

그럼 <Code 1> Move 생성자와 Move 대입 연산자를 정의하고 결과를 보겠습니다.

 

 

Move 생성자와 Move 대입 연산자 정의

.......
.......
나머지는
여기에서 봐 주세요^^

저작자 표시
신고
by 흥배 2009.05.10 02:55
이전 회에서 이야기 했던 것을 토대로 이번에는 코드로 그것을 보여드리도록 하겠습니다. 이전 글에서 알쏭달쏭 했던 분들은 앞으로 보여줄 코드를 보면 앞의 설명에 대해서 이해할 수 있을 것입니다.

 첫 번째 글이 지루하고 애매했다면 두 번째 글부터 아주 흥미롭고 중요한 이야기가 나옵니다.



Move 생성자와 Move 대입 연산자

기존의 class에서는 복사 생성자와 대입 연산자만 정의할 수 있었지만 RValue Reference에 의해 ‘Move 생성자’와 ‘Move 대입 연산자’라는 것이 생겼습니다.


......계속

저작자 표시
신고
by 흥배 2009.05.06 15:06

C++0x의 새로운 기능인 우측 값 참조라는 것에 대해 설명하려고 합니다.

저는 처음에 이걸 대수롭지 않게 생각했는데..절대 그렇지 않더군요 -_-;;.

그냥 결과만 이해하면 어렵지는 않지만 그 과정까지 이해하려면 C++의 역사를 거슬러 올라가서 왜 이것이 생기게 되었는지, 참조와 우측 참조에 대한 이해가 필요하더군요. 그래서 생각 외로 시간이 많이 걸려서 글을 올리는 시간이 꽤 걸렸습니다.

 

짧게 설명하기는 힘든 것이라서 5회로 나누어서 글을 올리려고 합니다.

이번 회는 금방 이해가 되지 않을 수도 있지만 이론 적인 부분을 설명하고(재미없는 -_-;), 다음 회에는 실제 코드로 예제를 보여드리면서 설명합니다.

제 글 실력이 좋지 않아서 이번 글로 이해하기 힘들 수 있겠지만 귀찮더라도 쭉 정독을 하고 다음 회의 예제를 보면서 RValue Reference에 대하여 알수 있기를 바랍니다.

 

 

 

참조

C++에는 참조라는 라는 것이 있습니다. 사용 방법은 ‘&’을 사용합니다.

Int a = 10;

Int& refA = a;

refA는 변수 A를 참조합니다. 이후 refA의 값을 변경하면 refA가 참조하고 있는 변수 A의 값이 변경됩니다. refA는 변수 A를 가리키고 있는 것입니다.

기존에 ‘&을 사용한 참조는 ‘LValue Reference’라고 부릅니다.

 

 

 

RValue Reference

 

C++0x에는 새롭게 RValue Reference라는 것이 생겼습니다.

RValue Reference의 의해 임시 오브젝트를 만들어서 복사하지 않고 포인터의 이동에 의해 프로그램의 성능이 빨라지고 낭비가 없어집니다(중요!!!).


........계속 보실 분들은 여기에서 봐 주세요^^;
저작자 표시
신고
by 흥배 2009.05.04 10:20
| 1 |

티스토리 툴바