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 |