2015년 6월 8일 월요일

[C++11] 퍼펙트 포워딩

함수의 인자로 받은 값을 변경했을때 함수의 외부로 적용되게 하려면 참조 또는 포인터로 받아야 합니다. 여기서는 참조로만 받는다고 가정합니다.
void increment(int &i)
{
i++;
}

int main()
{
int a = 1;
increment(a);
// increment(1); // 에러가 발생합니다.

return 0;
}
increment(1)을 성공하게 하려면 함수 오버로딩을 사용하면 됩니다. 하지만 귀찮죠?

C++11의 R-Value 레퍼런스를 사용하면 함수 오버로딩을 사용하지 않아도 해결할수 있습니다.
void increment(int &&i)
{
i++;
}

하지만 컴파일해보면 이번엔 increment(a)에서 에러가 발생합니다. R-Value 레퍼런스를 사용하여 인자를 넘기려면 메모리를 이동해야 하는데 이를 위해 std::move() 함수를 사용하면 됩니다.
 increment(std::move(a)); // 에러가 발생하지 않습니다

댓글 없음:

댓글 쓰기