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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    System.out.println((char)3);

    Так не надо делать. Это получение Unicode символа по коду 3.
    Оно сработает но с точки зрения code-review некрасиво и твоя команда
    будет тебя бить и чморить за такой способ кастинга.

    В java есть специальные литералы для работы с кодировками.
    Например для символа с кодом 3 (однобайтного типа ASCII)
    '\x03'
    Или например для кириллической буквы А в кодировке UTF-16
    '\u0430'
    Ответ написан
    3 комментария
  • Почему верхний левый угол всегда чёрный?

    mayton2019
    @mayton2019
    Bigdata Engineer
    А сделай так

    tessellator->Color(1.0f, 1.0f, 1.0f)->Vertex(0, 0);
    tessellator->Color(1.0f, 1.0f, 1.0f)->Vertex(width, 0);
    tessellator->Color(1.0f, 1.0f, 1.0f)->Vertex(width, height);
    tessellator->Color(1.0f, 1.0f, 1.0f)->Vertex(0, height);
    Ответ написан
  • Почему русские буквы не выводятся в C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Кажется проблема имеет отношение только к Windows консоли. Надо проверить. Автор сделай так

    C:\>chcp
    Active code page: 437
    
    C:\>chcp 866
    Active code page: 866


    И запусти свой екзешник именно в ней. И потом еще попробуй вот так

    C:\>chcp  65001
    Active code page: 65001

    и тоже запусти
    Ответ написан
    1 комментарий
  • Как реализовать взаимодействие нескольких библиотек между собой на c++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это преподаватель тебе такие задачи подкидывает?

    Загружай все три библиотеки и построй над ними полиморфизм через языковые возможности С++.
    Ответ написан
    Комментировать
  • (Вопрос без однозначного ответа) Почему в window socket 2 используется так много различных дефайнов и псевдонимов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я тоже до конца не понимаю цели и задачи которые ставились для winsock2 но вот можно
    почитать аннотацию здесь https://learn.microsoft.com/en-us/windows/win32/wi...

    С моей точки зрения было время большого разлада между лагерем Microsoft и Unix. И вместо того
    чтобы просто позаимстовать сетевые библиотеки или купить лицензии, MS как всегда стал делать
    что-то свое, "сумчатое" и ни на что не похожее. Яркий пример Component-Object Model (COM).
    Нигде такого нет.

    Для чего создаватьtypedef struct addrinfo{}? Только ради того, чтобы не писать struct в Си?

    Да все верно. Именно для такого юзкейса typedef и создавался. Плюс еще можно примитивы определять.

    Для чего определять *PADDRINFOA

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

    Где-то спокойно используется int, а где-то используетсяtypedef unsigned __int64 UINT_PTR, опять же вместо того, чтобы просто писать unsigned __int64.

    Это очень старый технический долг языка С++ и его уже нельзя исправить. Дело в том
    что спецификация языка не объясняет какой разрядности должен быть int. Он может быть
    16, 32 бит в зависимости от целевого железа. По сути он - синоним регистра процессора.
    И когда мы делаем цикл от 1 до 10 и нам по сути неважна разрядность параметра цикла - мы просто заказываем
    int чтоб долго не думать. И компиллятор собирает очень быстрый и оптимальный код.
    sizeof(int), или константы в в limits.h могут дать подсказку по вашей текущей архитектуре.

    typedef unsigned __int64 UINT_PTR

    Здесь идет форсирование разрядности в 64 бита. Такие потребности возникают
    в момент когда у нас есть например жестко заданный формат (сетевой протокол
    или дисковый формат файла) и мы должны гарантировать что другие архитектуры
    микрокотноллеры, мобилы и прочее правильно смогут интерпретировать эту структуру.
    Тут еще и порядок байтов внутри слова тоже важен. В наше время даже есть сет
    стандартов на описание таких структур ASN, AVRO, Protobuf, Thrift.
    Ответ написан
    1 комментарий
  • Калькулятор C++ как убрать 1.33333e+06 подобные результаты вычисления?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Предположительно ты работаешь с типами данных float или double.
    Эти типы не имеют однозначного отображения в десятичную
    систему. Такова их природа.
    Ответ написан
    Комментировать
  • Как убедиться что атомарные операции будут выполнены точно правильно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В данном исходнике нет проблемы атомиков. Но здесь есть проблема отсутсвия синхронизации потоков а и b.
    Нужно наладить синхронизацию и дальше атомики станут приносить ощутимую пользу.
    Ответ написан
    Комментировать
  • Как исправить код?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Эта программа считает определители 3 порядка. Теряется красота С++ и обобщение.

    Математически можно считать определители 4 порядка через миноры матрицы понижая размерности до тех
    пор пока мы не дойдем до 3 порядка рекурсивно. И тогда сработает формула с хардкодом

    a[1][1] * a[2][2] * a[3][3] + a[1][2] * a[2][3] * a[3][1] + a[2][1] * a[3][2] * a[1][3] - a[1][1] * a[2][3] * a[3][2] - a[1][3] * a[2][2] * a[3][1] - a[3][3] * a[1][2] * a[2][1];


    Так можно посчитать 5 и 6 порядок и выше.

    Очень жаль что автор не фокусируется на сути, называя "код" просто "кодом". А ведь это метод расчета чего-то конкретного.

    Представтье что музыкант любое произведение называл бы просто "нотами". Странно правда?
    Ответ написан
    Комментировать
  • Защита переменных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Эти магические слова такие как public/protected/private пришли из ООП а не из инфо-безопасности. Хотя наверное есть положительное влияние от их применения. Хотя-бы с точки зрения ролей и отвественностей в объектах класса. И действуют эти слова обычно в фазе компилляции для С++.

    Рантайм - является более опасным даже без реверс-инжинеринга.
    Ответ написан
    Комментировать
  • Как начать программирование в среде Apache NetBeans?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для С++ разработки вам нужен компиллятор. Это может быть clang, gcc или Microsoft C++.

    NetBeans создавался для Java разработчиков. Хотя он возможно и поддерживает С++ синтаксис но
    мне разработка на сях в нетбинсе кажется странной.

    Посмотрите в сторону Visual Studio Code. Ее все хвалят.

    Полного руководства скорее всего нет нигде и не будет. У сред - тысячи фич и описывать их бесполезно.
    Тем более что идет активная эволюция сред и плагины обновляются чуть ли не каждый день.
    Поищите в youtube уроки. Этого должно хватить для начала. А те ошибки которые вы видели - относятся
    больше к наличию компилляторов а не к самой среде.

    Кстати освойте компилляцию в консоли. Это очень важный навык для любого разработчика. И после этого
    ваши страхи перед средой станут чуть меньше.
    Ответ написан
    2 комментария
  • Сделать трассировку кода по примеру на картинке с++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужен еще один аргумент. Типа глубина рекурсии чтоб делать отступы. Ну и внутри функции печатать на экран. Чем больше level тем больше отступ от левого края.

    int translateNumberSystem(int num, int p, int level)
    {
        if (num == 0)
        {
            return 0;
        }
        return (num % p + 10 * translateNumberSystem(num / p, p, level + 1));
    }
    Ответ написан
  • В чем может быть проблема если выдает такую ошибку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно проверить все обращения к векторам

    vector<vector<int>> matrix;
    vector<int>res;


    по индексу. Используется больше элементов чем выделено.

    Автор и не жди решения на блюдечке. Давай начинай все проверять. Тестирование - это тоже активность разработчика и никто ее за тебя не сделает.

    P.S. Странно что за 30 лет С++ std так и не обзавелся типом "матрица". Бедняги разработчики до сих пор используют вложенные вектора. Или зубчатые вектора.
    Ответ написан
    Комментировать
  • Как сделать динамическую подгрузку кода?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот этот дефайн коде. Это что тут бывает?

    defineCode(stringLine);

    Если это можно свести к конечному (небольшому) числу вариантов - то можно собрать ну 5-10 библиотеки (*.dll) и подгружать ту логику которая нужна в зависимости от conditions.

    И вообще динамический код считается угрозой №1 с точки зрения антивирусов.
    Ответ написан
    Комментировать
  • Как работать с большими числами в C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В науке и технике такие форматы как double / long double / extended применяются уже давно и их
    возможности полностью закрывают все мыслимые вопросы.

    Например мы можем посчитать соотношение самой большой длины (диаметр вселенной) на
    самую мелкую длину (переменная Планка) и это будет вполне себе число которое ляжет в эти
    форматы.

    Преподаватель вас заставил считать факториал 250? Это наверное троллинг. Зачем.
    Для приближенного подсчета факториала есть например формула Стирлинга. Ее достаточно
    чтоб получить порядок числа и первые значимые разряды.

    А bigint и арифметикой можно и никогда не закончить вычисления. Это - как в криптографии.
    Длину ключа увеличили всего в 2 раза. А всех дата-центров планеты Земля уже не хватает
    чтобы в цикле прокрутить просто все значения этого длинного целого.
    Ответ написан
    Комментировать
  • С++ На всех ли платформах одинаковая точность операций с float?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ну ... тут нет теоретически верного ответа. Инфо-технологии - это как физика-естествознание.
    Тут надо просто взять два компиллятора и две платформы. Собрать код типа.

    float x = 3.14;

    и посмотреть sizeof(...)

    Можно еще глянуть как выглядит число 3.14 в бинарном представлении. Сделаешь это кастингом.
    И сделать выводы о стандартах хранения флоатов в данном компилляторе.

    Теоретически должен быть 32х битный везде.

    Но проверь!

    Бывают еще double (64bit) extended (80bit),
    half float (16bit не встречал в практике никогда но литература ссылается).
    Ответ написан
    2 комментария
  • Может ли junior смотреть гайды в интернете при выполнении тестового задания?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для решения домашки можно пользоваться чем угодно. Другое дело что домашку может потребоваться защитить или объяснить как оно работает. Или сразу внести какие-то изменения.

    Некоторые собесы проходят онлайн. Тоесть тебе надо писать код в вебе и собеседующие видят скорость твоей работы. Гуглить при этом достаточно сложно. Да и это видно со стороны.

    Кстати онлайн собесы - самое лучшее что есть. Всё остальное - зря потраченное время. Домашку кроме авто-тестов никто не смотрит. И это обидно.
    Ответ написан
    Комментировать
  • Работа с рисованием в Qt. Почему не получается рисовать после оператора if?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут может быть две разные проблемы. Может чек-боксики не работают. Попробуй так. Будет рисоваться?
    painter.setPen(....);
    painter.drawRect(10,10,200,200);
    painter.drawLine(0,0,200,200);

    Или стиль рисования линии такой невидимый что ее не видно.
    Ответ написан
  • Можно ли сегодня использовать Rust вместо C++, в разработке серьёзных низкоуровневых программ?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Какое состояние у языка Rust на текущий момент?


    Я несколько лет наблюдаю за долей Rust исходников в браузере Mozilla.
    По состоянию на 2022 год там была такая пропорция С/C++/Rust 0.19 : 0.39 : 0.42
    (При этом я игнорировал прочие типы файлов). И эта доля Rust кода практически
    не меняется несколько лет. Тоесть видимо те цели которые ставили Mozilla/Microsoft
    были достигнуты. Они переписали что хотели и успокоились.

    Любитель пингвинов и нелюбитель NVidia тоже обещал затащить Rust в исходники
    linux-ядра, но я не собирал сведенья по линуксу и не знаю что там сейчас. Кто
    знает? Поделитесь.

    Можно ли уже полностью отказаться от C++ в пользу Rust, в низкоуровневых вещах

    Скорее всего нет. Потому что есть потребность в безшовной интеграции с вызовами kernell и библиотек.
    В Rust скорее всего потребуется сильная адаптация кода чтобы он был пригодным для ABI например.

    Понятно, что нет полноценной IDE

    Забавное наблюдение. Я слушаю блоги хаскелистов. Душкина. Брагилевского. Вершилова.
    И практически все они хором поют одну и ту-же вещь.. дескыть им IDE не нужна а им
    достаточно vim или блокнот. Я с ними не до конца согласен. Но что-то есть в этом. Получается
    что математически совершенному языку незачем иметь обязательноую IDE. И вообще
    с каких пор мы язык должны рассматривать в комплекте с IDE? Неужели язык без
    этого инструмента неполноценен? Можем ли мы рассматривать "зрелость" языка просто
    как языка?
    Ответ написан
    83 комментария
  • Можно ли в c++ реализовать new() с c#?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Насколько я помню new - это зарезервированное ключевое слово языка. Поэтому использовать
    его в роли функции вряд-ли получится.

    Да и зачем это автору? Создание новых конструкций синтаксиса - это путь в Lisp, Nemerle, Forth.
    Языку С++ это не надо. А если автору так сильно хочется - то наверное настало время сменить язык.
    Ответ написан