[c++] std :: ifstream 클래스의 디자인


Answers

IOStream은 STL의 일부가 표준 라이브러리에 통합되기 전에 설계 되었기 때문에. 그 후 문자열 클래스가 만들어졌습니다. 표준화 과정에서 꽤 늦었고 IOStream을 수정하는 것이 저장으로 간주되지 않았습니다.

BTW는 C ++ 0X의 사소하지만 편리한 변경의 일환으로 이런 종류의 정리 작업이있었습니다.

Question

STL의 아름다움을 본 우리는 원시 포인터배열 을 사용하여 어디에서나 사용하도록 권장 합니다 . Scott MeyersEffective STL 이라는 제목으로 STL에 대한 전체 서적을 저술했습니다. 그러나 ifstream 개발자는 std::string 보다 char* 를 선호했다. ifstream::open() 의 첫 번째 매개 변수가 const std::string & 대신 const char* 유형인지 궁금 const std::string & . 그것의 서명을보십시오 :

void open(const char * filename, ios_base::openmode mode = ios_base::in );

왜? 왜 안돼 :

void open(const string & filename, ios_base::openmode mode = ios_base::in );

디자인과 관련하여 심각한 실수입니까? 아니면이 디자인은 고의적입니까? 그 이유는 무엇일까요? std::string 보다 char* 를 선호하는 이유가 없습니다. std::string 을 취하는 후자의 함수에 char* 를 전달할 수 있습니다. 그건 문제가되지 않습니다!

그건 그렇고, ifstream 은 typedef라는 것을 알고 있습니다. 그래서 내 제목에 대한 코멘트가 없습니다. 짧아서 내가 그것을 사용하는 이유입니다.

실제 클래스 템플릿은 다음과 같습니다.

template<class _Elem,class _Traits> class basic_ifstream;



Related