가능한 중복 :
const int = int const?C/C++ 상수
키워드의이 조합의 차이점은 무엇입니까?
const int*
int const*
int* const
포인터를 사용하여 주소에 액세스하여 상수 값을 수정할 수 있습니까?
가능한 중복 :
const int = int const?C/C++ 상수
키워드의이 조합의 차이점은 무엇입니까?
const int*
int const*
int* const
포인터를 사용하여 주소에 액세스하여 상수 값을 수정할 수 있습니까?
:
const T === T const
및
const T * === T const *
하지만
T * const
가 포인터 일정을 만들지 만, 반드시 내용 of T.
const T * const === T const * const
은 T의 내용과 포인터 자체를 모두 상수로 만듭니다.
const
의 내용 변경에 관해서는
: 당신이 할 수 없게해야한다,하지만 당신은 구어체로 "정의되지 않은 동작이라고 것을 얻을 수 있도록 컴파일러/OS/CPU, 당신을 중지 너무 열심히하지 마세요 "어떤 말의 좋은 방법이다"도움이 될 수있는 몇 가지 시스템 "
첫 번째 두 개는 const int에 대한 변수 포인터입니다. 포인터 자체는 변경할 수 있습니다. const를 캐스팅하지 않으면이 포인터를 통해 int를 변경할 수 없습니다. (그러나 const가 아닌 참조를 통해 수정할 수 있습니다.)
마지막은 변수 int에 대한 const 포인터입니다. const를 캐스팅하지 않으면 포인터 자체를 변경할 수 없습니다. int는 포인터를 통해 변경할 수 있습니다.
const int*
int const*
두 가지 모두 상수 유형 int
에 대한 포인터를 선언합니다. 즉, 포인터가 다른 주소를 가리 키도록 지정할 수 있지만 상수 정수 데이터 유형을 수정하려는 시도는 입니다. 정의되지 않은 동작.
int* const
int
유형에 대한 상수 포인터를 선언합니다. 즉, 포인터는 항상 동일한 주소를 가리키는 새 주소를 할당 할 수 없지만 포인터가 가리키는 정수는 변경할 수 있습니다.
포인터를 사용하여 주소에 액세스하여 상수 값을 수정할 수 있습니까?
예, 그것은 가능하지만 그것은 정의되지 않은 동작을 나타내는 병이 형성 프로그램으로 이어집니다.
수정 사항 - int가 반드시 상수 일 필요는 없습니다. 포인터를 통해 int를 수정하려고하면 * 컴파일시 오류가 발생합니다. * –
const int*
및 int const*
은 모두 상수 int에 대한 포인터입니다. 즉, 가리키는 값은 변경할 수 없지만 포인터 자체는 변경할 수 있습니다.
세 번째 예제 int *const
은 int에 대한 상수 포인터입니다. 즉, 값을 변경할 수는 있지만 포인터는 변경할 수 없습니다.
예 포인터를 사용하여 주소 값을 변경할 수는 있지만 정의되지 않은 동작이므로 피해야합니다. C++
도 변수의 const
을 제거하기 위해 const_cast
을 제공합니다.
const
키워드와 관련된 다른 문의 사항은 const correctness section of the C++ FAQ을 참조하십시오.일반적으로
왼쪽에 Const가 바인딩됩니다.
가장 왼쪽 절이 아니라면 오른쪽에 바인딩됩니다.
은 그냥
const int* => (const int)* => "pointer" to "const int"
=> Pointer can change.
=> Can't change the value it points at (the int is const)
int const* => (int const)* => "pointer" to "const int"
=> As above
int* const => int (* const) => "const pointer" to "int"
=> Can't change the pointer (its const) it always points
=> at the same things.
=> You can change the value of the object it points at.
Arrgh, 너무 많은 중복을 오른쪽 또는 왼쪽으로 읽어! 브루스 에켈 (Bruce Eckel)에 의해 ++ C에서 생각 –
은 CONST을 사용하고 바로 왼쪽에있는 경우가 아니면 * –
CONST가에 다음 왼쪽에 바인딩 할 때 이와 유사한 구문의 차이점에 대한 섹션을 포함하여 C의 대부분의 모든 모서리를 ++ 설명 훌륭한 책이다 오른쪽 바인딩합니다. –