• В C++ есть TCP и UDP?

    @res2001
    Developer, ex-admin
    Базовый функционал сети предоставляет операционная система, там то же есть разделение на TCP и UDP (точнее на SOCK_STREAM и SOCK_DGRAM). Любое приложение, не зависимо от языка программирования, использует функционал, предоставляемый ОС, если каким-то образом не реализует его самостоятельно.
    В стандартной библиотеке С++ нет никаких оберток над базовыми функциями ОС. Но из коробки вы легко можете использовать базовые функции ОС, ничего отдельно ставить не нужно, все доступно в рамках системных библиотек и заголовочных файлов.
    Но для удобства можно использовать какую-нибудь библиотеку, обертку.
    Ответ написан
    Комментировать
  • В C++ есть TCP и UDP?

    @dima20155
    you don't choose c++. It chooses you
    В базовом комплекте библиотек ничего из этого нет и нужно писать все самостоятельно через сокеты или использовать готовую либу, таков уж C++
    Ответ написан
    2 комментария
  • Есть ли способ быстро выравнивать адреса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    можно посчитать остаток от деления адреса на выравнивания, и затем прибавить его к адресу, но можно ли сделать это как-то быстрее? Например с помощью битовых операций.

    Можно, если выравнивание по степени двойки. addr = (addr + alignment - 1) & -alignment
    Ответ написан
  • Как исправить ошибки в компиляторе?

    @dima20155
    you don't choose c++. It chooses you
    Во-первых, ошИбки
    Во-вторых, ошибка в подключении библиотеки.
    Добавление только заголовочных файлов в свой проект недостаточно для подключения библиотеки. Необходимо также настроить линковщик, который вам и пишет, что не может найти определенное функции.
    Почитайте как настраивать линковщик, чтобы исправить подобную ошибку
    https://stackoverflow.com/questions/49825986/once-...
    https://stackoverflow.com/questions/17541283/error...
    Ответ написан
    2 комментария
  • Есть ли ошибка в коде Ардуино (Ошыбка говорит: чтото не работает)?

    @kalapanga
    avrdude: stk500_recv(): programmer is not responding

    Вот это и гуглите. По этой ошибке есть типовой "чеклист" - список того, что нужно проверить в первую очередь.
    Ответ написан
    Комментировать
  • Что быстрее индексы или указатели?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Зависит от модели процессора, версии и опций компилятора и немножечко фазы луны. В целом без разницы.

    Практический совет - лучше писать через индексы, ибо так понятнее и больше шансов что компилятор там все наоптимизирует (например, он сможет векторизовать работу через какие-нибудь SSE инструкции процессора).

    Совет по бенчмарку - если памяти не хватает, стоит по одному достаточно большому массиву пройтись 10000 раз. А лучше использовать готовые фреймворки для измерения скорости, вроде того де gbenchmark.

    Еще, иногда полезно посмотреть на ассемблерный выхлоп. Вот, например, что происходит при -O3 опции компилятора. Он генерирует вообще идентичный код для обеих функций (развернув циклы)! И даже при -O2 оно одинаковый код выдает.

    Без оптимизаций код разный, но там все не так как вы думаете. Вместо инструкции mov eax, dword ptr [rax + 4*rcx] в варианте с индексами используется инструкция mov eax, dword ptr [rax] для указателей. Это самое "складывание с указателем массива" вообще не отдельная операция - а вариант адрессации в инструкции mov. Они могут вообще одинаковое количество тактов занимать, это надо мануал по конкретной архитектуре процессоров читать.
    Ответ написан
    Комментировать
  • Как использовать класс, определенный в двух подключаемых файлах?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Вставить директивы препроцессора, чтобы только 1 раз включался заголовочный файл

    1 вариант
    #ifndef CLASS3_H
    #define CLASS3_H
    // Код
    #endif


    2 вариант
    #pragma once
    // Код
    Ответ написан
  • Как использовать класс, определенный в двух подключаемых файлах?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Есть костыль:
    #define Class3 Class3_Unused
    #include "module1.h"
    #undef Class3


    Таким побразом при включении module1.h вместо Class3 будет объявлятся какая-то хрень, которую нигде вы использовать не будете.

    Правда, все ломается, если у вас этот module1.h включен по цепочке других инклудов. Надо аккуратно в каждом месте, где вы его включаете так же обарачивать в define.

    Но по уму, это большой косяк авторов module1 и module2, что они не используют namespace. Их надо бы переписать.
    Ответ написан
    1 комментарий
  • Можно ли подключить блок питания от ноутбука к удлинителю?

    @pfg21
    ex-турист
    конечно же.
    что может сломаться в бытовом удлинителе если к нему подключить бытовой блок питания бытового ноутбука допустимой мощности ?? :)
    Ответ написан
    Комментировать
  • Как подключить библиотеку с++(возникает ошибка хедер сломан)?

    maaGames
    @maaGames
    Погроммирую программы
    В дополнительные зависимости надо указывать lib файлы, а не хэдеры. Ты перепутал местами настройки. Хэдеры (путь до папки, а не сами файлы) надо задать в блоке где AdditionalIncludeDirectories. Соответсвтено в коде останется #include "BaseTerminal.h", если в настройках задаш путь "D:\Projects\TerminalHelper\TerminalHelper\"
    Ответ написан
    22 комментария
  • Почему пишет неопределенный тип?

    maaGames
    @maaGames
    Погроммирую программы
    Судя по вот этому: "EventArgs.h", в вопросе показан код из срр файла. А в другом срр файле происходит создание объектов и там включен только "EventArgs.h" с forward declaration этих классов. Собственно, об этих классах там известно только то, что они есть и можно только указатель на них создать и всё. Определение класса олжно быть в хэдере и этот хедер надо включить во все файлы, которые этот класс используют.
    И сделай виртуальный деструктор. Но это уже следующая ошибка, про которую спросишь.
    Ответ написан
  • Подходящая программируемая плата чтобы сыграть мелодию на спикере?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ардуино нано с усилителем и динамиком https://docs.arduino.cc/tutorials/generic/simple-a...
    Ответ написан
    Комментировать
  • Как преобразовать char* содержащий символы unicode?

    @dima20155
    you don't choose c++. It chooses you
    Если я правильно понял чего выхотите добиться, то можете попробовать данную библиотеку https://github.com/nemtrif/utfcpp
    Крайне простая и компактная
    Ответ написан
    1 комментарий
  • Почему не работает светодиодная лента при подключении к Arduino через реле?

    Попробуйте реле заменить на пятивольтовое, пяти вольт для реле на 12, может не хватить для притягивания якоря.
    Ответ написан
    2 комментария
  • Как правильно округлять числа с плавающей точкой с заданной точностью?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Очень многие числа нельзя записать в виде числа с плавающей запятой, потому что они не представимы в виде доичной дроби с заданным количеством знаков. Например вы 1/3 как десятичную дробь не запишите. Ибо там 0.3333... - бесконечная последовательность троек. Для хранения double выделенно сколько-то бит под мантиссу, но их сильно меньше бесконечности.
    Поэтому ни 1/10, ни 3/100, ни 1467/1000 и почти любая дробь будет непредставима в виде float. Поэтому, если вам нужна точность, то вы округляете до целого и храните количество, скажем, тысячных долей в целых числах. Как сумму денег вы храните не долларах, округленных до 2 знаков, а как целое число центов.
    Ответ написан
    Комментировать
  • Компиляция C++ кода на Ubuntu и Windows даёт мне разный результат, почему?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Скорее всего там где-то Undefined behavior. Например, выход за границу массива. Вы там вектора везде возвращаете, но может быть там вы где-то его заполняете на на ожидаемые 8 позиций.

    Советую переписать код. Возвращайте std::array<std::bitset<16>,4> например. Вместо push_back сразу обращайтесь к i-ому элементу ответа.

    Далее, у вас там 2 функции делают одно и то же - разбивают большой bitset на несколько маленьких. Напишите template функцию, которая выделяет из битсета длиной N битсет длиной M со сдвигом offset. Внутри просто циклом присваивайте res[i] = input[i+offset].

    Переписав и упрастив вот так вот код, вы, возможно, исправите ошибку.
    Ответ написан
    Комментировать
  • Неправильно работает компилятор c++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Связано с тем, что у mintty нет ключа -f, это английским по белому в ошибке написано.
    Исправить можно убрав этот ключ из командной строки mintty.
    Ответ написан
    1 комментарий
  • Как оформить сортировку по алфавиту?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужна функция предикат или перегруженный оператор сравнения. Вот посмотри как тут пишут
    https://stackoverflow.com/questions/2758080/how-to...
    Ответ написан
    3 комментария
  • Что не так с кодом, проверяющим логическую схему?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Во-первых, у вас цикл от 0 до 32 включительно. Т.е. вы на последней, 33-ей итерации пытаетесь преобразовать 0b100000 в bitset, фактически, второй раз учитывая вариант со всеми нолями. Вот почему вы получаете 33 а не 32.

    Во-вторых, у вас ошибка с тем, что вы из bitmask берете биты, которые есть числа 0 и 1 и проводите над ними битовые операции, а не логические. И это у вас там 32-битные числа же! Для | и & оно еще совпадает с вашими ожиданиями, а вот ~ обращает ВСЕ 32 бита числа.

    Поэтому ~(bitset[E] | bOrD) всегда выдаст или -1 или -2. Вы потом это пропустите через or, получите опять же -1 или -2 и в конце преобразуете это в bool. И вот тут-то оно всегда и станет true.

    Чтобы это исправить, или используйте логические операции (||, &&, !), или вместо ~x используйте x^1, или в самом конце возвращайте результат с &1, чтобы значения остальных бит ни на что не влияли.
    Ответ написан
    5 комментариев