2013-01-05 2 views
2

현재 저는 const가되고 싶은 C++의 응용 프로그램을 만들고 있습니다. 가능하다면 매개 변수에 const를 사용하면 그런 의미가됩니다. 그러나이 C++ 응용 프로그램은 const를 자주 사용하지 않는 C 라이브러리를 사용합니다. 내가 겪고있는 문제는 C 라이브러리의 함수에 매개 변수를 보낼 때 매개 변수가 const 일 수 없기 때문에 캐스팅을해야한다는 것입니다.

const 캐스트 유형을 사용하면 전체 const의 정확성을 떨어 뜨리는 방향으로 작업하고 있습니다. const가 맞지 않는 C 라이브러리로 작업 할 때,이 라이브러리를 쉽게 사용하기 위해 흐름을 따라 가고 const 정확성을 사용하지 않습니까? 아니면 내가 볼 수없는 더 좋은 방법이 있습니까? 이것은 약간 작은 프로그램이므로 라이브러리를 사용하는 부분을 격리하고 해당 부분을 const가 아닌 부분으로 만드는 것은 실제로 옵션이 아닙니다.const C 라이브러리에서 C 라이브러리를 사용할 때

+3

절대 인수가 변경되지 않는다고 확신하는 경우에는'const_cast'를 사용할 수 있지만 항상 대신 복사본을 만들 수 있습니다. – chris

+0

프로그래머를위한 더 적합한 IMO는 코딩 스타일이 아니라 코딩 문제입니다. –

+0

@chris 나는 안전한 사본을 만들 수 없습니다. – Josh

답변

4

필자는 개인적으로 const의 라이브러리가 아닌 라이브러리의 경계에서 캐스트를 사용하는 것을 선호합니다. 이 접근 방식의 장점은 코드가 const의 적절한 사용의 이점을 얻을 수 있도록 허용한다는 것입니다. 단점은 라이브러리가 "임시적으로"객체를 수정하여 const를 제거했다면 프로그램이 잘못 될 수 있다는 것입니다.

예를 들어 논리적으로 수정하지 않는 char * 매개 변수를 사용하는 C 라이브러리를 보았습니다. 그러나 파서는 문자열의 구분 기호를 임시로 대체하여 strcpy을 사용하여 추출 할 수 있습니다. C++ 함수가 const char *을 취하도록 const를 버리면 다른 누군가가 실제로 const 인 객체에 포인터를 전달하면 구분 기호를 0으로 "임시로"대체하면 오류가 발생합니다.

+0

+1 제 3 자 라이브러리와 마찬가지로 "신뢰할 수있는"상업용 암호화 라이브러리 중 하나와 유사한 "기능"을 경험했습니다. – WhozCraig

관련 문제