현재 저는 const가되고 싶은 C++의 응용 프로그램을 만들고 있습니다. 가능하다면 매개 변수에 const를 사용하면 그런 의미가됩니다. 그러나이 C++ 응용 프로그램은 const를 자주 사용하지 않는 C 라이브러리를 사용합니다. 내가 겪고있는 문제는 C 라이브러리의 함수에 매개 변수를 보낼 때 매개 변수가 const 일 수 없기 때문에 캐스팅을해야한다는 것입니다.
const 캐스트 유형을 사용하면 전체 const의 정확성을 떨어 뜨리는 방향으로 작업하고 있습니다. const가 맞지 않는 C 라이브러리로 작업 할 때,이 라이브러리를 쉽게 사용하기 위해 흐름을 따라 가고 const 정확성을 사용하지 않습니까? 아니면 내가 볼 수없는 더 좋은 방법이 있습니까? 이것은 약간 작은 프로그램이므로 라이브러리를 사용하는 부분을 격리하고 해당 부분을 const가 아닌 부분으로 만드는 것은 실제로 옵션이 아닙니다.const C 라이브러리에서 C 라이브러리를 사용할 때
2
A
답변
4
필자는 개인적으로 const의 라이브러리가 아닌 라이브러리의 경계에서 캐스트를 사용하는 것을 선호합니다. 이 접근 방식의 장점은 코드가 const의 적절한 사용의 이점을 얻을 수 있도록 허용한다는 것입니다. 단점은 라이브러리가 "임시적으로"객체를 수정하여 const를 제거했다면 프로그램이 잘못 될 수 있다는 것입니다.
예를 들어 논리적으로 수정하지 않는 char *
매개 변수를 사용하는 C 라이브러리를 보았습니다. 그러나 파서는 문자열의 구분 기호를 임시로 대체하여 strcpy
을 사용하여 추출 할 수 있습니다. C++ 함수가 const char *
을 취하도록 const를 버리면 다른 누군가가 실제로 const 인 객체에 포인터를 전달하면 구분 기호를 0으로 "임시로"대체하면 오류가 발생합니다.
+0
+1 제 3 자 라이브러리와 마찬가지로 "신뢰할 수있는"상업용 암호화 라이브러리 중 하나와 유사한 "기능"을 경험했습니다. – WhozCraig
관련 문제
- 1. C++은 다른 라이브러리에서 라이브러리를 사용할 수 없습니다.
- 2. C 라이브러리에서 C++ 사용
- 3. C# 응용 프로그램에서 C++ 라이브러리를 사용할 때 마샬링 오류가 발생했습니다.
- 4. C 프로그램에서 C++ 라이브러리를 사용할 수 있습니까?
- 5. 정적 라이브러리에서 C & C++ 코드를 섞음
- 6. C++ 프로그램의 C 라이브러리에서 함수를 호출 할 때 함정이 있습니까?
- 7. C 라이브러리에서 C#을 사용하는 방법
- 8. 라이브러리에서 C# 클래스 라이브러리를 참조하는 응용 프로그램의 속성을 가져옵니다.
- 9. Const 정확성 경고 C++
- 10. 의미는 'char const * const c = ""'
- 11. VB 클래스 라이브러리에서 C#
- 12. C++ const char * to const char * const
- 13. C/C++ 표준 라이브러리에서 버퍼링
- 14. C 코드의 C++ 라이브러리에서 옵저버 패턴 내보내기
- 15. 언제 C 언어로 라이브러리를 링크해야합니까?
- 16. getter에서 C++ const
- 17. 리눅스의 C++ 라이브러리에서 C++ 함수 호출하기
- 18. extern const in C++
- 19. C++ 라이브러리에서 C++/CLI 함수 호출
- 20. C# - const 문자열 사전
- 21. Android의 JNI 라이브러리에서 C++ 예외를 사용할 수 있습니까?
- 22. C 프로그램에서 호출되는 C++ 라이브러리에서 새롭고 삭제하십시오.
- 23. 오류 VS2010에서 사용할 MATLAB과 함께 C 공유 라이브러리를 만들 때
- 24. C++ 병합 정적 라이브러리를 사용할 때 정의되지 않은 참조 오류
- 25. 여러 솔루션/프로젝트에 사용할 C# 라이브러리를 개발할 때 우수 사례
- 26. const ref와 const 포인터의 차이점, C++
- 27. Const C++ 함수에서의 할당
- 28. C#의 GitHub 라이브러리에서 Hid 라이브러리를 참조하여 사용하십시오.
- 29. C : const 구조체의 배열에있는 외부 const int
- 30. WMI를 사용할 때 라이브러리에서 사용해야 할 내용
절대 인수가 변경되지 않는다고 확신하는 경우에는'const_cast'를 사용할 수 있지만 항상 대신 복사본을 만들 수 있습니다. – chris
프로그래머를위한 더 적합한 IMO는 코딩 스타일이 아니라 코딩 문제입니다. –
@chris 나는 안전한 사본을 만들 수 없습니다. – Josh