2010-12-05 2 views
3

streambuf, setg의 세 가지 "gptrs"를 설정하는 basic_streambuf 멤버는 다음과 같이 선언됩니다.왜 const char_type *이 아닌 basic_streambuf char_type *의 "gptr"유형입니까?

protected: 
    void setg(char_type *gback, char_type *gptr, char_type *egptr); 

왜 각 gptr 유형이 const char_type* 대신 char_type*로 만들어 졌는지 궁금합니다. 이 gptrs에 const char 포인터를 사용하기 위해 여기 const_cast을 사용하는 것이 안전합니까?

답변

5

streambuf 인터페이스가 버퍼 채우는 방법을 알지 못하기 때문에 const가 아닙니다. 예를 들어 underflowuflow 메서드는 n 바이트를 파일 등에서 가져 와서 streambuf의 남아있는 버퍼를 채울 수 있습니다. 읽기/쓰기 스트림 스트림의 버퍼에도 동일한 저장소를 사용할 수 있습니다. streambuf는 버퍼, 캐시 인 경우 수행합니다. [io]stream의 형식 지정 기능과 실제 기본 문자 스트림 (일반적으로 파일) 사이에 있습니다. 기본 스트림에 대한 창이며 해당 창에 대한 저장소를 다시 사용하는 것이 좋습니다 (이는 아마도 const가 아님을 의미합니다).

const-ness를 버리는 것이 안전합니까? 아마도. 실제 streambuf 구현과 사용 방법에 따라 다릅니다.

+0

물론! :) 저는 현재 상수 C 문자열에 대해 streambuf를 작성 중이기 때문에 혼란 스러웠습니다. 내 목적을 위해 '언더 플로우'와 '유출'은 사용되지 않습니다. 바보 나. 정말 좋은 대답을 쓸 때도 +1합니다. –

관련 문제