2020년 7월 1일 수요일

& 레퍼런스 사용시 대소 관계 사용 주의

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

void main()

{

int a = 1;

int& b = a;

a = 2;

printf("%d\n", b); // 원래 쓰이는 레퍼런스 용법

auto getReference = [](const int& a) { return &a; };

auto getCopy = [](const int& a) { return a; };

int _array[] = { 3, 2, 1 };

getReference(_array[0]) > getReference(_array[1]) ? printf("3 is bigger than 2\n") : printf("2 is bigger than 3\n");

getCopy(_array[0]) > getCopy(_array[1]) ? printf("3 is bigger than 2\n") : printf("2 is bigger than 3\n");

}

& 는 값에 할당되기 전엔 주소값을 갖는다. 즉 2가 3보다 크다는 이야기는 주소값 비교한 결과의 이야기다.

그런데 class 멤버변수 다루면서 get, set 만들 때 가끔 레퍼런스로 빼는 경우가 있는데, 값을 할당 안하고 함수로 다룰 경우 if 문의 이상한 행태를 보고 놀라게 된다.

그러니까 주소값을 빼온건지 복사한 값을 빼온 건지 get, set 함수를 쓰면서 유의해야 한다.

댓글 없음:

댓글 쓰기

List