Задать вопрос
  • Возможно ли написать юнит тест под void функцию?

    @res2001
    Developer, ex-admin
    Если функция ничего не возвращает, то она либо изменяет значения своих аргументов, переданных по ссылке (указателю) или глобальных переменных, либо что-то выводит на консоль/окно/порт/сокет/прочее, в противном случае она бесполезна.
    Проверяйте любую выходную информацию, которую генерирует функция.
    Ответ написан
    Комментировать
  • Как задать строку в C++?

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

    Использовать для строк массивы - это подход из языка C. Он годится в тех редких случаях, когда у вас, например, максимальная длина строки ограничена и подобных. В общем случае, если вы начнете использовать для строк массивы, вы просто заново напишите плохо отлаженную, неоптимальную, и едва ли хорошо оттестированную реализацию std::string еще раз.
    Ответ написан
    7 комментариев
  • Как присвоить пару?

    Ваше присваивание выполняет p1.first = p2.first и p1.second = p2.second. Но вы запретили присваивать в p1.first, объявив его как const.
    Ответ написан
    Комментировать
  • На каком движке лучше написать игру с мультиплеером?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Да на любом...
    Ответ написан
    Комментировать
  • Как игровые платформы относятся к вопросу лицензионности программного обеспечения?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Игровые платформы - не требуют. Но если доход будет - то те же Unity могут проверить лицензию.
    Ответ написан
    Комментировать
  • Что почитать по сетевому программированию?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Сетевое программирование
    Седой и строгий
    1 комментарий
  • Что почитать про сетевое программирование C++?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Йон Снейдер - Эффективное программирование TCP/IP
    Ответ написан
    Комментировать
  • Как убрать утечку памяти?

    В c++ рекомендуется использование std::vector для динамических массивов. Тогда и проблем с утечкой памяти не будет.
    Ответ написан
    Комментировать
  • Как совместить python и С++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Интерфейс на C++ в подавляющем большинстве случаев - это Qt. Для Python есть библиотека PyQt, представляющая очень близкий API и всё богатство функционала.
    Ответ написан
    Комментировать
  • Повреждение стека вокруг переменной - как побороть?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Используйте вендовые типы и вендовый прототип для функции, которую тащите из DLL.
    typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
    BOOL isWow64 = FALSE;
    Ответ написан
    2 комментария
  • Java на уровне железа, отличия от C++?

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

    Вы забываете о большом пласте истории техники, который был сильно до этого - 8 битные домашние ЭВМ (десятки их) и язык Бейсик.

    Так вот, ЭВМ того времени были катастрофически разными - разные носители (кассеты, дискеты, картриджи), разная аппаратура (засунуть еще один центральный процессор в дисковод? да нивапрос! разная скорость для PAL и NTSC версий - легко!). Но вот бейсик был везде и позволял, с некоторыми переделками, таскать программы с машины на машину.

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

    Отчасти, это сработало на старых мобилках, в эпоху j2me - это как раз Java, засунутая в телефон - игры, браузеры, карты (были даже ЯндексКарты), читалки, чатилки - куча всего.

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

    Сейчас апплет на java можно встретить во всяком старом железе, на нем там сделано GUI для удаленного администрирования серверов, коммутаторов и СХД. Вы браузером заходите на железку, и тут на вас вываливается ворох предупреждений о том, что сейчас будет запущено какое-то ужасное дырявое ПО, держите штаны, а то слетят. Уверены? Точно уверены? А с этим согласны? А так?

    А уже потом начали активно применять JavaScript, главным образом, изобретя Ajax - продолжая люто натягивать сову (систему для создания электронных библиотек для ученых/HTML) на глобус (задачу создания интерактивного гуя с красивой версткой).

    И это вы еще бэк на Perle не рефакторили
    Ответ написан
    2 комментария
  • Добавление тега в игнор?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нет, не существует. Поэтому модераторы карают за нарушение правила 3.1, когда пользователи на свой вопрос лепят какие попало теги.
    Ответ написан
    Комментировать
  • В чём проблема?

    У Вас существует функция main(), где Вы указали ее тип? int main() {}
    Ответ написан
    7 комментариев
  • Неглубокая царапина на матовом мониторе. Есть ли ремкомплект на такие случаи?

    sotvm
    @sotvm
    Умный поймёт, а дураку и так всё равно.
    Не вздумай пробовать варианты с наждачкой )))
    и вся другая полировка, тоже от лукавого. (лучше не будет)
    если "замазать" лаком и т.д. и т.п. - так же будет видно и будет "мозолить глаз"
    если овчинка стоит выделки - только переклеить плёнку
    Ответ написан
  • Что не так с потоком?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    -std=c++11 в опциях компилятора есть?
    Ответ написан
    5 комментариев
  • Как я могу вызвать функцию c++ из python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Ответ написан
    Комментировать
  • Как правильно перегрузить конструкторы в классе?

    @majstar_Zubr
    C++, C#, gamedev
    Рассмотрим проблему подробнее.

    class A {
    private:
     int aa;
     int ab;
    
    public:
     A()
         : aa(0), ab(0) {}  // (4) note: candidate constructor not viable: requires
                            // 0 arguments, but 1 was provided
     A(int a)
         : aa(a), ab(0) {}  // (2) note: candidate constructor not viable: no known
                            // conversion from 'A' to 'int' for 1st argument
     A(A& obj);  // (3) note: andidate constructor not viable: expects an l-value
                 // for 1st argument
     void Show() { cout << "Var1: " << aa << endl << "Var2: " << ab << endl; }
    };
    
    int main() {
     A obj = 5;  // (1) error: cannot bind non-const lvalue reference of type ‘A&’
                 // to an rvalue of type ‘A’
     obj.Show();
    
     return 0;
    }


    Стандарт обязывает понимать

    A(A& obj);

    как user-defined конструктор копирования. Поэтому, конструктор копирования T::T(const T&) не будет объявлен по-умолчанию компилятором. Со стандарта C++11 предоставляется возможность заставить компилятор генерировать неявно-объявленный конструктор копирования ключевым словом default

    A(A& obj) = default;

    Неявно объявленный конструктор копирования по-умолчанию имеет сигнатуру T::T(const T&) но лишь в случае, когда все базовые классы T имеют конструкторы копирования с параметрами const B& или const volatile B&, и когда все не статические данные-члены класса T имеют конструкторы копирования с параметрами const M& или const volatile M&.

    В ином случае, неявно объявленный конструктор копирования имеет сигнатуру

    T::T(T&)

    В данном случае, конструктор копирования A(A& obj) является тривиальным с сигнатурой сгенерированного неявно-определённого конструктора копирования T::T(T&).
    Тривиальное копирование практически аналогично std::memmove

    В строке ошибки компиляции происходит следующее:

    1) оператор = в строке с ошибкой компиляции не является инициализирующим, поскольку литерал 5 является (rvalue, нельзя взять адрес) const int. Для исполнения операции присваивания компилятор сначала конструирует A(5);

    ...
    A(int a) : aa(a), ab(0) {
     cout << "Copy ctor with 1 parameter is called " << endl;
    }
    …
    int main() {
    …


    Вывод:
    Copy ctor with 1 parameter is called
    Var1: 5
    Var2: 0


    2) операция присваивания имеет дело с A obj = A (5):

    Справа от оператора присваивания находится временный rvalue типа class A.
    Данное присваивание является инициализирующим, что делает его эквивалентным A obj(A(5));
    Для данной операции необходим конструктор с сигнатурой T::T(T&&)
    Это - конструктор перемещения, и он в классе A отсутствует, поскольку неявное определение конструктора перемещения в классе требует отсутствия user-defined конструкторов копирования, оператора = копирования, оператора = присваивания, деструктора. В нашем случае, у нас имеется user-defined A(A& obj);

    Учитывая вышесказанное, для исправления ошибки компиляции можно либо удалить строку
    A(A& obj); ,
    что приведёт к неявному определению компилятором тривиальных конструкторов копирования и перемещения, либо добавить ещё в объявление класса A строку
    A(A&& obj);

    С точки зрения стандарта С++11 и выше, можно утверждать, что выражения A(A& obj); и A(A&& obj); соответственно эквивалентны A(A& obj) = default; и A(A&& obj) = default;
    Ответ написан
    5 комментариев
  • Как проще в VIsual C/C++ заменить "//" на "/" в переданном аргументе командной строки?

    myjcom
    @myjcom Куратор тега C++
    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    
    int main()
    {
      string s = "G:/Dev/MinGW/bin/Patch.exe -p0 -i"
                 " G:/avidemux_2.7.4/avidemux_core/..//avidemux_core/"
                 "ffmpeg_package//patches////////libavcodec_ac3_h.patch ";
          auto end = unique(s.begin(), s.end(), [](unsigned char l, unsigned char r){
              return l == '/' && r == '/';
          });
      s.erase(end, s.end());
      cout << s;
    }


    https://en.cppreference.com/w/cpp/algorithm/unique
    https://en.cppreference.com/w/cpp/algorithm/unique_copy

    в зависимости от степени мутабельности.
    Ответ написан
    Комментировать