편집하다
MM이 언급했듯이 프로토 타입 의 매개 변수에 const
대해서는 무시됩니다. 원본 답변의 수정 된 출처 (아래 참조)는 다음과 같습니다.
float correct(float const value);
float erroneous(float const value);
float changer(float value);
float correct(float value) {
return -value;
}
float erroneous(float value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
오류 메시지가 없습니다.
어쨌든, 나는 그것이 도움이되기를 바라면서 원본을 그대로 두겠습니다.
기발한
const
매개 변수에서이 만드는 매개 변수 읽기 전용 함수 내에서합니다.
예를 들면 다음과 같습니다.
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
이 소스는 오류 메시지없이 컴파일되지 않습니다.
함수 correct()
는 주어진 값을 읽고 부호를 변경하고 부정 된 값을 반환합니다.
erroneous()
매개 변수에 할당이 있다는 점을 제외하고는 함수 가 효과적으로 동일한 것으로 보입니다. 그러나 매개 변수는 const
허용되지 않습니다.
다음으로 함수 changer()
는 이전과 같이 작동하지만 오류는 없습니다.
콜 사이트를 보자 :
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
변수 f
인수로 제공이됩니다 복사 매개 변수로 value
. changer()
호출 되더라도 변경되지 않습니다 .
매개 변수를 일종의 로컬 변수로 보려고 할 수 있습니다. 실제로 이들은 생성 된 머신 코드에서 대부분 이와 같이 처리됩니다.
왜 const
가끔 봅니까? 포인터 가 매개 변수로 정의 된 경우이를 볼 수 있습니다 .
지정된 값 을 변경 하지 않으려면 추가해야합니다 const
. 그러나 올바른 위치에서 수행하십시오!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
const
여기에 여분이 있는데, 무슨 일이 일어나고 있습니까?