EC++ 에 보면 const에 대한 설명이 잠깐 나온다.
설명을 보면..
1. char* a;
2. const char* a;
3. char* const a;
4. const char* const a;
2. const char* a;
3. char* const a;
4. const char* const a;
위의 넷이 다른 타입이라는 것을 설명하고 있다.
그렇다면.. 간혹 볼 수 있는 const char** 는 어떤 타입일까?
5. const (const char*)*
6. const (char *)*
7. (const char*)*
6. const (char *)*
7. (const char*)*
일단 5,6,7 중의 하나라고 생각할 수 있겠다.
5,6,7의 차이는 어떤 곳에 const의 속성이 붙느냐에 따라서 명확히 다른 type이다.
그렇다면....
- const char**은 5,6,7 중 어떤 타입일까?
- 셋 중에 하나라면 다른 두 가지는 어떻게 표현해야 할까?
이런 의문점이 생기게 만드는 const char** 표현은 그다지 바람직한 모양은 아닌 것 같다.
일단 정답은 7번
const char**는 (const char*)* 이다.
사용법은 아래와 같다.
char* pc = new char[20];
const char* cpc = new char[20];
const char* cpc = new char[20];
const char** cppc;
cppc = &pc; // (X) error: invalid conversion from 'char**' to 'const char**'
cppc = &cpc;
*cppc = pc;
*cppc = cpc;
**cppc = '1'; // (X) error: you cannot assign to a variable that is const
char** ppc = cppc; // (X) error: invalid conversion from 'const char**' to 'char**'
유의 깊게 볼 점은..
char** 와 const char** 은 상호 conversion이 안 된다는 점인데
char*는 const char*로 conversion이 된다는 점에서 차이가 있음을 알고 있을 필요가 있다.
그렇다면 5, 6번의 타입을 만들고 싶다면 어떻게 해야 할까?
방법 중 하나는 typedef를 쓰면 된다.
typedef char* PCHAR;
typedef const char* CPCHAR;
const PCHAR* a;
const CPCHAR* a;
typedef const char* CPCHAR;
const PCHAR* a;
const CPCHAR* a;
'정보 공유터' 카테고리의 다른 글
| 영어에서 시간과 시각 구분하기 (2) | 2009/04/28 |
|---|---|
| Boost.Intrusive - STL Container보다 빠른 Container (1) | 2009/04/28 |
| Windows Tip - 메시지 박스 내용 복사하기. (10) | 2008/07/19 |
| C++에서 const char** (2) | 2008/06/30 |
| [TIP] 티스토리에서 MP3 쉽게 다운 받기 (3) | 2008/06/05 |
| Internet Explorer 8에서 바뀐점 (8) | 2008/03/08 |
| Internet Explorer 8의 사용후기 (2) | 2008/03/08 |
