Russian Qt Forum
Ноябрь 23, 2024, 16:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDataStream operator << записывает не сразу  (Прочитано 3040 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« : Июль 30, 2011, 19:07 »

Здравствуйте. Почему оператор << у QDataStream записывает данные в свой device() не сразу же (как например cout, см. ниже), а лишь в конце команды?
Вот пример:
Код
C++ (Qt)
QByteArray saveFileContents;
QDataStream outputDataStream(&saveFileContents, QIODevice::ReadWrite);
...
quint32 fileSize = saveFileContents.size();
outputDataStream << fileSize << checksum(saveFileContents);
Раньше у меня стоял вывод этих двух значений на разных строчках, а сегодня решил сэкономить на одной и втулил оба вывода в одну. Убил часа 2 на то, чтобы понять, что так делать нельзя, поскольку вызов checksum() происходит прежде, чем QDataStream записывает fileSize, и соответственно в момент вызова checksum() новое значение ещё не успевает появиться в saveFileContents.

Попробовал сделать нечто аналогичное с cout, так тут всё происходит так, как и ожидается (хотя может и не совсем удачный пример):
Код
C++ (Qt)
int a[] = {2, 3};
std::cout << a[0]++ << " " << (a[0] + a[1]); // вывод "2 6"
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Июль 30, 2011, 21:20 »

Пример с сиаутом некорректен
Записан
SimpleSunny
Гость
« Ответ #2 : Июль 30, 2011, 22:01 »

Пример с cout UB и то что вы хотите тоже, порядок вычисления аргументов у функции не определен.

Подробнее можете почитать тут
http://alenacpp.blogspot.com/2005/11/sequence-points.html
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Июль 30, 2011, 22:22 »

спасибо, теперь понял
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.301 секунд. Запросов: 23.