• Два одинаковых файла имеют разный размер в байтах?

    myjcom
    @myjcom Куратор тега C++
    BadCats,
    см. binary mode
    гарантируется что при записи двоичных данных в файл и последующем чтении двоичных данных из этого файла данные будут совпадать, равно как и при записи текстовых данных в файл и последующем чтении текстовых данных из этого файла.

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

    Поэкспериментируй

    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <cstring>
    #include <random>
    #include <iterator>
    #include <experimental/filesystem>
    using namespace std;
    namespace fs = experimental::filesystem;
    
    void fill_random(vector<char>& data)
    {
      std::random_device rd;
      std::mt19937 gen(rd());
      std::uniform_int_distribution<> dis(0, 255);
      generate(data.begin(), data.end(), [&]{ return dis(gen); });
    }
    
    int main()
    {
      vector<char> content(318);
    
      fill_random(content); // для чистоты эксперимента
    
      vector<char> content_copy;
    
      if(fs::exists("temp"))
      {
        cout << "delete temp dir\n";
        fs::remove_all("temp");
      }
    
      fs::create_directory("temp");
      cout << "create temp dir\n";
    
      if(auto file = ofstream("temp/file", ios_base::binary); file)
      {
        file.write(content.data(), content.size());
        cout << "write " << content.size() << " bytes\n";
      }
    
      if(fs::exists("temp/file"))
      {
        cout << "create copy..." << "\n";
        fs::copy_file("temp/file", "temp/file_copy");
      }
     
      if(fs::file_size("temp/file") == fs::file_size("temp/file_copy"))
      {
        auto file = ifstream("temp/file_copy", ios_base::binary);
        content_copy.resize(fs::file_size("temp/file_copy"));
        file.read(content_copy.data(), content_copy.size());
      }
    
      auto eq = memcmp(content.data(), content_copy.data(), content.size());
    
      if(eq == 0)
      {
        cout << "temp/file eq temp/file_copy\n"
             << "file size      == " << fs::file_size("temp/file") << "\n"
             << "file_copy size == " << fs::file_size("temp/file_copy") << endl;
      }
    
      if(auto text_file = ofstream("temp/text_file"); text_file)
      {
        copy(content.begin(), content.end(), ostream_iterator<char>(text_file));
      }
      
      if(fs::file_size("temp/file") == fs::file_size("temp/text_file"))
      {
        cout << "temp/file eq temp/text_file\n";
      }
      else
      {
        cout << "Surprise\n"
             << R"(fs::file_size("temp/file") == )" << fs::file_size("temp/file") << "\n"
             << R"(fs::file_size("temp/text_file") == )" << fs::file_size("temp/text_file") << endl;
      }
    
      cin.get();
    }


    P.S.
    Если ещё конкретнее

    Binary and text modes
    A text stream is an ordered sequence of characters composed into lines (zero or more characters plus a terminating '\n'). Whether the last line requires a terminating '\n' is implementation-defined. Characters may have to be added, altered, or deleted on input and output to conform to the conventions for representing text in the OS (in particular, C streams on Windows OS convert \n to \r\n on output, and convert \r\n to \n on input)

    Data read in from a text stream is guaranteed to compare equal to the data that were earlier written out to that stream only if all of the following is true:

    the data consist only of printing characters and the control characters \t and \n (in particular, on Windows OS, the character '\0x1A' terminates input)
    no \n is immediately preceded by a space character (space characters that are written out immediately before a \n may disappear when read)
    the last character is \n
    A binary stream is an ordered sequence of characters that can transparently record internal data. Data read in from a binary stream always equals to the data that were earlier written out to that stream. Implementations are only allowed to append a number of null characters to the end of the stream. A wide binary stream doesn't need to end in the initial shift state.

    POSIX implementations do not distinguish between text and binary streams (there is no special mapping for \n or any other characters)
    Windows не POSIX.

    При чтении/записи данных в файл, текстовый редактор читает/пишет данные в "режиме текста" . Для записи/просмотра двоичных данных, нужен соответствующий просмоторщик/редактор.
    Ответ написан
    Комментировать
  • Два одинаковых файла имеют разный размер в байтах?

    @antonwx
    2 варианта:
    1) BOM
    2. В одном файле в качестве переноса строки используется \r\n, в другом - \n
    Ответ написан
    Комментировать
  • Соотношение многопоточности приложения c++ и многопоточности на уровне системы?

    gbg
    @gbg
    Любые ответы на любые вопросы
    У вас тотальный бардак в голове относительно терминов. Разберитесь с тем, что такое процесс, а что такое поток, что за "второй способ работы с многопоточностью при помощи мьютексов" и так далее. "Многопоточность в одной единице трансляции" - это просто шедевр. Как единицы трансляции связаны с потоками?

    Из вашего потока сознания я понял, что вам нужен QSingleApplication - Штука, которая не дает запустить программу более одного раза.
    Ответ написан
    3 комментария
  • Что почитать про программирование 3D графики?

    @Joysi75
    Если с точки зрения программирования + математики + базовые алгоритмы (Гуро, Брезенхем, Фонг ...) то до сих пор актуальна Шикин Боресков компьютерная графика (pdf варианты в гугле легко ищутся). Если дружите с C++ - то вообще все шоколадно с этой книгой будет.
    А как там подан рейтресинг... Всевозможные источники света, разные модели отражения-преломления, процедурные текстуры, имитация модели камеры с фокусом, метод излучательности.

    Я вспоминаю студенческие годы, когда запивая аля французский длинный багет колой часть кода переводил на ASM + моделировал текстуры + карты сортов деревьев :-) Помню, как меня заставляли насильно выключать комп на ночь (+я умолял чтобы электрика ночью не сбойнула) , в то время когда самописная прога на Watcom C++ считала покадрово вращение шаров из разных материалов над зеркальной плоскостью .

    Да, четверть книги в данный момент неактуальна ( там где программирование ранних моделей видеокарт EGA/VGA/VESA ... + описание нового для тех времен пакета 3D Studio под DOS), Но оставшиеся 3/4 читаются на ура, формулы и описания весьма понятны, а C/C++ код краток, прозрачен и снабжен необходимыми комментариями.
    Ответ написан
    Комментировать
  • Изучение Си после C++?

    @LASHKOAG
    Си, Робототехника, Linux, Телеметрия, Разработчик
    у того же Пратта. Так и называется язык программирования С. А ещё очень крут Подбельский. Советую !У него есть Си (она с синей обложкой) и С++ - и та и другая идет со вторыми книгами - практикумы.
    Ответ написан
    Комментировать
  • Генерация слов путем сложения переменных?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Комбинаторика.
    (одна переменная = цифра)
    Перестановка каждой цифры с первой и до последней позиции, исключая повторные комбинации:
    123456, 213456, ......, 234561
    (213456), (123456), ....., 134562
    312456, 132456, ......, 124563
    .....
    612345, 162345, ....., (123456)
    Ответ написан
    Комментировать
  • Выполнение команды в switch до case?

    @whiteBlackness
    Зачем проверку нести внутрь switch?
    Лучше сначала сделать проверку, а потом уже switch
    Ответ написан
    Комментировать
  • Выполнение команды в switch до case?

    Zoominger
    @Zoominger
    System Integrator
    Сделать её до case, очевидно.
    Ответ написан
    Комментировать
  • Выполнение команды в switch до case?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Вынести этот код за switch.
    Ответ написан
    Комментировать
  • Использование и обращение к std::pair в std::map?

    maaGames
    @maaGames
    Погроммирую программы
    it->first; // string
    it->second; // pair<int,int>
    it->second.first; // первый int
    it->second.second; //второй int
    Ответ написан
    Комментировать
  • Где можно почитать/посмотреть про принципы проектирования и написания ПО для стратегически важных объектов?

    Vamp
    @Vamp
    Такие стандарты существуют. Наиболее известные - MISRA C и MISRA C++. Как можно догадаться, для языков С и С++, соответственно. Изначально созданы для автомобильной промышленности, но распространились и на аэрокосмическую отрасль, медицинскую технику, военных и прочие критичные к надёжности области. В том числе и АЭС.

    Из MISRA C выросли SEI CERT C/C++, AUTOSAR General Software Specification, JPL Institutional Coding Standard for the C (стандарт NASA) и ещё куча других.

    Вся суть этих стандартов в том, чтобы максимально ограничить используемые фичи языка - чтобы код был максимально прост (даже скорее примитивен) и доступен для анализа. Как правило, запрещено использовать бесконечные циклы, рекурсию, макросы, аллокации из кучи - вобщем, любые потенциально опасные операции, в которых чаще всего находятся ошибки. Так же накладываются ограничения на размер функции (в строках кода), цикломатическую сложность, покрытие автотестами и т.п.

    Помимо этого, существует ворох стандартов, описывающих подходы к организации процесса разработки и контроля качества. У каждой отрасли свои стандарты. Например, AS9100.

    Если вы интересуетесь вопросом чтобы применять подобные техники в повседневном программировании, то не стоит - никакого удовольствия и конкурентного преимущества вы от этого не получите. Если конечно ваше повседневное программирование не включает в себя разработку панели управления АЭС.

    Update 2019-12-30:
    На хабре появилась интересная статья с кратким обзором MISRA.
    Ответ написан
    Комментировать
  • Где можно почитать/посмотреть про принципы проектирования и написания ПО для стратегически важных объектов?

    Griboks
    @Griboks
    1) Теория надёжности.
    2) Создание документации, инструкции, руководства пользователя.
    3) Защита от дурака.
    Ответ написан
    Комментировать
  • Где можно почитать/посмотреть про принципы проектирования и написания ПО для стратегически важных объектов?

    myjcom
    @myjcom
    Интересует, существуют ли некие принципы/стандарты и техники написания крайне устойчивого к сбоям ПО. Например, как правильно разрабатывать и тестировать панель управления АЭС?

    ГОСТ Р МЭК 60880-2010
    Атомные электростанции. Системы контроля и управления, важные для безопасности. Программное обеспечение компьютерных систем, выполняющих функции категории А

    ГОСТ Р МЭК 62138-2010
    Атомные электростанции. Системы контроля и управления, важные для безопасности. Программное обеспечение компьютерных систем, выполняющих функции категорий В и С
    Ответ написан
    Комментировать
  • Проблема с деструктором при использовании конструктора копирования?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Тут есть ещё более глобальная проблема, чем просто не выделение памяти в конструкторе копирования: использование char*. Вы же пишете на C++, а не на C с классами. Используйте std::string для sea_name. Вы увидите, насколько проще, короче и безопаснее станет ваш код.
    Ответ написан
    3 комментария
  • Проблема с деструктором при использовании конструктора копирования?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не с деструктором у тебя проблема, а с тем, что ты не выделил память для sea_name в конструкторе копирования, а просто присвоил значение указателя из копируемого объекта.
    Ответ написан
    Комментировать
  • Учебник по математике, при почти нулевых знаниях?

    @Northewind
    engineer
    По школьной (элементарной) математике советую учебник М.И. Сканави "Элементарная математика". Учебник ориентирован на старшие классы и повторяет всю программу по математике, которую должен был знать выпускник советской школы.
    Изложение строгое, систематическое. Пойдёт и "взрослому".
    www.twirpx.com/file/15951
    Ответ написан
    Комментировать
  • Передача ссылки на экземпляр объекта из конструктора?

    @Mercury13
    Программист на «си с крестами» и не только
    Дело у вас вот в чём. Файл Part_Of_Word.h напоминает единицу компиляции (*.cpp), но имеет расширение заголовочного файла (*.h). После того, как вы удалили все его include’ы, эти функции просто перестали компилироваться.

    А до этого, вангую, у вас было два include’а — а значит, две копии одной функции из разных единиц компиляции. Тоже ошибка линкера.

    Решение: переименовать этот файл в cpp.
    Ответ написан
    Комментировать
  • Сумматор и сумматор с распространяющимся переносом?

    SagePtr
    @SagePtr
    Еда - это святое
    full adder это одиночный сумматор, складывающий два бита + флаг переноса (по сути - 3 бита)
    А сумматор с распространяющимся переносом - это многобитный сумматор, состоящий из нескольких "однобитных" полных сумматоров, объединённых в цепочку.
    Ответ написан
    Комментировать
  • Программная архитектура Sony Playstation (1,2,3,4) и Microsoft Xbox(также все поколения)?

    @Xilian
    Программист 1С, сетевые технологии, SQL
    На английском довольно много информации по реверсу.

    reverse engineering playstation - и куча ссылок сразу на информацию.

    >>Также интересуют особенности невозможности эмуляции PS4

    Мощи у современных ПК просто не хватает на эмуляцию :-) Там заказной 8-ядерный AMD процессор стоит.
    Ответ написан
    Комментировать