stringstreams rdbuf ()와 str ()가 왜 다른 출력을 제공합니까?
-
05-09-2019 - |
문제
이 코드가 있습니다.
int main()
{
std::string st;
std::stringstream ss;
ss<<"hej hej med dig"<<std::endl;
std::getline(ss,st,' ');
std::cout <<"ss.rdbuf()->str() : " << ss.rdbuf()->str();
std::cout <<"ss.rdbuf() : " << ss.rdbuf();
return 0;
}
이 출력을 제공합니다
ss.rdbuf ()-> str () : hej hej med dig
ss.rdbuf () : Hej Med Dig
하지만 왜 그게? 타조가 연산자의 정의 때문입니다
해결책
ss.rdbuf()->str();
모든 버퍼 컨텐츠의 사본을 반환합니다.
무엇을하고 있습니다 std::cout << ss.rdbuf();
?
설명을 참조하십시오
basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);
쓰기/예외가 발생할 때까지 버퍼에서 문자별로 문자를 읽고 타조에 씁니다.
당신은 이미 버프에서 한 단어를 읽었습니다. 이제 REST 부분을 읽습니다.
다른 팁
C ++ 스트림 I/O의 성서에서 인용 할 수 있습니다. Langer와 Kreft, 스트림 버퍼에서 str ()를 호출합니다 (즉, rdbuf ()에 의해 반환 된 것은 매우 반 직관적 인 방식으로 행동합니다 (내 판에서 72 페이지). 전체 이야기를 위해서는 책을 읽어야합니다.
만족스러운 답변을 얻지 못하면 USENET 그룹을 사용해보십시오.
제휴하지 않습니다 StackOverflow