이것은 코드입니다.정수를 가리키는 포인터를 수정할 때 컴파일러에서 오류를 표시하지 않는 이유는 무엇입니까?
int main()
{int v=2;
const int *p=&v;
++v; //Option 1: Does work, but why should it?
// ++*p; //Option 2: Does not work
}
예상대로 컴파일러에서 옵션 2에 대해 오류가 발생합니다. 그러나 포인터의 내용을 정수로 수정하는 경우 옵션 1을 사용합니다. 왜? 아니면 const의 의미에 대해 잘못된 점을 이해하고 있습니까? 스택과 반대로 힙의 변수에만 적용 할 수 있습니까?
는'v'는 const가 아니라 왜 컴파일러가 수정을 허용해서는 안되나요? 'const'는 "이 객체는 결코 수정 될 수 없다"는 뜻이 아닙니다. "이 객체는이 포인터 나 참조를 통해 수정할 수 없습니다"라는 의미입니다. –
@IgorTandetnik const 개체는 수정 될 수 없습니다. 여러분은 포인터에 최상위가 아닌 const 한정자에 대해 이야기하고 있습니다. 중요한 점은 'const'는 다른 상황에서 다른 것을 의미합니다. –
@ M.M 저는 실제로 다소 단순화되어있었습니다. const 객체를 생각하는 한 가지 방법은 (constally) 비 const 포인터 나 참조를 결코 얻을 수 없으므로 수정할 수 없다는 것입니다. –