나는 내 응용 프로그램에서 문자열과 오류 메시지를 구성하는 데 광범위하게 std::stringstream
을 사용합니다. stringstreams
은 대개 수명이 매우 짧은 자동 변수입니다.std :: stringstream을 사전 할당해야합니까?
이러한 사용으로 인해 모든 변수에 대해 힙 재 할당이 발생합니까? 임시에서 클래스 멤버 stringstream
변수로 전환해야합니까?
후자의 경우 어떻게 버퍼 stringstream
을 예약 할 수 있습니까? (충분히 큰 문자열로 초기화해야합니까? 아니면 좀 더 우아한 방법이 있습니까?)
좋은 조언; 그러나 50을 예약 한 다음 해당 문자열을 복사하면 작은 힙이 아닌 버퍼 최적화 (구현에 버퍼 최적화가있는 경우)가 무시 될 수 있습니다. 자신 만의 streambuf를 작성하고 싶다면 모든 버퍼 관리를 정확하게 제어 할 수 있습니다. 그런 다음 ostream (또는 istream 또는 iostream을 사용 하겠지만 질문은 출력 형식이 여기에 관련되어 있음을 나타냅니다.)은 rdbuf를 통해 stringstream의 버퍼를 변경하는 대신 streambuf를 사용하십시오. –
stringstream은 str의 내용 길이 (0) 이상을 예약하지 않는다고 생각합니다. cplusplus.com에 따르면 : "str의 복사본을 가진 ostringstream 객체를 내용으로 생성합니다." 참조는 "문자열 내용의 사본"입니다. 명시 적으로 동일한 양의 메모리를 예약한다고 명시하지는 않습니다. 이 생성자를 사용하여 메모리를 예약하는 것에 대해 언급하는 소스를 찾을 수 없습니다. – NickSoft
위에 사용 된 생성자는 더 이상 유효하지 않습니다. no-copy 생성자가 제거 된 것을 볼 수 있습니다. http://www.cplusplus.com/reference/sstream/stringstream/stringstream/ – user1122069