답변:
개인적으로, 동일한 문자열 스트림에 스트리밍을 수행하려는 경우는 매우 드 find니다.
일반적으로 문자열에서 스트림을 초기화 한 다음 구문 분석하고 싶습니다. 또는 문자열 스트림으로 사물을 스트리밍 한 다음 결과를 추출하여 저장합니다.
동일한 스트림으로 스트리밍하는 경우 스트림 상태 및 스트림 위치에 매우주의해야합니다.
'그냥'을 사용 istringstream
하거나 ostringstream
의도를 더 잘 표현하면 실수로 <<
vs를 사용하는 등의 어리석은 실수를 검사 할 수 있습니다 >>
.
약간의 성능 향상 이 있을 수 있지만 먼저 보지 않을 것입니다.
당신이 쓴 것에 아무런 문제가 없습니다. 성능이 충분하지 않다면 다른 접근법을 프로파일 링하거나 그렇지 않은 경우 가장 명확한 것을 고수 할 수 있습니다. 개인적으로, 나는 단지 갈 것입니다 :
std::string stHehe( "Hello stackoverflow.com!" );
A stringstream
는 다소 크고 성능이 약간 떨어질 수 있습니다. 다중 상속은 vtable 포인터를 조정해야 할 수 있습니다. 가장 큰 차이점은 (적어도 이론적으로는) 의도를 더 잘 표현하고 의도 한 >>
위치 <<
(또는 그 반대) 를 실수로 사용하지 못하게하는 것입니다 . OTOH, 그 차이는 특히 시연 코드의 빠른 비트에 대해 충분히 작기 때문에 게으르고 사용 stringstream
합니다. 꽤 실수로 마지막으로 사용한 시간이 기억이 안나요 <<
내가 의도 한 때를 >>
(당신이 경우 특히 이후 그래서 나에게 안전의 비트가 주로 이론적 인 것, 어떻게 그런 실수를, 그것은 거의 항상있을거야 정말 거의 즉시 명백한).
원하는 것을 달성하는 한 문자열을 사용하는 것이 전혀 잘못이 아닙니다. 문자열을 합치면 쉽고 편리합니다. 그래도 다른 종류의 데이터를 포맷하려면 a stringstream
가 지원하고 문자열은 대부분 지원하지 않습니다.
대부분의 경우 동일한 문자열 스트림에서 입력과 출력이 모두 필요하지 않으므로 사용 std::ostringstream
하고 std::istringstream
명시 적으로 의도를 명확하게합니다. 또한 실수로 잘못된 연산자 ( <<
vs >>
)를 입력하지 못하게합니다 .
동일한 스트림에서 두 작업을 모두 수행해야 할 경우 분명히 범용 버전을 사용합니다.
성능 문제는 여기서 가장 걱정거리가 될 것입니다. 명확성이 주요 이점입니다.
마지막으로 순수한 문자열을 구성해야하므로 문자열 추가를 사용하는 데 아무런 문제가 없습니다. 펄과 같은 언어로 가능한 숫자를 결합하는 데 사용할 수는 없습니다.
삽입 또는 추출 만 작업에 적합한 경우 'i'또는 'o'접두사 버전 중 하나를 사용하여 원하지 않는 작업을 제외 할 수 있습니다.
중요하지 않은 경우 i / o 버전을 사용할 수 있습니다.
표시하는 문자열 연결은 완벽하게 유효합니다. 문자열 스트림을 사용하여 연결할 수 있지만 문자열 스트림의 가장 유용한 기능은 아니지만 POD 및 추상 데이터 유형을 삽입하고 추출 할 수 있습니다.
std :: ostringstream :: str ()은 스트림 내용의 사본을 작성하여 일부 상황에서 메모리 사용량을 두 배로 늘립니다. 이것을 피하기 위해 std :: stringstream 및 rdbuf () 함수를 대신 사용할 수 있습니다.
자세한 내용은 여기 : ostringstream을 cout에 직접 쓰는 방법