2012-03-09 5 views
0

const &을 함수의 인수로 전달하는 데 문제가있을 수 있습니까?const 인수를 함수 인수로 전달

최근에 참조로 전달할 값으로 전달되는 모든 객체를 다시 작성하여 적용 가능한 경우 & 또는 const &으로 전달했습니다.

컴파일러 오류가 없었습니다.

응용 프로그램이 Windows 서비스이고 시작할 수 없습니다. 우리는 디버그 버전이 없기 때문에 나는 여기 물어볼 것이다.

+2

다릅니다. 디버그 버전을 만들고 문제를 디버깅하는 것이 좋습니다. –

+0

이전에 모든 것을 값으로 전달한 경우. 그리고 방금 참조로 변경 한 다음 모두 const로 변경해야합니다. 그렇지 않으면 코드가 수행하는 작업이 변경됩니다. 어떤 방법으로 매개 변수를 수정하는 경우 원본을 수정하지 않아야합니다 (그렇지 않으면 코드의 의미가 변경됨). –

+0

왜이 변경 작업을 수행하고 있습니까? 'void func (int param)'을 가지고 있다면, 그것을 void func (const int & param)로 바꿀 수 있습니다. 그러나 그것은 무엇을 얻게됩니까? –

답변

0

응용 프로그램 동작이 변경되었을 수있는 한 가지 방법은 이전에 값으로 전달 된 &으로 무언가를 전달한 경우 해당 상태를 수정하고 이전 코드는 상태 변경이 발생하지 않을 것으로 예상하고 개체가 함수에 전달 된 것은 여전히 ​​전달되기 전에 있었던 상태입니다.

&을 전달하면 문제가 발생할 수 있으며 const&이 아닙니다. ... grep 코드베이스가 const_cast 인 경우를 제외하고.

+0

이것을 위해'const_cast'가 필요 없습니다. 포인터 멤버가 포함 된 클래스를 생각해보십시오. 객체를'const'로 만드는 것은 가리키는 것을 보호하지 않습니다. –

+0

@OliCharlesworth 만약 포인터가'const'-correct이면 어떻게 될까요? – pmr

+0

클래스 인스턴스를'const'로 만들면 모든 멤버가 효과적으로'const'가되므로'int * my_ptr '형식의 클래스 멤버는 효과적으로'int * const my_ptr'가됩니다. 하지만 그것은'const int * my_ptr'와는 다릅니다. –

관련 문제