2012-05-22 3 views
3

필자의 삶에서 typedef를 C++ 문으로 변환하는 데 사용되는 규칙은 무엇인지 잘 설명 할 수 없습니다. 내가 이해하는 간단한 경우들. 그러나 Danny Kalev에서이 사항을 고려하십시오C++ typedef 구문 규칙

typedef char * pstr; 
int mystrcmp(const pstr, const pstr); //wrong! 

대니 Kalev은 다음 글을 참고하세요 :

시퀀스 CONST의 pstr 실제로 숯불 *의 CONST (CHAR하는 CONST 포인터)를 의미한다 하지 CONST의 char * (CONST 문자에 대한 포인터.

난 아무데도 "const를 pstr"가 "의 char *에 const를"로 변환 될 것입니다 이유를 설명 할 수있는 규칙을 찾을 수 없습니다. 어떤 도움

감사합니다. pstrchar*의 별칭이고 당신이 할 때 const pstr 조금 const (char*)하지 (const char)* 말처럼 때문에

+2

논리적 인 것 같습니다. 'pstr' 타입을 char에 대한 포인터로 정의하고 있습니다. 그래서'const pstr'는 char, const char * const'에 대한 포인터입니다. – arrowd

+2

간단한 어림짐작. 'typedef'! ='#define '입니다. 설명하는 것을 원하면 매크로를 사용해야합니다. –

+0

post-const 형식을 일관되게 사용하면 더 많은 의미가 있습니다. 'pstr const' =='char * const'. pre-const 형식은 예외이므로 상황을 혼란스럽게 할 수 있습니다. –

답변

5

그것은이다

+0

감사합니다. 이것은 사물에 약간의 빛을 비춰줍니다. 나는 여전히 "const pstr"이 "const char *"로 확장되고 "const char *"로 확장되지 않는다는 문서가 있는지 알고 싶어합니다. – DavidS

3

타입 정의를 매크로를 좋아하지된다. 그렇지 않습니다 그냥 간단한 텍스트 대체를 수행하십시오. typedef는 단일 단위를 정의하고 추가로 const이 전체에 적용됩니다. 정의 된 단위는 포인터이므로 const을 적용하면 const 포인터가됩니다.

예상 한 결과 const이유형을 "내부에 닿아"내부에 적용해야합니다. 더 많은 포인터 레벨이 그 타입 안에서 선언 되었다면 악화 될 것입니다. typedef char*** pppstr을 고려하십시오. 이 값을 char const***으로 만들려면 constpppstr 유형의 세 단계 아래에 삽입해야합니다. 형식 정의가 실제로 복잡하더라도 관계없이 규칙에 따라 const을 일관되게 적용하는 것이 좋습니다.