Отлично сработано! (игнорировать заливку)

вая следующий код:

std::ofstream stream("somefile");

if (!stream)
{
   return 1;
}

При вызове.записывать(....) и используяSTDC ++ а такжеLibc ++ поток находится в двоичном режиме (std::ios::binary).

Однако при использованииMSVC (2015 / 2017RC1) кажется, что это в текстовом режиме или что-то странное, потому что результирующий файл больше, чем то, что написано на самом деле.

Но если я явно установлю режимstd::ios::binary MSVC ведет себя аналогичноstd::ofstream реализации других стандартных библиотек, упомянутых ранее.

Пример кода:

#include <vector>
#include <cstdio>
#include <fstream>

std::size_t fsz(const char* filename) {
    std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
    return static_cast<std::size_t>(in.tellg());
}

int main() {
   std::ofstream stream("filename");

   if (!stream)
      return 1;

   std::vector<unsigned long long int> v = {0x6F1DA2C6AC0E0EA6, 0x42928C47B18C31A2, 0x95E20A7699DC156A, 0x19F9C94F27FFDBD0};

   stream.write(reinterpret_cast<const char*>(v.data()),v.size() * sizeof(unsigned long long int));

   stream.close();

   printf("expect: %d\n", v.size() * sizeof(unsigned long long int));
   printf("file size: %d\n", fsz("filename"));

   return 0;
}

Вывод приведенного выше кода при запуске с msvc:

expect: 32 
file size: 33

Вывод приведенного выше кода при запуске с libc ++, stdc ++:

expect: 32 
file size: 32

Разница может стать намного больше, это зависит от того, сколько данных записано и содержание данных.

в конце мой вопрос все тот же, это неопределенное или неопределенное поведение?

изменение вышеуказанного вектора на следующий делает пример более очевидным в отношении того, что происходит.

std::vector<unsigned long long int> v = {0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A};

Ответы на вопрос(2)

Ваш ответ на вопрос