티스토리 뷰

언어

C++ 참조 정리

jazzmaster 2019. 6. 6. 17:25

면접 대비용으로 공부하면서 정리한거라 다소 두서가 없어 보일 수 있음.

 

 

 

 

1. 참조형 변수는 생성하자마자 초기화 해야함

예 int ace = 10;

    int& son = ace;

 

1.1 참조를 한 변수 (위에서 son)를 변경하면 원본(위에서 ace)도 변경된다.

 

1.2 클래스 멤버 변수는 생성하자마자 초기화를 해주지 않아도 된다.

 

1.3 숫자와 같은 것들은 참조를 할 수 없다.

예 int& ronaldo = 7;   --> 생각해보면 말이 안된다. 변경을 할 수가 없는데 어찌 참조하나 

    * 그대신 const 키워드가 있으면 가능하다 const int& ronaldo = 7 뭐 이런식으로 말이지.

 

 

1.4 참조형 변수는 한 번 선언할 때 초기화 되면 참조 대상은 절대 바뀌지 않는다. 단지 값만 바뀔 수 있다.

 

1.5 참조형 클래스 데이터 멤버

참조형 멤버는 생성자 초기화 리스트에서 만들어주어야 한다.(바디 말고)

ex) class Barcelona

{

    public:

        Barcelona(int& messi) : m_player(messi) {} 

    private:

        int& m_player;

}

 

1.6 참조형 리턴값을 사용하는 이유는 효율성. 불필요한 복제 오버헤드 피함.

 

 

 

2. 참조와 포인터

 

2.1 참조가 할 수 있는일은 포인터도 할 수 있다. 다만 참조는 코드를 간결하게 만들어준다.

     그리고 참조가 더 안전하다. 유효하지 않은 데이터를 가리키는 것이 불가능 하니까 

 

2.2 참조 대신 포인터를 사용해야 할때는 가리키는 대상을 바꿔야 할 때와 파라미터에서 nullptr과 같은

디폴트 값을 지정해야 할때 사용한다.

 

2.3 결론적으로 참조 대상을 바꾸어야 할 필요성이 없으면 참조를 사용하는게 안전함.

 

 

3. rvalue 참조형 파라미터는 && 이다.

 

ex) void Run(int&& num)

{

    ++num;

}

뭐 이런 클래스가 있다고 가정하자.

 

int a = 123 , b = 454;

Run(a+b) 이런식(임시변수) 으로 함수를 불러야 한다면 rvalue 참조를 해주어야 한다.

 

또한 상수 구문도 rvalue 파라미터로 사용될 수 있다.

Run(1234) 이런식으로 말이다. 생각해보면 당연하다. 1234라는 숫자는 절대 좌변에 올 수 없다.

 

굳이 lvalue 값을 rvalue 파라미터에 호출을 하고 싶다면 std::move를 사용하면 된다.

ex) int b = 10;

      Run(std::move(b)) ;    --> 이런식으로 호출 할 수는 있음.

 

 

 

3.1 rvalue 참조가 항상 파라미터에만 이용되는건 아니다.

일반적인 변수들도 동일하게 적용된다.

 

ex) int& messi = 4;    // 이건 당연히 안된다. 되게 하려면 const를 써주어야 함.

     int&& messi = 4;   // 이건 된다. rvalue 참조. 근데 굳이라는 느낌이 있긴 하다.

 

    int soccer = 10 , int baseball = 34;  

    int& score = soccer + baseball       // 이건 당연히 안된다. rvalue 참조니까

    int&& score = soccer + baseball    // 이건 된다.

 

 

 

 

 

 

 

 

 

 

 

 

'언어' 카테고리의 다른 글

C++ 초기화  (0) 2019.06.06
C++ 타입 그리고 캐스팅 방법  (0) 2019.06.06
C++ 아주 헷갈리는 const 키워드  (0) 2019.06.06
C++ 이동 시맨틱  (0) 2019.06.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함