2017-05-24 5 views
-1

이 두 코드의 차이점은 무엇입니까? 두 코드 간의 차이점 : 상수 정수에 대한 상수 포인터 초기화

2.

const int ic = 2; 
const int* const p3 = ⁣ 

1

const int ic = 2; 
const int* const p3; 
p3 = ⁣ 

1.

는 컴파일되지 않습니다. 2가 컴파일됩니다. 나에게 정수 정수의 메모리 주소를 상수 정수를 가리키는 상수 포인터에 할당하는 것과 똑같이 보입니다. 그것은 C++에서 초기화 또는 컨벤션과 관련이 있다고 생각합니다.

편집 : error: assignment of read-only variable 'p3' 첫 번째 왜 그것이 초기화되지 않았을 때 읽기 전용인지 나는 알 수 없다. const 규칙에 따라 초기화 된 값은 변경할 수 없지만이 값은 초기화되지 않습니다.

답변

3

처음에는 조금 혼란 스러울 수 있습니다. 여기 const 포인터는 const int이므로 변수 자체 (포인터)는 const입니다. const으로 표시된 모든 것은 C++에서 construction (creation)으로 초기화되어야합니다. 첫 번째 스 니펫에서 초기화되지 않은 채로 두십시오.

const int* const p3; // const pointer un-initialized, error here 

그래서 오류가 발생합니다. 그것은 당신이 그냥 초기화하지 않고 const를 정의 할 수 없습니다

const int i; // won't compile 
i = 42; 

시도와 유사합니다.

+0

unitally되었을 때 p3이 임의의 위치를 ​​가리키고 있다는 것을 의미합니까? –

+1

@NimitPatel 아니, 그렇다고해서 그런 의미는 아닙니다. 컴파일러는 코드를 받아들이지 않습니다. 모든 const는 생성시 초기화되어야합니다 (컴파일러가 실행 파일의 다른 영역, 예를 들어 읽기 전용 영역에 값을 넣을 가능성이 큽니다). – vsoftco