Здравствуйте. Почему оператор << у 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"