stringstream
От: Init64  
Дата: 13.11.05 12:17
Оценка:
Здравствуйте. При работе с std::stringstream cтолкнулся с непонятным эффектом:

// ..........................
stringstream& write1()
{
    ss << "test1";
    return ss;
}

string write2()
{    
//toogle breakpoint here
    return "end";
}

string write3()
{
//toogle breakpoint here
    return "middle";
}

stringstream        ss;

int main()
{
    write1() << "test2" << write3() << write2();
}

При watch'е из write3() и write2() в потоке видны только данные, записанные через write1(). По идее, на момент вызова write3() в потоке уже должен быть фрагмент "test1test2", но дефакто - этого не происходит. Такое впечатление, что после write1() << складывает данные в какой-то временный буфер, и только после write2() выкидывает их в поток. ss.flush() в write2,3() не дает никакого эффекта.
Re: stringstream
От: Init64  
Дата: 13.11.05 12:31
Оценка:
Вообще конечно write2() не сработает так как write3() не возвращает ссылку на поток. Но write1() << "test" << write2() тоже не работает.
Re: stringstream
От: Init64  
Дата: 13.11.05 12:39
Оценка:
Скорее всего все же вначале выполняются write1(), write2() а потом уже результат их работы подставляется к <<, что вполне логично.
Re: stringstream
От: AndrewJD США  
Дата: 13.11.05 12:39
Оценка: +1
Здравствуйте, Init64, Вы писали:

I>При watch'е из write3() и write2() в потоке видны только данные, записанные через write1(). По идее, на момент вызова write3() в потоке уже должен быть фрагмент "test1test2", но дефакто — этого не происходит. Такое впечатление, что после write1() << складывает данные в какой-то временный буфер, и только после write2() выкидывает их в поток. ss.flush() в write2,3() не дает никакого эффекта.


Параметры функции << вычисляются в произвольном порядке.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.