C++ string에서 왜 trim같은 함수를 기본으로 제공하지 않을까요 ?

parkon의 이미지

아시다시피 std::string 클래스는 trim() 과 같은 멤버 함수가 없습니다.
물론
http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
여기에 있는 방법들처럼 이런 저런 방법으로 쉽게 구현할 수 있는 것도 사실이고요.

좀 딴지성 질문같긴 하지만,
trim()처럼 빈번하게 사용되는 기능은 기본으로 멤버 함수로 제공해 주면
저처럼 초심자들이 좀 더 쉽게 이용할 수 있을텐데,
그래서 애초에 클래스 설계할 적에 넣을지 말지 조금이나마 고민했을것도 같은데
왜 안 넣었을지, 혹시 제가 생각못한 다른 이유가 있을지 궁금해서요.
뭐 작은게 아름답다.... 이런 철학이었을까나요 ?

trim 뿐만 아니라 contains(...), to_upper(), to_lower(), 등등
다른 자주 쓰이는 함수들도 마찬가지고요.

익명 사용자의 이미지

trim, to_upper, to_lower 의 경우는 기존의 내용을 지우고 새로운 내용으로 바꿔야 됩니다.
이런 건 구현방법에 따라 성능상에 차이가 있으니 기본이 아니라 알아서 상황에 맞게 만들라는 의미가 아닐까 짐작되네요.
std::string의 경우 기존의 내용을 지우고 새로운 내용으로 바꿔야 하는 함수는 하나도 없으니까요.

contains같은 경우는 find를 해서 찾아지면 contains가 참인거니 그걸로 하면 되겠구요.

zyok0y의 이미지

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:
구현방법에 따라 성능상에 차이가 있으니 기본이 아니라 알아서 상황에 맞게 만들라

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.