2012-03-23 5 views
4

함수 시그니처의 const 값으로 매개 변수를 전달할 때 어떤 이점 (또는 반대로 비용)이 있습니까?const 복사로 전달

그래서 :

void foo(size_t nValue) 
{ 
    // ... 

void foo(const size_t nValue) 
{ 
    // ... 

내가 매개 변수를 확인하는 것입니다 생각할 수있는이 작업을 수행하는 유일한 이유는 기능의 일부로 수정되지 않았하지만 그 이후 참조로 전달되지 않았 으면 함수 외부에 더 큰 영향은 없습니다.

+6

귀하가 직접 질문에 답변했습니다. – ulidtko

+0

나는 그렇게 생각했지만 실종 된 것이있는 경우에 대비해 묻고 싶었다. – Konrad

답변

4

물론 있습니다. 함수 내에서 nValue을 수정할 수 없습니다.

일반적으로 const과 비슷하지만 보안 조치가 아니기 때문에 멀리 던질 수는 있지만 디자인 문제는 아닙니다.

당신은 명시 적으로 코드를 볼 다른 프로그래머를 말하는거야 -

는 "이 함수 내에서

및 유지하거나 코드를 변경 프로그래머를 nValue를 수정하지 않습니다

"nValue을 수정하려면 아마도 뭔가 잘못하고있을 것입니다. 당신은 "이 작업을 수행 할 필요가 없습니다.

+0

+1은 내 사고 방식 이었기 때문에 – Konrad

+0

나는 Luchian이 디자인을 강요한다는 사실 때문에 다른 사람들보다이 답에 더 동의한다. 매개 변수를 const로 전달하면 값을 수정하지 않아도됩니다. 언급 한대로 해킹 할 수 있지만 기본 원칙은 데이터가 올바르게 관리되고 있는지 확인하는 것입니다. –

4

여기에서 최상위 레벨 const은 함수의 정의에만 영향을 미치며 함수에서 nValue의 값을 수정하지 못하도록합니다.

최상위 레벨 const은 함수 선언에 영향을주지 않습니다. 다음 두 선언은 정확히 동일 : 매개 변수가 수정인지 아닌지

void foo(size_t nValue); 
void foo(const size_t nValue); 
+0

동의했다. 나는이 같은 코드를 보았고 여기서 뭔가를 놓친다면 잘 풀 수있다. – Konrad

+0

'const'를 제거해도 결과 바이너리 코드가 변경되지 않는다는 점에서 '정확히'동일 할 수도 있지만, const를 추가하면 함수 구현에서 전달 된 값으로 수행 할 수있는 작업에 제한이 추가됩니다.이 문장은'class'와'struct'가 정확히 동일하다는 것을 말하고 있습니다 - 어느 정도는 사실이지만 ... –

+2

@GeorgeSkoptsov : 아니요, 똑같습니다. 'const' 함수는 _declaration_ 함수에 전혀 영향을 미치지 않습니다. 함수의 _deffinition_에만 영향을줍니다. 이러한 선언을 모두 C++ 프로그램에 넣으면 둘 다 동일한 함수를 선언합니다. –

0

에 관계없이, 당신은 또한 당신이 잘못 함수 내에서 매개 변수의 값을 변경하려고하지 않는 것을 보장 const를 사용.

0

당신이 입력 매개 변수를 const 정의하는 경우, 해당 객체에 const를 함수를 바로 호출 할 수 있습니다.

어쨌든 실수로 그 객체를 변경하려고하면, 당신은 것입니다 컴파일러 오류가 발생합니다.

0

최근에이 작업을 수행하기로 결정했습니다. const &const * 매개 변수를 사용하여 일종의 일관성을 유지하는 것이 좋으며, const correctness를 사용하면 더 나은 삶을 누릴 수 있습니다. 가치를 바꾸지 않으려 고합니다. 왜 그것을 const로 만들지 않습니까? const로 만들어서 의도를 명확하게 전달하십시오.

관련 문제