처음에는 컴파일러를 약속했으나 다른 사용자는 변수를 편집하지 않을 것입니다.
두 번째 예에서는 클래스의 다른 사용자에게 변수를 편집하지 않지만 그 약속을 지키지 않았다고 약속했습니다.
또한
const bar* variable
첫 번째 형태에서
const bar* const variable
는, 포인터가 변경하지 않습니다
bar* const variable
와
사이에 뚜렷한 차이가 있음을 유의해야하지만 당신이 가리키는 객체를 편집 할 수 있습니다. 두 번째 형식에서는 포인터를 편집 할 수 있지만 (다른 객체를 가리 키지 않음) 포인터가 가리키는 변수는 절대 편집 할 수 없습니다. 최종 형식에서는 포인터 나 포인터가 가리키는 오브젝트를 편집하지 않습니다.
Reference
명시된 질문에 좀 더 명확한 설명을 추가하려면 항상 const보다 적은 것을 약속 할 수 있습니다. 아무 문제없이
Foo::func1(const int x) {}
Foo::func2(const int* const x) {}
:
Foo::func1(const int x) {}
Foo::func2(const int *x) {}
나 :
class Foo {
void func1 (int x);
void func2 (int *x);
}
당신은 다음과 같은 구현을 컴파일 할 수 클래스를 감안할 때. 사용자에게 변수를 편집 할 가능성이 있다고 말한 것입니다. 구현시, 컴파일러에게이 특정 구현체가 사용자에게 알려주더라도 해당 변수를 편집하지 않을 것이라고 말한 것입니다. 사용자에게 약속을 어긴 적이 없으므로 코드가 컴파일됩니다.
두 번째 예제에서 *의 반대쪽에 const를 넣으려고 했습니까? 어떤 사람들은 그 의미의 차이점을 설명함으로써 대답하고 있으며 다른 사람들은 const가 cpp 또는 h 파일에 있는지 여부를 설명함으로써 대답하고 있습니다. –
당신이 찾고있는 대답이 아닌 경우 질문이나 업데이트에 대한 질문을 선택해야합니다. –