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

    Adamos
    @Adamos
    А с чего бы его принимать?
    У вас выделяется динамическая память размером в один байт.
    Потом, начиная с этого адреса, впихивается весь ввод.
    Уже на втором символе программа просто обязана упасть.
    Причем даже при вводе длиной в один символ этим вторым будет завершающий ноль.

    Даже в задании написано про перевыделение памяти - какого, собственно?
    Ответ написан
  • Какие знания по математике для создания игр на C++?

    Adamos
    @Adamos
    Чтобы создать на движке Unreal, например, крестики-нолики - арифметики будет достаточно.
    Ответ написан
    Комментировать
  • Почему программисты не любят возврат константных ссылок в C++?

    Adamos
    @Adamos
    На самом деле, в жизни все может оказаться несколько сложнее. Если вы передаете по ссылке член класса, который сам является классом и содержит, например, контейнеры - то передача по ссылке не запустит конструктор копирования. Время это сэкономит, но создаст зависимость дальнейшей жизни кода от того, что там происходит внутри класса. То есть потенциальные грабли, от которых потом замучишься избавляться.
    А программирование, как известно - это в первую очередь управление сложностью. Оптимизации стоят намного ниже в списке.
    Ответ написан
  • Как исправить ошибку при компиляции error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]?

    Adamos
    @Adamos
    Вообще-то в инструкции /configure --with-cards=hda-intel - но дело, конечно, не в этом.
    Не знаю, какими ключами ему объяснить, что предупреждения не нужно трактовать, как ошибки.
    Но вам же даны файл и строчка, в которой проблема. Замените текст на "Compiled today for kernel %s" например - предупреждение и исчезнет...
    Ответ написан
  • Возможно ли в C++ повторное выделение памяти в стеке под переменную?

    Adamos
    @Adamos
    Операция = для компилятора С++ означает "вычислить правую часть и присвоить левой результат вычисления". Что до этого было в переменной, которая была в левой части - не играет вообще никакой роли.
    Ответ написан
    2 комментария
  • Как реализовать ввод вывод с нуля?

    Adamos
    @Adamos
    Ведь и библиотеки низкоуровневого ввода как то были написаны

    Бинго! Осталось найти и почитать их код. У glibc он открыт, например.
    Ответ написан
    9 комментариев
  • Как работать с ODBC в Ubuntu 15.04?

    Adamos
    @Adamos
    Поставьте mdbtools, сконвертируйте данные в нормальный формат (SQL) и прекратите это извращение.
    Хотите, чтобы было кроссплатформенно - забудьте про MDB и освойте SQLite.
    Ответ написан
    Комментировать
  • Кроссплатформенность c++ -> Qt\c++, c++\CLI?

    Adamos
    @Adamos
    Вы вес .NET библиотек смотрели? И их поддержку в страшно устаревшей, но по-прежнему распространенной в реальной жизни ХР?
    Вопрос звучит так, как будто вы сами не понимаете, что вам нужно. Мешать кроссплатформенную библиотеку с дотНетом - значит потерять достоинства и того, и другого. А главное - ЗАЧЕМ?!
    Ответ написан
    7 комментариев
  • Чем может быть полезен C++ веб разработчику?

    Adamos
    @Adamos
    Я бы посоветовал, если уж хочется общего развития, действительно познакомиться с С или Ассемблером (неглубоко - ровно настолько, чтобы понять, как программистские конструкции доходят до реального "железа").
    А для работы - не нахватываться языков, да побольше, а погрузиться в один из них всерьез. Написать свою библиотеку на js. Или высоконагруженный проект на go. Так, чтобы прочувствовать язык и получить от него удовольствие, делая сложные вещи просто и естественно.
    То есть - побольше руками и головой. А за статьи, хабр и прочее хвататься только тогда, когда не будет хватать информации. Читать - легко...
    Ответ написан
    2 комментария
  • Как увеличить размер массива в C++?

    Adamos
    @Adamos
    1. Вы сами себя путаете, используя *(array + i) вместо array[i]
    2. Вы создаете новый массив, не удаляя старый. Понятно, что в лабораторной это не критично. Но если вы собрались жить с С++, то либо вам будут резать глаз такие вещи, либо учите другой язык.
    3. У вас есть функция, в которую передается массив и элемент. Функция возвращает либо новый массив, либо nullptr. Это противоестественно. Функция должна возвращать ссылку на массив - а новый он или старый, можно решать вне функции. Это кажется неважным, но хороший код базируется именно на таких мелочах, а говнокод растет именно из-за того, что "здесь же и так все понятно".
    4. Наконец, в программе трэш. Запрашиваются значения для массива, но они не вводятся в сам массив. В массив добавляется не введенное значение, а 4 (?). lineArray сразу же теряется, поскольку ему присваивается nullptr...
    Ответ написан
    9 комментариев
  • Как записать файл на диск в обход файловой системы(для ускорения)?

    Adamos
    @Adamos
    Все, что можно реализовать для ускорения записи файлов, обычно уже реализовано в драйвере файловой системы.
    Все проблемы, которые были решены разработчиками этого драйвера, станут вашими, если вы собрались без него обойтись.
    Кроме того, вы теряете сразу два слоя абстракции: записывая файл средствами ОС, вы можете не интересоваться, в какой файловой системе он будет записан и будет ли она вообще локальной - с этим разберутся ОС и драйверы.
    Ну, и не забываем, что в ОС с нормальными настройками безопасности пользовательская программа не может просто так вот взять и обратиться напрямую к "железу".

    В общем, не занимайтесь ерундой. Даже те знания, которые вы можете обрести, изучая сейчас этот вопрос, вам в обозримом будущем не пригодятся.
    Ответ написан
    Комментировать
  • Почему закрывается доступ к переменной?

    Adamos
    @Adamos
    А ведь если этот говнокод на С нормально переписать на С++ (использовать вектора вместо массивов, собрать глобальные переменные внутрь класса с функциями, которые их используют) - глядишь, и ошибка найдется где-то по пути...
    Ответ написан
  • Как изменить строку в файле?

    Adamos
    @Adamos
    Предположим, вы написали программу, которая докапывается до кластеров и заменяет байты прямой записью на диск.
    Теперь представьте:
    - что у пользователя нет админских прав, и хрен система позволит ему напрямую обращаться к диску;
    - что программа запущена под Wine, и подобные функции вызвать невозможно
    - что за время существования вашей программы разработаны другие файловые системы, и хранение файлов в них иное
    - что файл сжат на диске средствами Виндов
    - что файл лежит не на локальном диске, а на подключенном сетевом ресурсе
    - ...
    Вам все еще хочется идти глубже?
    Ответ написан
    Комментировать
  • Как правильно привести к типу в C++\Qt?

    Adamos
    @Adamos
    Вообще такое приведение - это наследие С, и в С++ - моветон.
    Если же заменить его dynamic_cast и проверять результат на NULL, могут вскрыться всякие нюансы.
    У меня, например, были проблемы с приведением родительского окна к тому классу, которым оно должно было быть. Исследование показало, что в версии библиотеки под одну из платформ дочерний класс заворачивался еше в одного родителя, и такое приведение вызывало сегфолт...
    Ответ написан
  • Какой наиболее удобный (автоматизированный, простой) способ работы с двумерными динамическими массивами (матрицами) в С++?

    Adamos
    @Adamos
    class MyMatrix {
    public:
      MyMatrix(size_t width, size_t height);
      ~MyMatrix();
      size_t getWidth();
      size_t getHeght();
      MyType get(size_t x, size_t y);
      void set(size_t x, size_t y, MyType value);
    private:
      size_t _width, _height;
      MyType* _memory;
    };

    Если вы знаете С++, то написать реализацию у вас займет что-то в районе получаса...
    Ответ написан
  • На чем лучше всего писать современые прикладныи приложения под Windows?

    Adamos
    @Adamos
    По тем пунктам, которые знаю сам:
    Microsoft Foundation Classes - труп, официально закопанный самой MS
    Visual Component Library - труп, живущий только потому, что студентов годами учили писать под Борланд
    Qt - логичный вариант, минусом тяжеловесность, плюсом кроссплатформенность и развесистость (много готового кода, который можно просто использовать)
    wxWidgets - ну, представьте себе, что независимые программисты посмотрели на MFC и VCL и сделали все то же самое, но кроссплатформенно. Зависимостей нет - все API нативное под каждую платформу. Увы, востребовано оно куда меньше Qt, поэтому развивается вяло и не так богато готовеньким.

    Да, и сейчас уверенно заявлять, что будешь писать только под Windows, довольно неосмотрительно, как мне кажется...
    Ответ написан
    Комментировать
  • Как сильно полиморфизм влияет на производительность и учитывается ли это в серьёзных программно-вычислительных комплексах?

    Adamos
    @Adamos
    Полиморфизм сам по себе влияет на уровне погрешности.
    Архитектура без него может оказаться настолько менее оптимальной, что будет тормозить куда сильнее.
    По моему опыту оптимизации вычислительной работы программы по скорости, главная проблема - это считать именно то, что нужно. Если просчитываются варианты, то их отсеивание на как можно более ранней стадии - это такой козырь, который бьет любые другие оптимизации.
    Вторая - работа с памятью. Создание массива объектов во вложенном цикле в рекурсивной функции легко уложит на бок весь top500 %) Не говоря уже о том, что вероятность течи прямо пропорциональна количеству динамически созданных объектов.
    А полиморфизм... ну, если у вас реально полиморфная функция будет вызываться миллион раз в секунду, вы, наверное, почувствуете падение производительности...

    В общем, оптимизацию, как мне кажется, нужно проводить в обратном направлении. Сначала - архитектура, в которой работа алгоритмов будет понятной и очевидно оптимальной, затем - поиск узких мест. Если однажды дойдет до того, что узким местом станет полиморфный вызов функций... ну, поздравляю - учите ассемблер!
    Ответ написан
    Комментировать
  • Можно ли в C++ организовывать такой массив (Как в JS)?

    Adamos
    @Adamos
    Если как в JS, так и храните, как в JS - строками, которые приводятся к нужному непосредственно перед использованием...
    Ответ написан
    Комментировать
  • Как получить путь к исходному файлу?

    Adamos
    @Adamos
    Просто напомню, что в этом веке файлы программы уже не пишут свои файлы туда же, где находится программа.
    Потому что, например, в Виндах программе положено лежать в Program Files, а пользователь туда ничего писать не имеет прав. В других системах та же логика.
    У вас, возможно, просто старая методичка, но лучше сразу не учиться плохому.
    Есть пользовательские папки специально для этих целей, и у кроссплатформенных библиотек есть стандартные функции для получения пути к ним. Потому что реальный путь зависит от версии ОС и имени пользователя.

    Как это сделать только под винды - можно посмотреть, например, тут
    Ответ написан