C++ string에서 왜 trim같은 함수를 기본으로 제공하지 않을까요 ?
글쓴이: parkon / 작성시간: 목, 2012/05/03 - 11:27오전
아시다시피 std::string 클래스는 trim() 과 같은 멤버 함수가 없습니다.
물론
http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
여기에 있는 방법들처럼 이런 저런 방법으로 쉽게 구현할 수 있는 것도 사실이고요.
좀 딴지성 질문같긴 하지만,
trim()처럼 빈번하게 사용되는 기능은 기본으로 멤버 함수로 제공해 주면
저처럼 초심자들이 좀 더 쉽게 이용할 수 있을텐데,
그래서 애초에 클래스 설계할 적에 넣을지 말지 조금이나마 고민했을것도 같은데
왜 안 넣었을지, 혹시 제가 생각못한 다른 이유가 있을지 궁금해서요.
뭐 작은게 아름답다.... 이런 철학이었을까나요 ?
trim 뿐만 아니라 contains(...), to_upper(), to_lower(), 등등
다른 자주 쓰이는 함수들도 마찬가지고요.
Forums:
trim, to_upper, to_lower 의
trim, to_upper, to_lower 의 경우는 기존의 내용을 지우고 새로운 내용으로 바꿔야 됩니다.
이런 건 구현방법에 따라 성능상에 차이가 있으니 기본이 아니라 알아서 상황에 맞게 만들라는 의미가 아닐까 짐작되네요.
std::string의 경우 기존의 내용을 지우고 새로운 내용으로 바꿔야 하는 함수는 하나도 없으니까요.
contains같은 경우는 find를 해서 찾아지면 contains가 참인거니 그걸로 하면 되겠구요.
C++ can express elegantly, flexibly, and at zero costs
C++ can express elegantly, flexibly, and at zero costs.
C++11의 FAQ(http://isocpp.org/wiki/faq/cpp11)에서 나오는 말입니다.
c++에서 위와 같은 잡다한 부가기능이 존재하지 않는 이유는 비용 절감을 위해서입니다.
?
기존의 내용을 지우고 새로운 내용으로 바꿔야 되서 지원 안한다는 것은 전혀 말이 안됩니다.
가령 substr 역시 기능 자체는 만약 자신의 객체에 행한다면 새로운 내용으로 바꿔야 하나
C++ 에선 string 내의 메소드들은 모두 결과를 다시 새로운 객체를 생성해서 리턴하는 방식으로
하고 있기 때문에 trim 역시 trim 을 수행한 결과 객체를 새로 생성해서 리턴하도록 하면 똑같습니다.
(다른 메소드들과 다를 게 전혀 없습니다.)
윗 분이 말씀하신 것이 (직접적으로 trim 에 대해 언급한 내용은 아니지만) 더 말이 됩니다.
Quote:구현방법에 따라 성능상에 차이가 있으니
댓글 달기