2012-11-29 3 views
0

내가 const 한정자는 객체에 영향을 미치는 것으로 알려져했습니다하지만이 유형의 예를 들면 다음과 같습니다const를 유형에 적용 할 수 있습니까?

: 내가 가진 경우

// Only the elements of an array are constant not the array itself 
const int a[5]; 

가 가정 : 위의 첫 번째 경우

float *const p1; // 1 
float const *p2; // 2 

, 포인터 유형이 상수이고 객체가 아니라는 것을 의미합니까 p1? 유형이 자격을 가질 수없는 경우 어떻게 될 수 있습니까?

+1

"*'const' 한정자는 객체에만 영향을 주지만 그 객체는 타입에 영향을 미치지 않는다는 것을 알고있었습니다 *"- 이것은 잘못된 것입니다. – melpomene

+0

@melpomene : 예를 들어? const가 배열 객체에만 영향을 미치고 유형에 영향을주지 않는다고 말하는 것이 맞지 않습니까? – user963241

+0

그건 사실 맞지 않습니다. – melpomene

답변

2
float *const p1; // 1 

포인터 p1가 일정하고 (오히려 안) 다른 어드레스를 가리킬 수 없다는 것을 의미한다.
상수 인 유형 포인터가 아니지만이 유형의 인스턴스는 p1 content입니다.

더 잘 이해하려면 Clockwise spiral rule을 사용하십시오.

유형을 정규화 할 수없는 경우 어떻게 될 수 있습니까?

이것은 올바르지 않습니다.

const int a[5]; 

a "는 5 명 CONST하는 int의 배열"을 입력 가지고 실제로 규정이 선언 (§6.7.3)

+0

포인터는 파생 된 유형이기 때문에. 이 진술은 여기에 관련이있는 것 같습니까? _ "(§ 6.2.5/26) 파생 된 유형은 파생 된 유형의 한정자 (있는 경우)에 의해 한정되지 않습니다."_ – user963241

1

형 규정 대한 간단한 형태이다.

float *const p1; 

P1이 선언

는 "부유 CONST 포인터"를 입력 갖는다. 이 선언으로

const float *p2; 

P2는 "const를 플로트 포인터"를 입력있다.

배열을 const로 선언 할 방법이 없지만 어쨌든 배열을 변경할 수는 없습니다. 배열의 요소 만 변경할 수 있습니다.

관련 문제