-
참조형 리턴 타입 / 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