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

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    1) Забудьте про char*/char[] в вашей задаче это лишнее. Есть std::string.
    2) WriterData -> Writer. И лучше написать просто struct Writer {};
    3) Данные надо хранить в std::vector (или другом контейнере, этот вопрос должен обсуждаться отдельно), тогда и переменная count не понадобится. Вероятно это должен быть вектор std::shared_ptr.
    4) getWriters -> writers, и возврашать он должен вектор, не принимая никаких аргументов и быть const методом. Вопрос ещё, нужен ли вообще этот метод.
    5) insertWriter -> addWriter, принимать опять же два std::string const&. Возможно так же возвращать std::shared_ptr с только что созданным писателем, что не обязательно, смотрите по задаче.

    PS Вообще, devalone посоветовал вам двигаться в правильном направлении, т.е. почитать книжки по C++ и доки.
    Ответ написан
    Комментировать
  • В чем суть данной конструкции?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    "зачем так" -- это впрос к автору коммита, блеймите и пишите на мыло. Можно просто написать "return a > b;".
    Ответ написан
  • Есть ли смысл использовать inline-функцию?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Вот конкретно тут нет смысла. Компилятор с большой вероятностью сам заинлайнит эту функцию. Вообще ключевое слово inline имеет только одно верное использование в современных реалиях: для функций (обычных или специализаций) объявленных и определённых в заголовочных файлах, в случае если файл исходников отсутствует или там нет реализации функции.
    Ответ написан
  • Что нужно знать junior c++ разработчику?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Если человек сможет написать, скажем аналог std::shared_ptr (пусть и без кастомного делитера и не потокобезопасного), или что-нибудь аналогичное по сложности, и знает какие-то основы STL (хотя бы когда, почему и для чего выбрать тот или иной контейнер), то его вполне можно взять на должность джуна. Опыт в реальных проектах или опыт работы над open-source или своим личным проектом, тоже должен присутствовать. Это же всё-таки джун, а не стажёр. З/п примерно 60к.
    Ответ написан
    Комментировать
  • Стоит ли проходить сертификацию QT?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Можете пройти, но никаких приемуществ это не дает. Я сдал два экзамена в прошлом году, просто для интереса, довольно легко. З/п мне резко не повысили после этого, только стоимость экзаменов вернули :)
    Но пройдите если желание есть, лишним не будет, чего уж там.
    Ответ написан
    2 комментария
  • Как пишутся кроссплатформенные библиотеки?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Первый вариант. API системы + дефайны для выбора реализации.
    Для рендеринга виджетов может быть использован разный бэкэнд. Можете погуглить (на английском конечно же) как Qt рендерит виджеты, благо материала много.
    Ответ написан
    Комментировать
  • Что делает "Q_DECL_OVERRIDE" в Qt?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Этот макрос раскрывается как override, если есть поддержка C++11 и как пустое место в противном случае. Что собственно и написано на сайте: "It expands to "override" if your compiler supports that C++11 contextual keyword, or to nothing otherwise".
    Что означает ключевое слово override можно легко нагуглить: en.cppreference.com/w/cpp/language/override.
    Для виртуальных функций отличная практика писать слово virtual только один раз -- в интерфейсе обычно, от этого они виртуальными быть не перестанут. В остальных случаях override.
    Ответ написан
    Комментировать
  • Boost или не Boost вот в чём вопрос?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Если пишете что-то кроссплатформенное где будет много работы с сетью, то буст незаменим. Если же из буста нужно пару-тройку мелких функций задействовать (и в дальнейшем функциональность не будет расширяться), то можно и и самому написать. Правда, вам вероятно еще и с файловой системой придётся работать... Так что скорее всего вам нужен буст.
    Можно и другие библиотеки рассмотреть, которых, к слову, не так уж и мало.
    Ответ написан
    Комментировать
  • Есть ли аналог str.charCodeAt(index) для С++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Для обычной строки:
    std::string s("foo");
    int code = s[0]; // 102
    Ответ написан
    Комментировать
  • Какими приёмами вы пользуетесь чтобы различать указатели, которые нужно освобождать, от указателей, которыми нужно только пользоваться?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Все виды умных указателей (да и вообще все что использует RAII) -- это всего лишь еще одно удобство чтобы писать мень кода и чтобы он работал надёжнее. Управление временем жизни объектов всё еще на плечах программиста. Ведь даже используя умные укзатели вы можете получить утечку ресурсов, например за счёт циклических ссылок (и очень хитрых циклических ссылок! :)) и т.п. + многие забывают про weak_ptr...
    В общем и целом, проблема, которую вы описали -- это вопрос архитектуры. Т.е. знание кто и за что отвечает заложено в вашей системе и она работает по контрактам, которые описаны внутри.
    Ответ написан
  • Как передав указатель в функцию на char внутри функции записать туда строку и вернуть ещё и кол-во символов в строке?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    std::string securityLib_GetCode()
    {
       return "CODE";
    }
    // ...
    auto code = securityLib_GetCode();
    auto size = code.size();
    auto raw = code.c_str();

    Всегда используйте std::string в качестве обёртки над char *. Ну кроме очевидных случаев, например, когда это API какого-нибудь модуля и может случиться беда из-за разных рантаймов.
    Ответ написан
    5 комментариев
  • VS15 не видит iostream?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    VС++ ToolKit, или как он там у VS называется, поставьте.
    Ответ написан
    1 комментарий
  • Не могу разобраться в книге Герберт Шилдт C++. Ошибка в книге или в VS?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Это не ошибка. Программа запустилась, что-то напечатала и вернула 0. VS себя ведёт правильно и программа тоже. Никто в книгах по плюсам общей направленности не будет ориентироваться на конкретную IDE, OS или же компилятор. По крайней мере так должно быть.
    Попробуйте запустить свою программу из консоли, и тогда чёрное окошечко не закроется, или же настроить IDE, чтобы не закрывала консоль. Думаю, что это нагуглится на раз-два.
    Ответ написан
    Комментировать
  • Когда вообще используется этот List?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Ваш эксперимент далёк от идеала. Сделайте примерно 1000 одинаковых экспериментов и возьмите среднее + если мы измеряете время вставки, то ненадо учитывать время заполнения контейнера. Надо вызвать resize у вектора и листа, заполнить их (не push_back'ом), а потом измерить время вставки, и так примерно 1000 раз, каждый раз с новым вектором и листом. И время замерять, после того как вы получили итератор на нужное место в листе, а не до. Т.е. только время вставки.
    Про оптимизации пока умолчим.

    Применяется лист в зависимости от данных и используемых алгоритмов. Где актуальны приемущества листа (читайте документацию, какие), там и применяется. + еще надо уметь пользоваться контейнерами (а то потом начнется про то что, например, вектор работает медленно и памяти много жрет или что в листе долгий доступ по индексу).

    PS Время так можно замерять: en.cppreference.com/w/cpp/chrono
    Ответ написан
    2 комментария
  • Как объединить три одномерных массива в один?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Создайте массив с достаточным количеством элементов и скопируйте туда три массива, которые надо объединить :)
    PS Советую использовать std::vector.
    Ответ написан
    Комментировать
  • Как составить план обучения?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Книгу однозначно бросать не стоит. Вам очень и очень много придётся читать, ведь C++ -- это лишь малая часть того, что нужно знать разработчику, привыкайте. Как совмещать? Очень просто: читайте утром, или вечером, после колледжа.
    Ответ написан
    Комментировать
  • Какая самая лучшая книга по программированию C++ для опытного программиста?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    https://www.amazon.com/Effective-Modern-Specific-W...
    https://www.amazon.com/Advanced-Metaprogramming-Cl...
    + Саттер, Страуструп (но не ту, что с лебедями на обложке), Александреску, Стивен Дьюхерст...
    Стандарт языка еще, и много-много доков и видео с конференций.

    А вообще странно, что "опытный программист" не читал Макконелла. Который, к слову, к C++ отношения не имеет.
    Ответ написан
    2 комментария
  • Как в c++ уменьшить память, зарезервированную под вектор?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Ну или без C++11 есть метод (который без необходимости лучше не использовать):
    std::vector<int>(myVector).swap(myVector);
    Ответ написан
    Комментировать
  • Какие есть популярные фреймворки/библиотеки для реализации MVC/MVP/MVVM подходов в десктопных приложениях?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Для С++ есть Qt. Там есть поддержка концепции Model-View: https://doc.qt.io/qt-5/model-view-programming.html . +Даже в обычных виджетах концепция MVC проглядывает.
    Ответ написан
    6 комментариев
  • Можно ли писать на чистом Си под Qt? Или для этого нужно именно Си++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Теоретически можно, но вот на практике получится всё печально. C++ и C это два совершенно разных язык, а соотвественно и подход к разработке разный. Хороший C программист, который только начал писать на плюсах, почти на 100% плохой C++ программист, который пишет на "C с классами" и много не понимает. Разумеется после знакомства с C научиться использовать C++ будет легче и это плюс.
    А в Qt надо знать C++ на приличном уровне (и много чего еще), чтобы не спотыкаться на очевидных вещах и не применять GDD подход без понимая происходящего :)
    Ответ написан
    Комментировать