Задать вопрос
Ответы пользователя по тегу C++
  • Как написать компаратор для std::find?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Если вас устроит тот факт, при точном совпадении строк произойдет сортировка по числам - ва ничего писать не надо, у std::pair есть стандартный компаратор, который работает лексикографически.
    Ответ написан
    Комментировать
  • Как отправить изображение использую HTTP?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    >шифрование в base64
    Не шифрование, а кодирование. Бессмысленное причем, так как сначала картинку сжали (джпегом, вестимо), а потом раздули (в 4 раза).

    Сменить технологию решения или разработчика. Самое простое - на POST запрос
    Ответ написан
    Комментировать
  • Как скрестить локальное .exe-приложение с интерфейсом управления в веб-браузере?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Развернутый ответ на данный вопрос, без предоставления вами подробностей решаемой задачи, займет толстую книжку - только основных вариантов десяток, и в каждом еще десятки уточнений и подвариантов.

    Например, если приложение должно преобразовывать какие-то данные (юзер загружает фотку, программа заменяет все лица на Бена Франклина, фотка выгружается), то первый выбор - это очередь типа RabbitMQ (бекенд сайта кладет картинку в очередь, бинарь на Си обрабатывает очередь)
    Ответ написан
  • Выбор игрового движка для C++?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Ответ написан
    Комментировать
  • Как процессы используют мьютекс?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Для этого надо научиться делать две вещи:
    1) Делать осмысленные заголовки своим вопросом, чтобы не было как здесь - заголовок нерелевантен телу вопроса.
    2) Помещать созданные мьютексы в память, расшаренную между процессами - тогда процессы смогут по ним синхронизироваться.
    Ответ написан
    Комментировать
  • Почему создание пустого потока крашит процесс?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Ну потому что как-бы вы говорите компьютеру пойди туда, не знаю куда, делай то, не знаю что.

    Он офигивает и падает.
    Ответ написан
    3 комментария
  • Как писать нормально: for (int i = 0; ...) or for (int i = NULL; ...)?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    NULL - служебный дефайн, который есть, в частности, в венде.

    Общей практикой является int i = 0; Хотя бы потому, что так короче.

    Проблема в другом. В int.
    В большинстве языков, int - это 32 бита со знаком, то есть, два гигабайта. В современных же системах памяти - десятки-сотни-тысячи гигабайт, а программы обрабатывают разного рода бигдату и ML. Так что индексация массива интами может легко выйти трудноуловимыми багами.

    Поэтому правильно писать for(size_t i = 0; ..
    Ответ написан
    1 комментарий
  • Как найти работу на С++ после вуза?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Открываете сайт hh.ru и идете по собесам. Так вы узнаете и о вакансиях, и о своей возможности получить оффер.
    Ответ написан
    Комментировать
  • Почему WinAPI выполняет синхронную запись?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    В мануале прямо написано, что асинхронная операция может выполниться и синхронно - тут уж как венда решит.

    Кстати, чем вам Boost::asio не угодил?
    Ответ написан
    4 комментария
  • Насколько мой код читабелен?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Это все конечно очень хорошо, но в репе лежат симлинки вместо файлов. Так что пока оценка -10/10 - достигнут предельный радиус кривизны рук.
    Ответ написан
    3 комментария
  • Усиленно удалить файл в windows, возможно ли с помощью пары функций?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    И да и нет. В линуксе удаление открытого файла возможно в виду архитектуры API драйвера файловой системы.

    В форточке же, это возможно сделать, только прибив процесс, который держит файл. Ну а это делается действительно вызовом некоторого количества функций WinApi.
    Ответ написан
    3 комментария
  • Как положить в unsigned char NULL тип и после успешно отловить успешное сравнение с другим unsigned char или char?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Специально для этого в C++ начиная с 17 версии стандарта завезли std::optional

    Эта штука позволяет хранить внутри себя значение или помнить, что значение в данный момент не задано.
    Пример:
    #include <optional>
    using ochar = std::optional<char>;
    
    ochar a = 'a';
    ochar b;
    
    if(a) { std::cout << " a exists and contains " << *a << std::endl;}
    if(!b) {std::cout << " b does not exist" << std::endl;}

    Пример из мануала:
    #include <string>
    #include <functional>
    #include <iostream>
    #include <optional>
     
    // optional can be used as the return type of a factory that may fail
    std::optional<std::string> create(bool b) {
        if (b)
            return "Godzilla";
        return {};
    }
     
    // std::nullopt can be used to create any (empty) std::optional
    auto create2(bool b) {
        return b ? std::optional<std::string>{"Godzilla"} : std::nullopt;
    }
     
    // std::reference_wrapper may be used to return a reference
    auto create_ref(bool b) {
        static std::string value = "Godzilla";
        return b ? std::optional<std::reference_wrapper<std::string>>{value}
                 : std::nullopt;
    }
     
    int main()
    {
        std::cout << "create(false) returned "
                  << create(false).value_or("empty") << '\n';
     
        // optional-returning factory functions are usable as conditions of while and if
        if (auto str = create2(true)) {
            std::cout << "create2(true) returned " << *str << '\n';
        }
     
        if (auto str = create_ref(true)) {
            // using get() to access the reference_wrapper's value
            std::cout << "create_ref(true) returned " << str->get() << '\n';
            str->get() = "Mothra";
            std::cout << "modifying it changed it to " << str->get() << '\n';
        }
    }


    Важное отличие от использования, например, указателя - optional не делает динамических выделений памяти, значение хранится (или не хранится) прямо у нее внутри.
    Ответ написан
    2 комментария
  • Почему не вызывается конструктор класса?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Вы как-то неправильно понимаете C++.
    У вас написано:

    Queue()
    {
    head = NULL;
    tail = NULL;
    len = 0;
    head->info.set_number(0);
    }


    head = НИКУДА
    НИКУДА -> info.set_number(0);

    Естественно, что обращение в НИКУДА ведет неопределенному поведению программы, которое выражается в падении.
    Ответ написан
    Комментировать
  • Как зашифровать алгоритм внутри программы?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Вынести программу на смарт-карту или USB-токен. Эти устройства физически защищены, в том числе от послойного травления разного рода кислотами - выудить их прошивку чрезвычайно дорого.
    Ответ написан
    Комментировать
  • Компилятор выдаёт ошибку c++, что надо исправить?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    0. Код нужно вставлять текстом в специальном теге, а не картинкой.
    1. Вы неправильно использовали оператор запятая, он так не работает
    cin >> a, b, c;
    не будет считывать значения a, b и c, как бы вам хотелось.
    Правильно писать так:
    cin >> a >> b >> c;
    Ответ написан
    Комментировать
  • Что значит С++17 в вакансиях? Зачем это пишут?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Если вы используете стандарт меньше чем C++17, а код написан на C++17, начинается потеря единообразия в коде, что влечет за собой в далекой перспективе убытки, потому что код становится дороже поддерживать.

    Например, в фирме положено писать код так, что функция возвращает std::optional<>. Если произошла ошибка, нужно вернуть пустое значение, если все хорошо - заполненное.

    Вы же начнете например возвращать bool, а результат выдавать через указатель (переданный в качестве параметра). Потом кто-то решит, что результат ему не нужен и пихнет туда nullptr, а вы это дело у себя не учли (соглашения-то писать вот так в компании нет) - и вот уже баг на ровном месте, недовольные клиенты, ночной рефакторинг и прочие прелести.
    Ответ написан
    Комментировать
  • Как вывести битовое представление числа?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Вам смешивает карты оператор >>, примененный к cin. Он считает, что если вы вводите один байт, его надо интерпретировать как один единственный символ из входного потока.

    Проще всего программу переделать как-то так

    #include <bitset>
    #include <iostream>
    #include <climits>
    
    using namespace std;
    
    int main() {
        int16_t temp;
    
        cout << "Введите произвольное число от -128 до 127: ";
        cin >> temp;
        
        char value=temp;
    
        cout << "Битовое представление числа " << value << " = " << bitset<sizeof(value) * CHAR_BIT>(value) << endl;
    }


    IDEONE
    Ответ написан
  • Что использовать для кроссплатформенного GUI на C++?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    wx - это страх, ужас, старье, трэш и угар. Он пытается любую систему превратить в венду (точнее, в пародию на MFC). Где вы только его выкопали? Закопайте обратно и не трогайте.

    Qt на лицензии LGPL неплох.

    1) Работает. И на макоси работает, и на андроиде работает, и на вебе работает, причем двумя способами.
    2) Нетушки, учите английский. Если упираться и требовать доку на русском, 99.99% современного айти пройдет мимо вас. Ладно, в случае с Qt есть книжки Шлее
    3) Он там есть
    Ответ написан
    6 комментариев
  • В чем отличие оператора -> от .(точки)?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    a->b это более короткая запись для (*a).b

    То есть, стрелка сочетает в себе разименовывание указателя и обращение к методу.

    Ну и если a - это класс, то оператор стрелка может быть в нем определен по желанию автора класса.
    Ответ написан
    Комментировать
  • Как располагаются в памяти элементы массива обьектов класса?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Объекты в C++ имеют постоянный размер, известный на этапе компиляции и равный sizeof(экземпляр)

    Утверждение:
    объект класса может содержать и вектор ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

    неверно, так как вектор хранит свои данные не в своем экземпляре, а туда, куда их засунет аллокатор (обычно засовывает на кучу).

    Утверждение:
    [объект класса] и шаблонным может быть ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

    неверно, так как все шаблоны конкретизируются на этапе компиляции.

    Следовательно, объекты класса сидят в массиве друг за дружкой, имеют фиксированный размер, и по ним можно ползать указателем, сдвигая его на этот размер.
    Ответ написан
    Комментировать