ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 참조형 리턴 타입 / const 키워드
    @ 16. 1 ~ 17. 1/C++ 2014. 3. 5. 23:23

    함수나 메서드의 리턴값에도 참조령 타입을 사용할 수 있다.(포인터 역시)

    당연하지만 참조형 리턴 타입은 리턴되는 객체가 함수/메서드의 종료 이후에도 계속 유효할 때만 사용할 수 있다.

    로컬변수가 안되는 이유는 로컬변수는 함수가 구동되는 동안만 유요한 스택에 저장되어 있다가 함수가 리턴할때 스택과 함께 삭제된다.

     

    const 키워드

    무언가 절대 변경되지 말아야 할 것을 지정한다.

    • 데이터가 변경되는 것을 막고 싶다면

    const int* p;

    p=new int[10];

    p[4]=5; // 컴파일 에러

    @ ip가 가리키는 데이터는 수정할 수 없게된다.

    방식은 다르지만 int const* p로 선언해도 같은 효가가 나타난다.

    const 키워드를 int앞에 두든 뒤에 두든 기능적으로는 아무런 차이가 없다.

     

    • 데이터가 아닌 포인터 p자체를 const하고 싶다면

    int* const p=nullptr;

    p=new int[10]; //컴파일 에러

    이렇게 하면 p자체에 대한 변경은 불가능하게 된다. 단 선언과 동시에 초기화하면 컴파일 된다.

    int* const p=new int[10];

     

    그럼

    int const* const p=nullptr;

    const int* const p=nullptr

    은 방식은 다르나, 포인터 자체뿐만 아니라 가리키는 데이터까지 지정한 것이다.

     

    변수선언이 복잡할때 const의 적용 방식을 오른쪽에서 왼쪽으로 읽어나간다.

    int* const ip의경우 오른쪽에서부터 읽으면 ip는 const포인터(*)로 int를 가르킨다

    int const* p를 오른쪽에서 읽으면 ip는 포인터(*)로 const int를 가르킨다.

     

    '@ 16. 1 ~ 17. 1 > C++' 카테고리의 다른 글

    열혈강의 C++(잊어버린 부분 정리 1)  (0) 2014.04.06
    typedef  (0) 2014.03.06
    메서드 오버라이딩의 특수한 경우들(2)  (1) 2014.03.04
    메서드 오버라이딩의 특수한 경우들(1)  (0) 2014.03.03
    ostringstream  (0) 2014.03.02
Designed by Tistory.