CDump& CDump::Func(const char* pt);
CDump& CDump::Func(char* const pt);
const CDump& CDump::Func(char* pt);
CDump& CDump::Func(char* const pt) const;
위치 상으로는 4가지이지만 이게 조합되면 더 많은 경우가 발생하게 된다.
1. CDump& CDump::Func(const char* pt);
이 경우는 Func 메소드에서 pt 포인터 변수에 문자열의 주소를 받고,이때 Func 메소드에서는 pt 포인터 변수가 가리키는 문자열의 공간의 데이터를 상수화 되어 데이터자체를 변경할 수 없다. 하지만 pt 변수는 다른 문자열 주소를 받을 수 있다. pt는 변수를 const한게 아니라 가리키는 곳을 const한 것이므로 데이터만 수정할 수 없다는 것이 특징.
2. CDump& CDump::Func(char* const pt);
이 경우는 Func메소드에서 pt 포인터변수에 문자열의 주소를 받는다.
이때 pt는 주소를 받으면서 변수가 아니라 상수라는 의미이다.달리 말하면 pt라는 변수에 다른 주소를 넣을 수 없지만 pt가 가리키고 있는 데이터공간은 const가 아니므로 데이터를 수정할 수 있다. CDump& CDump::Func(const char* pt); 메소드와의 큰 차이점.
3. const CDump& CDump::Func(char* pt);
이 메소드의 경우는 문자열을 주소를 받아서 처리하는데 Func메소드로 리턴되는 객체에 대해서 const 화 합니다. 이 메소드로 받는 객체는 const이므로 객체내의 변수나 데이터를 수정할 수 없습니다.
4. CDump& CDump::Func(char* const pt) const;
이 메소드는 Func 메소드를 처리하는 동안 자신의 객체를 const화 한다.이 메소드를 처리할 동안 객체의 모든 데이터를 수정할 수 없다는 의미이고.const CDump& CDump::Func(char* pt); 이 메소드와의 차이점은 시점차이이다.const CDump& CDump::Func(char* pt); 이 메소드는 메소드내에서는 자신의 모든 데이터를 수정하거나 가공할 수있지만 리턴 된 객체로 처리할때에는 const되는 것이특징.
하지만 CDump& CDump::Func(char* const pt) const; 이 메소드는 리턴 된 자신의 참조형 객체는 const 하지 않기 때문에 리턴된 객체로 데이터를 수정하거나 가공할 수 있고 즉, 메소드 뒤에 const는 메소드를 처리할 동안에 자신의 객체는 const화 한다는 의미이다.
출처 : C++ 프라이머 플러스