Нет, если вы используете std::ostringstream
. Базовый буфер для этого не может быть прочитан (отсюда o
в ostringstream
), поэтому вам нужно полагаться на реализацию, чтобы сделать это за вас, через str()
.
Однако, если вы используете std::stringstream
(обратите внимание на отсутствие o
), то основной буфер для чтения, и basic_ostream
«s имеют специальную перегрузку ForReading из буферов:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss1;
ss1 << "some " << 111605 << " stuff" << std::flush;
std::cout << ss1.rdbuf() << std::endl;
std::cout << ss1.str() << std::endl;
}
Выход:
некоторые 111605 вещи
некоторые 111605 вещи
(Example derived from here.)
Это копирует непосредственно из базового буфера без промежуточной копии.
Спасибо! Ваше решение работает. Я также нашел этот пост http://stackoverflow.com/questions/10009809/query-stdostringstream-content/10010160#10010160, где ostream используется для достижения того же. Мне просто интересно, какая разница между использованием ostream и stringstream. какой из них более эффективен? –
@WinstonHuang: Вам нужно профайл, чтобы узнать, что более результативно. Я сомневаюсь, что это все быстрее, но это, безусловно, сложнее, чем просто использование 'std :: stringstream'. – GManNickG