Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать? Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли? A:
Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Вопросы по синтаксису идут на хуй
Лабы идут на хуй
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй
Все идут на хуй
Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешниесервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++? A:
Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искусственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.
Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A:
Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A:
Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполневозможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A:
Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Этифичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать? A:
Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы)
Название
Год
Ссылка
Бьерн Страуструп
Программирование. Принципы и практика использования C++
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Автор(ы)
Название
Год
Ссылка
Ален Голуб
Веревка достаточной длины, чтобы выстрелить себе в ногу
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Q: Я готов начать погроммировать! Куда мне писать код? A:
На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа
Название
Описание
Ссылка
Windows
Microsoft™ Visual Studio®
Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда
Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM
http://codelite.org/, "sudo aptitude install codelite codelite-plugins"
для установки под *nix
Все
CLion
IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использоватьтекстовыйредактор в связке с каким-нибудькомпилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A:
Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio
Гугловский фреймворк для автоматизации тестирования
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы? Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A:
Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году)
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>>804556 Какая мотивация-то? Если хочешь ускорить, то хуярь сразу шаблонные пулы без фрагментации, или там ленивые прокси, скажем, а здесь я не вполне понимаю, в чем профит.
>>804594 allocate должен кидать bad_alloc при неудаче, а у тебя он не проверит код ошибки и будет пиздец, не? Алсо, там есть еще несколько подобных требований к аллокаторам, посмотри вот тут, например http://en.cppreference.com/w/cpp/concept/Allocator >тут без фрагментации Не, я не про то. Одно из популярных решений состоит в том, чтобы запрашивать сразу страницами память для каждого отдельного типа, делить ее на равные куски и создавать на ней только объекты этого типа. Получается своеобразный пул, в котором нет фрагментации, из-за ровного размещения. Когда много объектов и мало типов (а не наоборот), то это существенно ускоряет работу.
>>804601 >allocate должен кидать bad_alloc при неудаче, а у тебя он не проверит код ошибки и будет пиздец, не? Аллокатор оптимистичный. А так да, по-хорошему надо проверять.
> Алсо, там есть еще несколько подобных требований к аллокаторам, посмотри вот тут, например Если отмотаешь до конца страницы, там есть minimal example. Я его и реализовывал.
> Не, я не про то. Одно из популярных решений состоит в том, чтобы запрашивать сразу страницами память для каждого отдельного типа, делить ее на равные куски и создавать на ней только объекты этого типа. Ну кагбэ вектор так и делает, запрашивает contiguous кусок памяти под N объектов и потом конструирует их там.
>>804627 Говно или дерьмо? Хммм... Что же выбрать? Наверное, все же дерьмо... Хотя нет! Дерьмо я выбирал в прошлый раз, так что сегодня пусть будет говно!
>>804622 Иногда мне снится, что я снова на втором курсе, отлаживаю крестолабу на потрепанном несколькими поколениями студентов компьютере из машзала, с Debian, gcc, gdb и autotools. Я лихорадочно печатаю одну консольную команду за другой, длинноволосый и дурнопахнущий преподаватель в футболке с логотипом GNU осыпает меня проклятиями... Выведя очередную стену неформатированного текста, gdb вылетает в kernel panic, и я просыпаюсь в холодном поту. Потом я подхожу к компьютеру, открываю проект в студии и плачу от счастья.
>>804642 >Потом я подхожу к компьютеру, открываю проект в студии и плачу от счасть Сейчас бы сюда цитату Криса Касперски об отладке в спермомирке и смешных сперморабах, которые впадают в растерянность без уютных окошек с кнопкотыком.
>>804687 Хорошо, когда есть консоль (а в студии она есть, не сомневайся). Плохо, когда есть только консоль, смекаешь? Ты можешь возразить, что вот как возьмешь пистон, да как напишешь визуализаторы лучше чем в студии... Только пока ты их пишешь, я буду спокойно работать с удобным инструментарием. Поэтому, кстати, большая часть швабодных утилит смахивает на proof of concept - за пару вечеров хуй напишешь что-то сравнимое по удобству, а на большее мало кого хватает без финансовых вливаний.
И еще вопрос: какого хуя шапка не обновляется, а с каждым новым тредом копипастится одна и та же инфа (может стих поменяют только)? И это элита /pr? ОП уебок блять.
>>804726 Привет парни. Поставил Eclipse. При наборе "#include <" не отображается список хедеров; при наборе "std::" не отображаются члены неймспейса. Я слышал, что Eclipse щироко распространен среди профессиональных сиплюсплюсников, а значит эта функциональность явно должна там быть реализованной. Так как собственно настроить этот автокомплит?
>>804745 Не бомби, няша. C++ развивался эволюционно. А эволюция всегда рождает костыли.
Смотрю сейчас talk Александреску про аллокаторы. Оказывается, их запилили только для того, чтобы работать с NEAR- и FAR-указателями на 16-битных интелях. Ради тайпдефа allocator::pointer_type, который был разным у NEAR- и FAR-указателей.
И как вы смеете, крестухи, что-то кудахтать про обратную совместимость, если у вас триграфы в новом стандарте запретили? Не какую-то редкоиспользуемую фичу, а триграфы, КАРЛ!
>>804805 Тащемта, для rvalue можно указать значение, если ты, например, передаешь его в функцию по ссылке, и это хороший тон - менять состояние объекта на другое, валидное до того, как он удалится.
>>804601 >Одно из популярных решений состоит в том, чтобы запрашивать сразу страницами память для каждого отдельного типа, делить ее на равные куски и создавать на ней только объекты этого типа Стоковый маллок так и делает для небольших объектов. Только там оверхед на мьютекс.
Я сделал по книге страуструпа простенький камень-ножницы-бумага: https://ideone.com/TSQFAk Но такой вопрос, почему если я жму ctrl + z (насколько я знаю это прервать), то у меня начинает бесконечно выводить пикрил, но только если я 1 раз отвечу нормально.
>>804988 Подключил /usr/include, нихуя не изменилось.
В qt creator хоть есть автокомплит по умолчанию, и тебе не надо тратить хуеву тучу времени на настройку автокомплитa, который по умолчанию должен быть настроен.
О чем думали эти долбаебы, когда писали эти гавно ИДЕ типа CodeLite и Eclipse? Сложно прописать стандартный путь к хедерам в линукс-версии (хотя и это не работает).
>>805083 >/usr/include Мде. Ты бы хоть узнал, где лежат хедеры, критик бля. У меня, например, лежат в /usr/include/c++/4.2.1
Eclipse умеет детектить toolchain, кстати. Скорее всего у тебя просто не установлен компилятор и/или стандартная либа. А даже если бы не умел, для на больших проектах четких посонов это не парит - все равно придется прописывать свой.
>>805114 Мне твоя MSVC до пизды, когда я пишу под macOS или linux. К тому же необходимость покупать resharper-c++ какбэ напоминает о реальной полезности студии.
>>805103 Действительно, надо было подключить другую папку, но это все равно не работает. А в CodeLite всё и так в настройках прописано, но все равно нихуя не работает. g++ и весь gcc тулчейн установлены
Есть у кого опыт создания приложений под винду на QT с использованием QT Quick? Внезапно в релиз версии приложения невероятно медленно отрисовывается интерфейс. 3-5 FPS, при этом в Debug версии никаких проблем.
>>805461 >Есть у кого опыт создания приложений под винду на QT с использованием QT Quick? >Внезапно в релиз версии приложения невероятно медленно отрисовывается интерфейс. >3-5 FPS, при этом в Debug версии никаких проблем. Профайлер для кого придумали?
>>805141 >необходимость покупать resharper-c++ Это стало блажью приблизительно с выходом 13 студии. Нет, если ты утенок и не хочешь расставаться с любимой погремушкой, то вперед, но не надо пиздеть о необходимости - мотивации его ставить практически не осталось, 2/3 фич есть из коробки, остальные в легковесных и бесплатных аддинах.
>>804949 >страуструп читаю его сейчас этот пидор уже заебал со своими функциями, которые он сам придумывает я уже не знаю, это синтаксис плюсов или его функция для книги пидор
Была задача: отформатировать текст двумя способами. Быстро набросал вот такой код: http://pastebin.com/vzSXSvQq Почему первый код работал минут 10, а второй закончил все за 5 секунд? Вектор использовал чисто ради интереса (на самом деле я просто нуб).
>>805892 Что наоборот? Крестовые функции только в std, сишные (printf, strcmp, malloc etc) - в зависимости от используемого хэдера. В .h нет неймспейсов, а в c есть.
>>805938 Это может банально от текста зависеть, если там разные символы удаляются и вставляются в разном количестве. Кроме того, хоть insert и erase оба в общем случае вызывают тяжелое копирование всего хвоста вектора, insert дополнительно может вызвать переаллокацию, а erase - никогда. С учетом того, что копирование последовательных символов обычно заоптимизировано до невозможности, у тебя на втором коде, вероятно, много времени уходит на переаллокации. Но вообще это надо смотреть с профайлером, конечно, так сразу мало что можно сказать.
>>805965 Спасибо. В первом коде условие сработало где-то 200 раз, во втором 4560 раз. Первый работал 10 минут, второй 5 секунд. Я в замешательстве. Возможно, причуды компилятора.
>>806002 Считается хорошим тоном, если код функции помешается на один экран. Ну или она выполняет одно осмысленно законченное действие. Так же любые числа желательно заменять на константы, с более понятными именами.
Проигрываю с экспертных диванов в этом ITT-треде. Реального кода в жизни не видели, но знают, что магические константы это огромное зло, думают, что смогут понять любую функцию, помещающуюся на экран и проч.
>>804519 (OP) Расскажите о работе на плюсах в России (прежде всего интересует ДС и ДС2). Я студентота IT-направления, имею опыт написания учебных проектов на C/C++/Java/C#. Пора наконец выбрать, в каком направлении развиваться (хотя бы определиться с языком). Склоняюсь к плюсам, но знакомые говорят, что на плюсах с каждым годом работы все меньше, и советуют учить джаву. Что бы вы посоветовали? Слать их нахуй и учить плюсы? Или, может, действительно, вкатываться в плюсы новичку нет смысла, и перспективнее учить что-либо другое?
Писал приложение на wx, суть в том, что оно должно было каждое определенное время обновлять .bmp пикчу. Для этого каждый ивент OnPaint я отрисовывалэтот битмап, а при необходимости сделать отрисовку без ивента использовал Refresh(). Проблема в том, что во-первых, это все сопровождалось ДИЧАЙШЕЙ нагрузкой на цпу, а во-вторых, постоянно происходило мигание этой пикчи с белым экраном. Как это нужно качественно реализовывать?
>>806726 Так, хорошо. Тогда вот ещё: видел я примеры, где преимущество rvalue показывалось на примере swap, которая выглядела как
template<class T> void swap(T& a, T& b) { T tmp(std::move(a)); a = std::move(b); b = std::move(tmp); }
Но ведь если я передам в такую функцию два уже созданных объекта, то они же будут lvalue, так ведь? И смысл тогда во всем этом? Что у меня так будет три копирования, что эдак. Или нет?
Хотя нет, при создании tmp будет вызван конструктор перемещения, и если в классе есть указатели, то их можно не копировать. Но в двух последних строчках b и tmp всё равно будут lvalue, смысл к ним move применят? Где я не прав?
>>806767 А, понял. operator= мне перегрузить никто ведь не мешает. И если у меня есть указатели, я перегружаю его как operator=(SomeClass &&r), перемещаю эти указатели и радуюсь жизни.
Как происходит открытие портов на пк? Насколько я знаю, настройка сего происходет на 192.168.0.1. Также есть определенные тулзы, позволяющие делать это не заходя в браузер. Когда я писал клиент-серверы, при первом запуске происходил запрос от фаервола на разрешение, возможно это и было "открытием" порта? Возможно ли открывать порты скрытно, с правами администратора или с правами сервиса?
>>806948 окей. тогда другой вопрос, как понять, что нужно писать именно класс и использовать всякие блядские виртуальные деструкторы, явные конструкторы, перегрузку операторов и т.п.? это приходит с опытом? я просто сейчас разбираюсь с Qt и при написании своей проги думаю: Писать тут класс или просто написать функцию. Простите за мою тупость, ну чтож поделать, надеюсь аноны помогут мне выбраться из этой блядской ямы непонимания.
>>806961 посмотри на вектор из std, например. Это тоже класс и у него есть интерфейс( публичные методы/переменные, которые доступны пользователю) и имплементация(приватные методы и переменные, необходимые для функционирования объекта). Плюсы в таком разделений в том, что: 1. пользователю НЕ НУЖНО коывряться в имплементации, чтобы что-то получить. 2. Можно поменять имплементацию (использовать другой алгоритм, другой контейнер) и при этом интерфейс останется таким же. То есть разработчику не придется менять интерфейс каждый раз. 3. Ошибок намного меньше, так как пользователь не имеет доступа к важным для функционирования членам класса. 4. НАСЛЕДОВАНИЕ! Qt, например, очень завязан на этой концепции.
ну и более практичный пример: Я хочу сделать ежедневник. В каждом дне - по несколько записей и так на протяжений 50 лет. Я сделаю отдельный хэдер и в нем определю 3 класса: 1.Date, в котором находится массив из 50 объектов Year. 2.Year, в котором находится массив из 12 объектов Month. 3.Month, в котором находится вектор из N объектов Day и переменная day_count. N расчитывается в конструкторе и day_count приравнивается к нему. 3.Day, в котором находится вектор записей(QString).
В Date я определяю operator[](int y), который возвращает y элемент из массива с Year. В Year я определяю operator[](int m), который возвращает m элемент из массива с Month. В Month я определяю operator[](int d), который возвращает d элемент из вектора с Day. В Day я определяю метод getEntry(int index), который возвращает index элемент из вектора с записями.
В итоге: В коде я могу написать Date date; date[y][m][d].getEntry(index); и получить соответствующую запись. Только вот в ней нихуя не будет хДДДД, так что надо еще определить setEntry(QString entry), потом написать эксепшионы, потому что operator[] не делает range check, потом сука дописать к твоему конструктору в Month дефолтный, потому что он нужен для array, а потом еще определить operator=, да и == тоже, и деструктор написать, а потом тебе внезапно нужны размеры каждого из массивов и ты имплементишь getCount, а в твоей голове появляется мысль-"а не сделать мне массивы публичными", но ты эту мысль должен откинуть, потому что НЕ ООП, и вообще, тебе надо имплементить at().
>>806994 Нахуя столько классов, если разделение на годы и месяцы важно только при отображении? Для внутреннего представления достаточно класса Day, или вообще отдельных записей, привязанных к unix time, например. Тогда не будет ебли со сменой часовых поясов, чуваками, живущими дольше 50 лет, и подобной хуйней.
>>806495 Важна предметная область, а не язык. Для С++ - особенно. Со знанием джавы и без опыта гораздо проще устроится. На С++ будут требовать опыт в нужной области.
Ребята. В общем двачуйте мне. С матаном у меня еле тройка была. Забежал немного по гейм деву . 3д графоний с матрицами и векторами чую не потяну. Помогите что делать? вообще хочу я в Digital SIgnal Programming, но...почитав основы для вывода звука с помощью какой то XAudio библиотеки и HEX вообще тонн текста... В общем окончательно стал понимать что IT из меня только эникейщийк. Че делать как быть?
>>807111 Мобильная разработка, фронтенд, бэкенд, сисадминство, бизнес приложения. Возможности безграничны! А ты перечислил тяжелые для вката области, которые не получится хуякс хуякс и в продакшен. Выбери что-то попроще и потихоньку обрастая нужными для вката куда ты хочешь навыками. Матан например можно и выучить на базовом уровне.
>>807133 А чего за фронт энд? А что на счет бетатестинга? хотя не - бетатестинг мы и так за бесплатно делаем, т.к. много игруль каких норм работают с патча 1.6 ....
>>807128 фронт энд - разработка интерфейса, но для веба? ну та же верстка не? Вот она у меня и была, после того как на HTML И CSS заделал страницу с тремя рамками, гиперссылками и окном, тоже понял что это уровень hello worlda.
>>807136 Верстка - это верстальщики, а я про создание клиентских приложений, js, angular, вот это все, интерактивные странички, сейчас вообще все больше логики держат на клиенте, асинхронные запросы опять же.
>>807583 Меняй содержимое, так быстрее будет Насколько я знаю, самый быстрый способ - сделать много лейаутов (в твоем случае делать каждый раз новый) Может эксперты знают другое решение
>>807587 Программач, я ведь знаю тут собрана самая мозговитая прослойка двача. Мне нужна помощь в решении следующего алгоритма. Задачка не из легких. Уже два дня потею, вот вот вроде выведу норм алгоритм,но нифига. Я уже и рекурсией, и мат. формулы искал. Ближе к делу.
Необходимо подсчитать число разбиений (N) на слагаемые, для вводимого нами числа (Sum), при том, что у нас есть список доступных слагаемых (Arr).
Пример: мы вводим число 7, и задаем слагаемые - [1,2,5]. Из этих условий следует, что Sum = 7; Arr = [1,2,5], а количество разбиений N нам нужно вычислить: 1) {5,2}; 2) {5,1,1}; 3) {2,2,2,1}; 4) {2,2,1,1,1}; 5) {2,1,1,1,1,1}; 6) {1,1,1,1,1,1,1}; В нашем случае N = 6; Важный момент - слагаемые могут повторяться, но их последовательность не важна, то есть разбиения типа {5,2} и {2,5} тождественны между собой и должны учитываться как одно решение
Ребят, помогите плз. Упарывание всяких там формул Эйлера и т.д. не помогло в силу отсутствия решения для конкретно подобного случая
Причем не выводится даже строка "before loop". Но если закомментировать так: https://ideone.com/LRarix , то "before loop" выводится. Как так объявление и заполнение вектора повлияло на поток выполнения, что даже до отладочной печати не дошло?
>>807796 > вроде OCA Это где будут спрашивать что покажет статический счётчик после строчки Huita a = 5, а код из примеров будет наполовину написан диграфами, а остальной · триграфами, ибо легаси?
В Qt списки в самом деле так уебищно реализованы? В чем тогда преимущество скорости вставки, если надо раздвигать массив указателей для вставки нового элемента, тогда как в настоящих списках вставка производится настройкой двух указателей?
Спрошу еще раз, Как происходит отрисовка на окнах? Почему при перезаливе картинки на окно и использования refresh() / update() происходит мерцание с промежуточным белым экраном? Как грамотнообновлять графическое содержимое окон?
>>807922 >В чем тогда преимущество скорости вставки, если надо раздвигать массив указателей Для типовых случаев разница будет невелика. Массив раздвигается быстро, потому что линейно лежит в памяти, что удобно кешу.
Как сделать свой QProgressBar? Наследуюсь от него, в explicit конструкторе добавляю один параметр, а компилятор пишет undefined reference to `vtable for CustomProgressBar'. Мне нужен прогрес бар заполненный 2 цветами в разных местах и чтоб прогресс показывался в виде треугольника сверху этого бара.
>>807991 фреймбуфер слишком часто обновляется из приложения и поскольку код,который выводит фреймбуфер на видеокарту, работает параллельно, то ты видишь промежуточное состояние фреймбуфера.
Анон, наверняка ты пошлёшь меня с этим вопросом к Мейерсу, но он какую-то дичь пишет, так что выслушай меня: Я - школяр. Закончил школку, неплохо сдал егэ, но мне пофиг, вкатываюсь на матфак, ибо знаю, что IT-образование у нас полная дичь, а матфак в нашем мухосранском ГУ не такой геморрный, и времени на самообразование у меня будет достаточно, но и матан там неплохо преподают.
Собственно, я уже примерно полгода как застрял на уровне книг "для начинающих". Я разобрался с классами, более или менее понимаю суть указателей и ссылок, немного могу в STL. И всё. Куда двигаться дальше? Сейчас я изучаю потихоньку SFML, ибо хочу вкатиться в геймдев, но понимаю, что на 2д играх далеко не уйдёшь. Пробовал вкатываться в трёхмерную графику, но там всё слишком уж сложно для меня, поэтому пока сижу на 2д.
Так вот, в чём суть. Что мне изучать дальше? Пытаться осилить книги "для продолжающих"? Или забить на них, и дальше изучать мультимедийные библиотеки, разбираясь с возникающими вопросами по мере их появления? Не знаю, что мне выбрать из этого, ибо боюсь, что слишком много времени потрачу на основы и не успею к концу учёбы поднять необходимые навыки, чтобы запилить что-нибудь достойное показа на каком-нибудь геймдев конкурсе или для получения работы, и буду поддерживать старые программы за копейки, или наоборот, слишком, устремлюсь вперёд в одном направлении, и буду писать говнокод из-за отсутствия необходимых навыков.
>>808288 >буду писать говнокод из-за отсутствия необходимых навыков. Ты его в любом случае будешь писать, это не то чего что стоит опасаться начинающему.
Единственный способ поднять уровень в такой ситуации — пилить проект.
Пацаны, ебать пиздатую шапку отгрохали! А это только на /pr такие финтифлюшки можно делать? Блииин! Как же круто!!! Я тут вот вообще зачем. Поступил я значит на ИТ-специальность. Насколько я знаю, начинают студентов учить как раз на крестах. Стоит мне что-то вкуривать заранее, чтобы выебываться? Или таких как я там будет половина потока?
Эгегей, ембджчики есть кто под арм пишет? Проблемы с передачей double в ... va_args выуживает мусор. Думал может стек не выравнен или еще какая беда. Оказывается почему то только 32 бита вытаскивает. Извернулся вот так volatile uint32_t d1 = va_arg(args, uint32_t); volatile uint32_t d2 = va_arg(args, uint32_t); volatile uint64_t d = ((uint64_t)d2<<32) | (uint64_t)d1; double dd = (double)&d;
но это ж не дело. С 64 битными целами то же поведение - 32 бита только читает, нужно два раза читать. Может флаг в опциях какой? cortex m4 c fp
>>808288 Вообще для игр очень популярен движок Unity. Но там нужно вроде C# юзать. Попробуй игры под Android писать например. Выучишь Java, а критические секции сможешь писать на плюсах (NDK)
>>808615 Unity популярен для домашних поделок мамкиных геймдизайнеров, а я хочу вкатиться именно в геймдев. Понимаешь? Не клепать модельки, а отрисовывать их. Не делать недо-скрипты для управления. Я не хочу делать игру на движке, я хочу пилить сами движки. Поэтому я пытаюсь вкатиться в плюсы.
Да и к тому же, если бы я именно учился бы делать игры, то пошёл бы в UE4. Ибо там C++ и офигенный визуальный язык или что там такое.
Посоны, есть задача: есть текст, нужно найти, сколько раз встречается каждое слово в нем. Меня интересует, насколько быстро может работать такой код. Я добился такой производительности обработки - 200МБ текста за 4.5 секунды. Т.е. 44МБ/с. Текст в формате utf-8, юзаю конкаренси.
Есть кто работал с Qt Widgets? Как в разметке формы сделать так, чтобы виджет занимал всё доступное пространство родительского виджета? В гугле искал - не нашел работающего решения. Ведь наверняка это как-то делается без костылей.
Делю весь файл на 8(или другое кол-во потоков) частей, обрабатываю их параллельно, результат собираю воедино. Сократил время работы в два раза с таким подходом.
>>808740 Твоя задача в идеале скейлится линейно. Другое дело, что там можно в скорость памяти/борьбу за кеш упереться. Если 8 потоков сократили время в 2 раза, то это очень странно. Либо слишком много потоков, либо у тебя тупо чтение с диска идёт.
Котаны подскажите пожалуйста как в экосистеме c++ реализовано подключение библиотек из githab под виндой? Пока я использовал кресты только для какой нибудь jni/opencv никаких проблем не было, так как в джаве есть maven/gradle и 99.9% что любая либа или даже фреймворк взлетит и будет подключена к проекту и время на подключение равно времени копирования из githab или maven central строки с зависимостью и вставлянию её в конфигурации системы сборки.
Теперь хочу приобщиться к крестам по настоящему, но для проектов посложнее примитивных нужны библиотеки. Меня интересует в первую очередь то, о чем никто нигде не пишет в мануалах, документации итд - какой централизованный подход принят при подключении зависимостей к проекту.
Текущая конфигурация - win 10-64(так исторически сложилось), clion. Допустим я нахожу либу, где система сборки иная - SCons. Щито мне делать? Качать очередную систему сборки, компилить, подключать библиотеку, юзать?
>>809220 >Качать очередную систему сборки, компилить, подключать библиотеку, юзать? Да. А вообще лучше сразу завендорить эту зависимость (руками конечно же).
>>808619 >Я не хочу делать игру на движке, я хочу пилить сами движки Тогда собирай команду, хуле. Но только лет через 3-5, когда наберешься достаточно опыта в собственно программировании.
Хелп, анон. Если вкратце, я разрабатываю редактор кода (с подсветкой синтаксиса html, css, php, js и подсказками к этим языкам) на qt.
Возник такой вопрос, по поводу подсказок при вводе. Мне нужно каким-то образом хранить тысячи ключевых слов и функций и потом, при каждом изменении пользователем кода в текстовом поле, находить подходящие и выводить в подсказку. По началу я думал просто занести все ключевые слова и функции в файл и потом его перебирать, например пользователь набирает "cla" - программа ищет в этом файле все, что начинается с этого и выводит в подсказку. Но это выглядит не очень оптимизировано, т. к. в php тысячи функций и их находить в одном файле, при каждом изменении кода - я подозреваю будет медленно.
Предложите, пожалуйста, какую-нибудь хорошую концепцию для хранения и поиска нужных ключевых слов/функций.
>>809794 >По началу я думал просто занести все ключевые слова и функции в файл и потом его перебирать Во-первых, если ты не хочешь чтобы на каждую итерацию автокомплита уходило по 2 секунды - нужно всё держать в памяти. >Предложите, пожалуйста, какую-нибудь хорошую концепцию для хранения и поиска нужных ключевых слов/функций. Авторы бд всё придумали за тебя уже хуй знает сколько лет назад, загугли бинарные деревья поиска.
Подскажите, как можно неаризовать систему сигналов. Ну, допустим, у меня есть объект. У него возможно есть метод. Если он у него есть, то он вызывается. object.SendSignal("foo");
>>809888 >Держать в памяти >бинарные деревья поиска Ты имеешь в виду при запуске программы все эти тысячи функций загружать в контейнеры set/map/qset/qmap, а потом при помощи регулярных выражений выбирать все что начинается с того, что ввел юзер и выводить в подсказку, тогда скорость мгновенная будет? Или есть варианты лучше?
>>810201 У меня, к сожалению нет овердохуя часов на чтение левых книг. Сейчас итак читаю несколько. Я спрашивал, что конкретно лучше юзать для этой задачи - хранения и поиска большого обьема текста - базы данных sql, или контейнеры Qt/STL, или файлы.
>>810226 да я сейчас просто и так несколько книг параллельно читаю, еще одну не осилю одновременно. Просто хочу конкретно понять и читать уже непосредственно про то, что юзать для этих задач
>>810209 Естественно контейнеры. Читать файл при каждом вводе на несколько порядков дольше (оперативная память нужна именно чтобы так не делать). Из контейнеров выбери такой, где поиск за логарифм, типа set (который реализован как раз на дереве)
>>810291 Иди и сделай бенчмарк поиска там и там, какие проблемы? Алсо, в Qt все контейнеры куда более удобные и адекватно реализованные (не то что стандартные стльные, "стондарт ни горонтирует, разработчик хуй кладёт").
Вообще, у тебя есть куча кода для изучения – исходники того же КультяпКреатора.
Анон, хочу написать машрутиризатор своими руками. Ладно, шучу. Кейс примерно такой (смотри картинку) Итак, есть, например, 3 воркера, которые посылают запросы на условный target сервер (зеленый круг). Запрос идет в формате обычного restAPI, то есть [https://example.com/user=1&option=2] [https://example.com/user=2&option=3] [https://example.com/user=2&option=4] 1. Запрос выполняется исключительно по защищенному соединению. 2. Ответ в JSON формате. 3. API не передает никаких индификаторов тго, кто запрос послал, поэтому возвращенный ответ по телу идентифицировать нельзя.
Соответственно я пока не придумал, в какой момент генерировать запросы, но идея такова.
1. Worker генерирует запрос в формате выше 2. Передает его в Proxy Controller 2.1. Proxy controller присваивает отдельный прокси 2.2. Выполняет запрос. 2.3. Получает ответ. 3. Передает ответ одному из Worker'ов, например, через Load Balancer.
Теперь собственно вопрос - куда гуглить? Есть ли какие-нибудь библиотеки, которые позволяют это сделать менее болезненно? Какие варианты вообще существуют.
>>810325 Ну вот например физика. Столько есть годных вариантов, которые до зрелого уровня напильником годами доводили. Неужели кто-то будет свою физику с нуля пилить. Кучу шишек набьешь, в итоге изобретешь велосипед, по-моему.
>>810336 Физический движок не обязательно писать. А вот реализовать концепцию которая есть в паре закрытых продуктов (как мультитрединг в движке naughty dog например) – всегда полезно.
>>810571 никогда не пользовал хуеты из с++ большей чем просто си с классами. что я делаю не так? смотрел в код C# дрочеров со всякими предикатами и linq хуинq асинк поебень и тд и тд. это вообще выглядит как другой язык. ЗАЧЕМ ВСЕ ЭТО? нужно просто си. с классами.
Бля, codelite какой-то странный. Интерфейс - кусок дерьма.
Чем пользуются сдешние хацкеры? Слышал про vim/emacs, но я так понял, что этого мало...
Если я ёбну codelite, можете назвать годный набор джентельмена, без всякого лишнего дерьма? Тот минимум, который должен быть у каждого уважающего себя кодера?
>>808288 Школьник плес, хватит ересь нести. Хочешь гд, пиздуешь в /gd. > немного могу в STL Исходники читал или как? Посмотрел что умеет вектор? Знаешь как происходит выделение памяти в том или ином контейнере? > Я разобрался с классами Узнал что значит паблик, приват, протектед поля или что такое виртуальные функции, а понял, знаешь название парадигм? Ох лол, люди годами разбираются во всех тонкостях ООП, дизайне классов и прочем. А ты у нас индиго, за годик и уже сток всего умеешь. > суть указателей и ссылок Уверен, что ты понимаешь на уровне. УКАЗАТЕЛЬ ИНИЦИАЛИЗИРУЕТСЯ АДРЕСОМ ПЕРЕМЕННОЙ или чет тип такого. Если я задам тебе вопрос, что такое утечка памяти, то ты обосрешься.
В этом проблема детей типа тебя и вам подобных. Прочитал про типы данных/ссылки/указатели/основы ООП вы уже думаете что все, потолок. Хотя даже вопрос, что такое this, зачем ставить const в методе или как перегрузить оператор поставит тебя в тупик. Офк ты не можешь в template metaprogramming, не знаешь новых стандартов, не можешь написать свой аллокатор(ты даже не знаешь что это такое скорее всего), алгоритмы, ub, потоки, красно-черные деревья, паттерны, структуры данных(ты даже не поймешь отличие вектора от листа). И все что я перечислил, это можно сказать только начало твоего увлекательного пути к совершенствованию байтоебства и еще меньшему пониманию ООП и с++. Если просто, то делай свои проекты, не важно что. Главное кодить как можно больше. Не надо боятся говнокода, на твоем уровне ты все равно ничего не поймешь.
Про юнити ты нес хуету. Движки делают супер кодеры, ты таким никогда не станешь. Поэтому сможешь только быть макакой. Но не волнуйся, скоро ты поймешь, что в с++ для тебя нет места, т.к. ты самонадеянный уебок, без скиллов, но думающий что он все может. мимо изучаю с++ 2 недели
А я никак места не могу себе найти, чтоб сесть и почитать того же Бишопа или Липмана. Разве что на улице изучаю "Конкретную математику" 3 года гумманитарного вуза дают о себе знать, так что нужно приводить свой мозг в порядок, а то он зависает на сложных задачах
Вот завтра домой поеду - мб там обстановка получше.
А у тебя всё получится - я уверен. Интересно будет пересечься с тобой в будущем. Желаю удачи
>>810796 >Исходники читал или как? Да, эти http://libcxx.llvm.org/ > Посмотрел что умеет вектор? Что именно я должен был там посмотреть? > Знаешь как происходит выделение памяти в том или ином контейнере? allocator::rebind и прочее уродство
> Узнал что значит паблик, приват, протектед поля или что такое виртуальные функции Зачем разбираться, я это сразу знал. > знаешь название парадигм Метапрограммирование. > Ох лол, люди годами разбираются во всех тонкостях ООП, дизайне классов и прочем. Говноеды, сэр. > А ты у нас индиго, за годик и уже сток всего умеешь. Да, сейчас дочитываю Concurrencry in action. Месяца не прошло с того, как начал учить цепепе.
> Хотя даже вопрос, что такое this Интересно, что ты сам ответишь, лол.
> Офк ты не можешь в template metaprogramming На базовом уровне (enable_if и т.п.) могу, а бОльшее не нужно помнить. Главное, знать, где подсмотреть. > не можешь написать свой аллокатор Аллокаторы не нужны, PMR рулит. > красно-черные деревья Сам-то ты хуй по памяти напишешь. > ub Сам-то ты undefined от unspecified не отличишь.
>>810807 Половина твоих ответов на уровне ТЫ САМ ТО ХОТЬ ЗНАЕШЬ, А?. Хотя я спрашивал базовые вещи 90% того что я спрашивал есть в Страуструпе. Ты говоришь аллокаторы не нужны, что ООП это просто и вообще хуйня. Я ору с тебя просто. Ты даже про указатель this не знаешь. Бля, ты не знаешь че такое this, но знаешь ООП ))). И при этом, ты можешь в шаблонное метапрограммирование. Ох вей. > знаешь название парадигм Я имел ввиду ООП парадигмы. А то что ты назвал можно включать в подъязык с++, я имею ввиду. Си, ООП, STL, с++ с шаблонами Так говорил Мейерс, офк ты лучше чем он. > Говноеды, сэр. Нет смысла комментировать даже. > На базовом уровне (enable_if и т.п.) могу, а бОльшее не нужно помнить. Главное, знать, где подсмотреть. На уровене хеллоуворлд, я так же хаскел знаю. > Аллокаторы не нужны, PMR рулит. Бля. Ну подрастешь поймешь. > Да, эти http://libcxx.llvm.org/ БЛЯ, Я ТАК ОРУ С ТЕБЯ. У тебя есть компилятор, а ты с сайтика чет смотришь. Ну очевидно, что твои слова правда.
Алсо, львиную долю мною написанного ты пропустил. Поэтому можно сделать вывод, что ты даже про перегрузки, утечки памяти ток слышал, но не видел и не понимаешь. Думаю особого смысла нет что-то говорить тебе. ЗНАЮЩЕМУ ПОНИМАЮЩЕМУ ВСЕ ПАРАДИГМЫ С++, ВКЛЮЧАЯ ШАБЛОННОЕ МЕТАПРОГРАММИРОВАНИЕ, ООП И ПРОЧИЕ, НО НЕ МОГУЩЕМУ В this->. Как бы я показал тебе твой потолок. КНИЖКА С БАЗОВЫМ СИНТАКСИСОМ.
>>810807 Толсто. Concurrency in action за месяц на не освоишь, даже если нонстоп по 10 часов в день ебашить будешь. Memory ordering - оно такое.
Либо ты толстишь, либо ты толстишь, потому что будь ты таким умным, не задавал бы вопросов про "шта мне учить дальше". А так, вниманиеблядь незаметна, конечно. Съеби.
>>810874 > Concurrency in action за месяц на не освоишь В среднем ~50 страниц в день. При этом никаких "10 часов" и "ебашить". Вперемешку со скроллингом двачей и прочими делами.
Тогда вопрос: в QML можно реализовать progress bar, который работает по времени? То есть я ему отправляю в конструктор 2 QTime объекта (начальное и конечное время), а он сам будет расчитывать сколько степов ему нужно сделать в минуту, чтобы к конечному времени оказаться в конечной позиции. Пикрелейтед - вышеописанное, но на виджетах.
>>810833 >Половина твоих ответов на уровне ТЫ САМ ТО ХОТЬ ЗНАЕШЬ, А Ну дак потому что ты не знаешь нихуя, а до меня доебался.
> Ты говоришь аллокаторы не нужны Конечно. Я тут недавно скидывал ссылку на видео, где Александреску рассказывает про происхождение аллокаторов: это был костыль для памяти с сегментацией, во времена DOS. В стандарт аллокаторы вошли по инерции.
Т.е., конечно, настраиваемые выделятели памяти нужны, но в том виде в каком они есть в C++ — не нужны.
Благо, в 17-м стандарте уже будут pmr (про которых ты нихуя не знаешь).
> Ты даже про указатель this не знаешь. Потому и спросил, что ты сам ответишь, т.к. знал, что ты обосрёшься и назовёшь this указателем. Ну, раз это указатель, то: 1. Как я могу взять адрес этого указателя? 2. Как я могу присвоить ему что-нибудь?
> ООП это просто и вообще хуйня А что, не так, что ли? ООП это не лемма Йоннеды, это банальщина.
> Бля. Ну подрастешь поймешь. Даже консервативный по самое немогу комитет стандартизации собирается наконец-то включить в стандарт нечто лучшее, чем аллокаторы, а кто-то настолько тормоз, что до сих пор верует в их нужность.
> На уровене хеллоуворлд, я так же хаскел знаю. На более продвинутом уровне редко когда нужно. Если только не шаблонное метапрограммирование ради шаблонного метапрограммирования.
> У тебя есть компилятор, а ты с сайтика чет смотришь. Даун, ты отличаешь компилятор от стандартной библиотеки? А ссылку я дал чтобы указать, какая у меня стоит реализация stdlib.
> Алсо, львиную долю мною написанного ты пропустил. Для тебя, тупого говна, того количества вопросов, на которое я соизволил ответить — уже слишком большая честь.
>>811079 >Овер 100 страниц в гугле скандируют сишный велосипед. Откуда столько долбоёбов, употребляющих слова, не зная их смысла? Через пост в цепепе-треде "костыль" или "велосипед". И везде не в тему.
Идиот, "велосипед" — это когда ты сам реализуешь что-то, что мог взять готовое.
>>811079 > На sprintf студия отвечает error C4996: 'sprintf': This function or variable may be unsafe. Во-первых, есть, как ты, идиот, выражаешься, "велосипед" под названием snprintf. Во вторых, какое тебе дело до кукареков студии? пусть кукарекает, что с неё взять.
Ах, да. Сейчас тебе насоветуют флагов в stream запихать. Желаю тебе хорошей производительности, со стримами-то.
>>811038 >Т.е., конечно, настраиваемые выделятели памяти нужны Как ты завертелся на сковородке. "Выделятель памяти" - это и есть аллокатор. То, что со временем у них поменялся интерфейс, не делает их не аллокаторами. Школьник и есть школьник, спартак - чемпион, а аллокаторы не нужны, PMR рулит. Лишь бы спиздануть какой-то тупой лозунг. И тире длинное на дваче не забыть - ведь как же иначе. Ты животное тупое.
>>811103 >Как ты завертелся на сковородке. Тупое говно, я в первом посте написал, что pmr нужно. Кстати, смотрю, ты, тормоз, наконец узнал о них. Оказывается, ты не настолько туп.
>"Выделятель памяти" - это и есть аллокатор. Не маневрируй, тупое говно, ты не в /po/. Аллокатор это то кривое нечто, что есть сейчас в стандарте под названием std::allocator.
> Школьник и есть школьник Я так понял, у тебя совсем аргументы кончились, если ты так открыто перешёл на личности.
>>811109 Ты написал, цитирую: "Аллокаторы не нужны, PMR рулит.". Т.е. аллокаторы не нужны аллокаторы нужны. Зачем ты это написал? Просто чтобы выебнуться. Потому что ты тупой школьник. >Не маневрируй, тупое говно, ты не в /po/. Аллокатор это то кривое нечто, что есть сейчас в стандарте под названием std::allocator. А у тебя что? ВЫДЕЛЯТЕЛЬ ПАМЯТИ. Не подскажешь, как это по-английски будет? Уж не memory allocator ли? >Я так понял, у тебя совсем аргументы кончились, если ты так открыто перешёл на личности. Аргументы по поводу чего? Это был мой первый пост ИТТ. Пафос моего поста в том, что ты тупое животное, а с животным и обсуждать нечего.
>>811116 > Т.е. аллокаторы не нужны аллокаторы нужны. Это только твоя интерпретация, идиот.
> А у тебя что? ВЫДЕЛЯТЕЛЬ ПАМЯТИ. Этим я подчёркиваю, что всё, что нужно делать — это выделять память. Если ты, даун, когда-нибудь доберёшься до std::allocator, то увидишь... хотя нет, не увидишь, ты слишком тормозен, а это скоро будет deprecated, а потом удалено. Тогда так: если бы ты хоть раз смотрел на std::alocator, то заметил бы несколько идиотских вещей, вроде функций construct и destroy. Каким боком конструкция и деструкция к выделению памяти — ХЗ. Поэтому выделятели памяти нужны, а аллокатор — нет.
> Зачем ты это написал? Просто чтобы выебнуться. Ты — типичное быдло. Если кто-то знает что-то, что не знаешь ты — значит он "выёбывается". Если твой потолок это знать, зачем нужны модификаторы доступа, то всё, что дальше этого — это выебоны. Пиздец.
> Аргументы по поводу чего? Вот я о том и говорю — что у тебя нет ни по какому поводу аргументов. Только "да ты шкальник!111"
>>811191 Видел его отключение в бенчмарках уровня "посчитать количество слов" и последующий профит на 0,2 с, на практике слабо представляю проблемы с перформансом это этого.
>>811147 >Это только твоя интерпретация, идиот. Нет, твоя. Вот ты пишешь: >Поэтому выделятели памяти нужны, а аллокатор — нет. Т.е. поэтому аллокаторы нужны, а аллокатор - нет. Ты в курсе вообще, как слово allocator с английского переводится? Или то, что аллокаторы есть в любом языке, а не только в С++. Тебе похуй, потому что все, что тебе нужно было сделать, это громогласно заявить на фразу "ты попробуй напиши аллокатор" - аллокаторы не нужны, потому что школьник-нигилист предпочитает громко спиздануть любую хуйню лишь бы громко, и показывало, какой он нитакойкакфсе. Нормальный человек бы написал, что "интерфейс std::allocator в скором времени будет deprecated". Только из этого не будет следовать ничего, кастомные аллокаторы как писали, так и будут писать. В моем последнем проекте аллокатор для CUDA и OpenCL, например, вообще имеет нестандартный интерфейс для нестандартного контейнера, который умеет свопаться при определенных условиях. И что, это не аллокатор по-твоему. А, это ВЫДЕЛЯТЕЛЬ ПАМЯТИ. Бляя, сук, как же я проигрываю с этой хуйни. Я уже написал, что аллокаторы не нужны, поэтому, чтобы не соснуть, я придумаю ВЫДЕЛЯТЕЛЬ ПАМЯТИ. Пощади, молю.
>>811239 Да было б из зачего. Там какой-то нервный на анона (типа школьника) сходу жестко наехал, хотя тот просто вопросы задал. Видно какую-то струнку зацепилу у ущербного...
>>811243 А моча не трет тут? Я из саентача залетный, там моча трет споры про определение N. Просто некоторые аноны не понимают как запрограммировать инуитивную метаиндукцию с помощью которой разрывается логическая петля в аксиомах Пеано. Но за это банят.
>>811366 >работать с кучей Как обычно и как везде же. Отжираем по максимуму и используем эту уже свою кучу оптимальным для данной задачи образом. И нет, дрочить системные аллоки - это для безруких дебилов. Все просто.
Ананасы, если я щас на андроид запилю приложение на Qt Quick и выложу его в гугл плэй, то что мне могут сделать? И как они узнают, что оно было сделано с помощью Qt?
>>811386 >этот промахивающийся мимо постов плачущий ребенок Успокойся, все будет хорошо. >>811388 >Да при чём тут телеметрия? Значит десятка имеется. Всё ясно.
>>811400 С тобой всё ясно, залётышь, можешь не продолжать. Постыдился бы
>>811401 Я просто ожидал, что найду здесь более-менее адекватную доску, с людьми, которые нашли себе интересное занятие. А на деле - очередной филиал /b. Сук, единственный годный тред - ML. Пиздец, анон. Я всё
>>811424 Да. Я тебе задал конкретный вопрос - чем тебе не нравится fast_pool_allocator. Ты ответить ничего не можешь, а просто уныло ведешь беседу в стиле /vg/. Если тебе не нравится весь буст, тут два варианта, либо ты крестохейтер и тебе следует съебать из треда сосать хуйцы вместе с мамашей, или ты не в курсе, что в бусте обкатывается большинство вещей, которые потом стандартизирует. А fast_pool_allocator - идеальная штука в 2 строчки сделать контейнер, который не будет тормозить от частых выделений и освобождений памяти (любимый дроч у функциональщиков). Возможно он не самый быстрый, но точно самый удобный - определил параметр у контейнера и все.
>>811430 >в бусте обкатывается большинство вещей, которые потом стандартизирует Да, комитет именно такие пидоры и есть. Вот поэтому у вас и нет модулей. И не будет.
>>811260 лол еблан по постам пытается отличить двух а то и трех анонов: >>811408 но слово саентач вызывает у технобыдла предсказуемый батхерт. быдлану неуютно среди умных научных людей. пидорнули тебя оттуд небось, а, макака?
>>811452 Нет, мой профиль - биологическое старение. Вывод из организма калия-40. И прочие работы. Странно что макаки считают кого-то "подгоревшими". Если ты макака - ты уже подгорел автоматически. Неутно же тебе технобыдлу среди людей науки? Вот.
>>811456 >Вывод из организма калия-40. Ну что же ты, питардий. Очевидно что обо/сцай - это такой филиал /быдлятни с местным колоритом. Благодарю за иллюстрацию, кстати.
>>811457 >>811460 Ну пошутил, пошутил. Я же специально толстил - обиженка выше написал "саентач - значит дебил". Вот я и вспомнил про радиопидора и калий.
>>811464 >эти жалобные блеяния >саентач - значит дебил Благодарю за иллюстрацию. >>811466 >У кого - у нас? У тебя, например. >Что ты в этом треде забыл? Доказательство P=NP. Не находил случайно?
(Автор этого поста был забанен. Помянем.)
>>811472 >это мелкобуквенное кукареканье Крестьянин с обо/сцая as is. У тебя кефир стынет и теории относительности не опровергнуты.
(Автор этого поста был забанен. Помянем.)
>>811600 Всегда пиши его, Остальное тебе пока не надо знать. А еще везде где только можно const пиши, даже в таких случаях const Rational operator*(const Rational &lhs, const Rational &rhs);
>>811527 >Вроде умные люди Вниманиеблядь, рассуждающая об аллокаторах, не написавши ни строчки кода, и даун, который на него сагрился умными людьми не являются.
>>811607 Чем? У меня непрерывный фейспалм от его постов и охуительных условий. Единственное, в чем его можно похвалить, так это в полемике. Навык пиздежа с умным видом о том, о чем знаешь поверхностно, может пригодиться в /po/
>>811698 А вот все тот же не понимающий вопроса, не умеющий читать и гонящий хуйню. Я тебе ясно спросил - покаже где написано. А ты несешь хуйню про непонимание смысла. Ты же ебать тупой, ты даже читать не умеешь, что ты в этом треде делаешь вообще?
Вопрос от нюфага: Есть у меня некоторые структуры и небольшие методы в них. Как сделать чтобы эти методы гарантированно wait Уже нашел, не надо. Идите все нахуй.
>>811971 если понять еще как они работают Что они делают? Какая нахрен сумма елементов с негативным параметром? И почему она выдается в результате как массив?
>>812259 >>812258 Стандарт как раз нормальный, им именно что определено, что компилятор имеет право ебать подобные выражения в рот и программиста заодно.
>>812273 http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/ грубо говоря, оператор -- та же функция или метод, только называется, как называется. никто не запрещает сделать вот так: std::cout.print(outStream("raz", outStream("razraz", outStream("pssh")))); То есть << для объекта std::cout принимает параметром std::ostream&. Свободный оператор << принимает значение какого-нибудь типа в одной перегрузке и в другой перегрузке std::ostream& и значение какого-нибудь типа, и обе перегрузки возвращают std::ostream&.
>>812567 Там нет упражнения в котором нужно or или and. Там все упражнения про то чтобы сначала задать начально значения переменой, а потом по 1 уменьшать его или увеличивать пока оно не примет другое значение.
В чём разница между Qt 5.5 (700+ метров) и Qt Creator 3.5 (80 метров)? Какой качать своим говноинтернетом, чтобы и консольные приложения кодить и ГУИ когда нужно?
>>812519 У тебя не совсем верно написан тестовый пример. Он не отражает сути задачи.
В твоём примере ошибка в строке 25 (http://pastebin.com/MXAcGJLv). >while (! readers_count >= 0) can_read.wait(lock); Тут мы должны ожидать сообщения от can_read, только когда другой поток пишет.
У тебя используется значение -1. Но читающий поток это значение все равно никогда не увидит. Т.к. оно меняется в пишущем, захватывая мьютекс на всю операцию.
Твой while (! readers_count >= 0) получается вообще избыточен. У читающего потока вообще никогда не возникнет ситуация, когда он не может читать. Но никакого data race не случится. Т.к. на всю работу с файлом у тебя стоит мьютекс.
Вот и выйдет, что первым начнёт работать тот, кто быстрее залочил мьютекс во время создания потоков.
Братья, я начинаю понимать, что плюсы - это пиздец. Ребята, буду благодарен за помощь в моих вопросах, есть недопонимание и пробелы, которые я хотел бы заполнить. большими хуями
1) Есть тридва файластула: main.cpp, ClassName.h, ClassName.cpp. Соответственно, там лежит главный файл с main'ом, описание класса, реализация класса. В файле реализации - Classname.cpp, я подключаю только header-файл - ClassName.h, в header-файле, я вверх вставляю только такой код (защита от повторного включения) #ifndef __CLASSNAME_H__ #define __CLASSNAME_H__ #endif
Внимание, вопрос: как работает эта конструкция, и что за константа __CLASSNAME_H__? чему она равна? 2) Как из главного файла - main.cpp (в котором я подключил только header-файл ClassName.h я вижу реализацию данного класса? Почему я не должен подключать файл с реализацией с помощью директивы #include "ClassName.cpp"
Заранее, спасибо, ребята, если что пост большой, мог обосраться с разметкой.
>>813041 Дружище, подскажи дауну - я делаю как сказал >>813006 - пидор, и у меня выводится ошибка (не может достучаться до реализации методов.
Т.е. в хидере - только интерфейс, В цпп - только реализация, т.е. определена каждая функция через :: , соотв. в него подключил хидер В майн если только подключаю хидер, все накрывается медным тазом, но если еще и подключаю цпп, то все норм.
>>810833 >>811038 Среди этих двух спорщиков определенно прав второй. Даже если он еще в самом начале пути, он превзойдет первого в кратчайшие сроки, ибо движется вперед и, что важнее, делает это осознанно. Такие новички всегда превосходят догматичных и закостенелых гордецов.
>>813180 Я ж не Эскобар, среди этих двух долбоебов ИМХО школьник лучше, и потому победит. Но лучше бы всем тредом запилили какой-нибудь годный крестопроект, а не агрились друг на друга как псы цепные.
>>813006 >надо бы по-хорошему и в файл с реализацией защиту от повторного включения сделать? Если собираешься их инклудить, то да. Так удобно делать, чтобы быстро запилить прогу без проекта/мейкфайла - тупо заинклудить все cpp в main.cpp, и скомпилировать одной строчкой. >И вообще нахуй нужны .h файлы Чтобы линковщик смог соединить объектные файлы друг с другом. Каждый cpp файл компилируется независимо, и чтобы потом соединить их вместе, компилятор должен знать типы функций и структур, которые будут вызываться из других модулей. >можно было бы хуярить реализацию вместе с описанием, Запросто. Но тогда потребуется один объектный файл на всю программу. То есть достаточно крупная программа будет компилироваться каждый раз по несколько минут.
>>813326 Я уже выучил thumb ассемблер под арм, про что вы ебланы и не слышали. А я могу конвертить из кайла в гнусь легко. Циклы блять. Вот же маги тут собрались 30 летние.
Бля, может ты съебешь со своими лабами и задачками? В интернете куча реализаций. Думай сам когда ошибки, смотри че компилятор. Смысл, если анон тебе поможет? Ты так даже элементарного не поймешь. Например использование неинициализированной переменной.
>>813390 Ты не понимаешь, тебе нужно самому научиться разбираться в проблемах, искать решения и прочее. Ты можешь спросить в треде, как сделать хуйню_нейм лучше или какая реализация более подходящая, но никак не сделайте за меня, покажите мне ошибку и им подобное. В шапке даже сказано что тебе стоит пойти НАХУЙ, а также что делать если в проге ошибка. Алсо, если твой котелок совсем не варит, то берешь и останавливаешь программу на каждой строчке, где потенциально ошибка и смотришь что происходит. Дебажить по простому говоря.
>>813397 Ты что блядь совсем дебил? Что нахуй за позиция, НЕ НРАВИТСЯ НЕ СМОТРИ. Ты даже ошибки компилятора читать не можешь, на том же идеоне написано. error: 'z' was not declared in this scope while (z > x) Как это перевести на русский? Z, была не объявлена в этой области, грубо говоря, какие твои действия? ОБЪЯВИТЬ ЕЕ! Тут проблема не в ошибки, все ошибаются, тут нет ничего страшного. НО ТЫ БЛЯДЬ ЧИТАТЬ НЕ УМЕЕШЬ, ПРОСТЕЙШУЮ ОШИБКУ. Можно даже в vs кликнуть по ошибке он тебе строчку покажет. А если установить visual assist или resharper, то они даже за тебя исправят.
> Сам нюфагом был Я блядь читать умел, ошибки. Тебе же ясно написано. У тебя же не ошибка в шаблоне, которую бывает хуй прочтешь.
Пиздец кароче. У тебя с такой позицией нихуя не получится. Лучше язык меняй вообще, цпп не очень вариант для таких как ты.
>>813468 codecvt_utf8 при кодировании в wchar_t на винде дает неправильный результат. UCS там даже и не пахнет.
Плюс охуенные "текстовые потоки", которые по стандарту можно инстанциировать только с char и wchar_t(который на винде 16 бит) и нельзя с char16_t и char32_t так и добавляют кроссплатформенности.
Короче, думал, ща как в школке паскаль: один файл - одна программа. А тут на те: проекты, файлы проектов, цп.. Сложна, сложна блять... Ещё я хотел настроить vim c gcc, но он оказался ещё ебанутей креатора, так что пришлось остаться в IDE. Meh, короче
>>813509 Только char и u8"", wchar_t ненужен. char16/32_t — нужно (как настоящий тип, по которому можно перегружать), но не до конца понятно, где именно.
Почему, если одна функция принимает void, например <неважно что> g(void); а другая — возвращает void f(<неважно что>); я не могу устроить композицию этих функций g(f(<аргументы для f>)); ???
>>804519 (OP) Когда только вкатывался в программирование, учил с++. Так что классы, шаблоны, лямбды, умные указатели всё это примерно понимаю. Потом занимался питоном, жавой, шарпом. Сейчас снова надо вернуться к с++. Чего умного почитать посоветуете?
>>813571 Потому что формально g(void) не принимает void, а является полным эквивалентом g(), т.е. функции без параметров. Из-за этого void в принципе не может быть параметром, чисто синтаксически оно не распарсится так.
>>813586 Логика очень простая. Возврат void как полноценного типа оставили только ради шаблонов, чтобы можно было писать что-то вроде return f <T> (); А сценарии, в которых надо написать f(g <T> (...)) с void-функциями, встречаются гораздо реже (это вообще нечто странное - внешняя шаблонная функция должна быть грязной/методом, чтобы был смысл вызвать ее без параметров, но в то же время для нетривиальных аргументов шаблона она как-то должна использовать полученный аргумент), а поведение их - неоднозначно. Вероятно, поэтому такое и запретили. Другая причина - f (void) это C-совместимая часть (на крестах так вообще не пишут, f () короче), а когда это пилилось в C, полиморфизма, шаблонов и всей хуйни не было, и к типам отношение было проще, в духе "ну надо как-то обозначить отсутствие параметров, о, у нас void свободно, возьмем его". Все равно типы всегда были известны сразу, и было принято такое делить на отдельные инструкции, а не выебываться.
>>813596 >внешняя шаблонная функция должна быть грязной А ты соображаешь, я смотрю. Да, это отличная идея помечать грязные функции! Почему же C++ не позволяет принимать void? Как const у методов означает thread safety, так void в параметре функции означал бы, что она имеет сайд-эффекты.
>>813546 char и wchar_t нужны, но для совместимости - нельзя такое выбрасывать.
>но не до конца понятно, где именно В basic_string, basic_istream/basic_ostream и во всем, что связано с локалями (ctype, например).
>>813547 На него можно сослаться, как на стандарт C, например. А вообще нужно только добавить средства для доступа к символам строки, закодированной в разновидность utf. Да, будет доступ O(n) (или дополнительные O(n) по памяти), ну а другого решения и нет какбэ.
>>813598 >const у методов означает thread safety Схуяле? Пока работает const метод, может вызваться мутатор, и все, приплыли. >означал бы, что она имеет сайд-эффекты Небось на концептах можно будет такое сделать. Пока что есть friend-инъекция, можно помечать что угодно чем угодно, хоть и с еблей. Я сейчас пилю автоматические гарантии исключений, например.
>>813651 >И что делать, когда выйдет новый стандарт юникода, после того, как сослались на старый? То же, что и делают с C. Вон в 17 стандарте теперь ссылаются на C11 вместо C99.
>Забыл напомнить, что они неюзабельны, и, следовательно, ненужны. Ваши предложения? Концепция локалей нормальная, но тупо сделали, что хуйня портабельная. На разных платформах локали называются по-разному - вот где пиздец, как так можно было сделать, я хз.
>Вангую, чтобы локаль не подменили в другом треде во время вызова. Тоже так думаю. Только нахуя такое счатье, из-за которого производительность не масштабируется во времени? Хотя, Джоссатис пишет, что юзайте напрямую фацеты, когда хотите перворманса.
>>813655 >Концепция локалей нормальная, но тупо сделали, что хуйня портабельная. Это такой принцип развития C++: взять нормальную концепцию и сделать тупо.
Да, thousand_sep() возвращает char_type, должен const char_typr*. Ну там много подобного.
>>813688 1) size_t int n - два типа одновременно. То же самое для массива 2) size_t, j - запятая лишняя. 3) j += 1 - тут декремент нужен, а не инкремент.
Вообще, i += 1 - это как-то не по-нашему. Лучше ++i.
>>804519 (OP) Иногда один С++ заебывает, хочу почитать для развития что-нибудь про алгоритмы и организацию самих железок. Есть что-нибудь для ньюфагов, но без воды?
>>814068 Если какие-то опущенцы придерживаются небезопасных соглашений, то это не значит, что нужно повторять за ними. Показывай авторитетный стайлгайд в качестве пруфа или молчи вечно.
Думаешь, такой, разбираешь пример, но у тебя не получается объяснить некоторые моменты, которые вводят тебя в заблуждение. И тут ты срываешься, хочешь идти писать на борде, мол " что это за хуйня ", но понимаешь, что тебя начнут гнать палками как нюфаню и тут... Приходит озарение, тебе как-будто открывается истина и до тебя доходит вся суть того, над чем ты ломал голову пол часа.
>>814099 > опущенцы придерживаются небезопасных соглашений Опущенец, это предполагает std-либа в отношении тех классов, которые ты ей подсовываешь.
> Показывай авторитетный стайлгайд > авторитетный Тупое быдло с зековской психологией не думает, оно опирается на афтаритеты. Ну ладно, я терпим к недостаткам людей и к быдлу и могу дать ему ссылку на авторитет https://herbsutter.com/2013/05/24/gotw-6a-const-correctness-part-1-3/
>>814662 >>утверждает, что константность метода означает потокобезопасность >>пруфает анрилейтед статьей про разделяемые константы
Цитата из "анрелейтед" статьи > Concurrent const operations on the same object are required to be safe Чуть ли не буквально первая строка твоего гринтекста.
Ты, видимо, просто английского не знаешь, вот и не понял.
Котаны. Кто-нибудь может показать хорошую реализацию кортежа? Знаю есть в бусте и turple в stl. Но в stl читать не могу, слишком нуб, а буст юзать не хочу ну и прочитать тоже не смогу.
Мне вот тут интересно стало, сколько же бабла этот плешивый пес поднял на свои ссаных книжульках, где он на тысячах страниц копипастит одни и те же примеры: "как создать класс", "как создать функцию", "пишем калькулятор"? Ей богу, при всей сложности плюсов, это самый примитивный и недоразвитый язык с т. з. пользователя.
>>816402 Ах да, самые тупорылые презентации у страуструпа, саттера и мейерса, три старых клоуна-гомоске блять. Еще и этот хуй со своими патлами седыми. Зашел посмотреть что там новенького в плюсах на каналы какой-то конфы 2014-2015, воз и ныне там, мастодонты показывают как создать переменную, лямбду, метод и прочее капитанское говно по полтора часа. Пиздец, приплыли. МЫ ЖЕ БОРЕМСЯ С КОМПЛЕКСИТИ. Даже на WWDC такой хуйни нет, там только по 20 минут намекают на новое апи, а потом дырявые аплодируют когда оно появляется на экране.
>>816402 >недоразвитый язык Ей богу, не хотел оскорбить местных бичар, только хотел сказать, что прочитав книгу 1000 страниц по С++ ты научишься читать строку из файла, применяя аж целую СТАНДАРТНУЮ БИБЛИОТЕКУ и ИТЕРАТОРЫ и АЛГОРИТМЫ! А после первого туториала по питону или какому-нибудь еще говну уже можешь сделать твиттер, онлайн магазин и фейсбук. Ну вы понели. Я вообще не знаю нахуй я сюда это пишу, я вас обмудков и за людей то не считаю, лол.
Блядь, все всё поняли. C++ сосет хуй, страус дебил и нихуя не умеет. R, D, RUST и прочая хуйня убийцы C++, он нигде не используется. Порог вхождения большой, функционала мало. Надо осилить овер 9000 страниц, чтобы написать свою первую шаблонную функцию, которая складывает 2 переменных. Теперь можешь сходить нахуй, вас тут таких каждый третий.
>>812654 >C++ реально используется? Я на мобилах использую. А так — нигде, мертвое говно, нинужно. Двачедауны из этого треда 100% не пишут ничего на плюсах за деньги, готов на это квартиру поставить. мимо хейтер всего живого
>>816408 Пошел нахуй пидор гнойный, в глаза ебешься или просто тупой блять? Я тебе про фому, ты мне про ерему, мне на тебя похуй, на твой ебучий си++, на твоего анального бога страуструпа, раст, ди, р и прочее говно. Я эти базворды в резюме писал когда ты похапе осваивать начал. Мозги включи, мудень ты педальный, я где-то написал что у меня проблемы с изучением си++? Или что мне его надо изучать? Я поднял конкретно один вопрос — страуструп лох, его книги самые тупые, самые дорогие, а презентации самые уебанские. Одно видео рича хикки заводит больше, чем все, что высрал труп страуса за всю свою жизнь. Я жалею 1200 рублей, за которые я купил С++ что-то там этого пидораса в две тысячи каком-то году. Просто тогда все дрочили на эту парашу и без бумажной книги было не тру.
>>816410 Ах да, еще ваша съебавшая через пизду за бугор аленка си++ с ванькой который душил питона и перекладывал бумажки в хуяндексе, блять, два гениальных программиста, на зарплате офисное кресло пропукивали, удалите нахуй этот говноблог из оп-поста, стыдно смотреть.
>>816410 Конечно страуструп тупой хуесос без навыков. Какой-нибудь школьник в треде уже пишет лучше чем он и излагает материал проще/понятней. Он же всего лишь создал С++, стал первопроходцев в ООП. Так по хуйне. Предлагаю всем хуесосить его, нихуя в жизни не достиг. Пердун старый блядь.
Я укатился, обтекайте, пидорахи. Нюфаги, не учите это говно, реально мертвая хуйня. Чтобы получить профиты от плюсов надо быть сам себе режиссером, вам этого на первые лет пять не видать, да и не каждому хочется. Драйв и движ только там, где много людей и клиентские бабки есть — сейчас это мобилы. Для души ебитесь с фп.
Можно ли QPersistentIndex передавать аргументом в другой класс? Скажем, есть таблица, а есть виджет для редактирования содержимого клеток. Могу ли я во второй передать этот индекс и оставить его там? Или будет бобо если в табличке что-то поменяется?
Сап, аноны. Хочу установить эту вещь(Qhttp) для создания своего http сервера на qt, вот ссыль: https://github.com/azadkuh/qhttp Установка запарывается на этапе qmake. Возникает ошибка "Unable to generate UUID" гугл по этой теме результатов не дал. Может я что-то криво собираю? Работаю на винде. Добавил qmake в Path. Версия qt - 5.7 или для корректной работы qmake нужно сделать что-то еще?
Сап, будущая студенота, первый курс. Что лучше прочитать, если я уже знаю базовые принципы программирования? 1. Страуструп 2. Рао "Освой с++ самостоятельно"
>>816843 Главное осваивай ООП, шаблоны, stl. Офк ты можешь прочитать 1000+ страниц книги для новичков. Но ты же уже знаешь их). Поэтому решай всякие задачки. Например сортируй векторы лямбдой, напиши свою структуру данных (словарь, стэк, вектор), простенькую игру. Лучше учи алгоритмы и паттерны. А вообще ты пиздоглазое мудило и я ебал твою мать, в шапке все написано.
Решил почитать Страуструп "Программирование Принципы и практика с использование с++" Все шло гладко, пока не дошел до главы, в которой описывается работа с интерфейсом, а именно с библиотекой fltk. Уже четыре часа я с ней бьюсь и не могу запустить проект. Сделал все, как описано на сайте http://www.c-jump.com/bcc/common/Talk2/Cxx/FltkInstallVC/FltkInstallVC.html Вот скрин выполнения, кодировка в ошибках меня пугает. IDE msvs 2015. Выручайте господа, я уже в отчаянии.
Мде ребят, я тут охуел уже от кучи скобок, точек с запятой и базовых функций для хеллоу ворда и калькулятора, а так же завис от .... девелопер уровня - векторных просчетов и матриц... А индиги выше уже вкатываются в убийцы Crysis ( Warhead, 2, 3 ) И прочие шляпы. Дохуя блять умные, а гуманитарный вуз со второго курса мозги очень сильно разжижает отсутствием матана и вообще какой то практики. Я в этом плане с 23 уровня деградировал.
Сука, убивал бы за перегрузку арифметических операторов, делающую не то, что от неё ожидается. Написано умножение, а на самом деле нихуя не умножение. Три часа баг искал.
На крестах можно сделать всё что угодно? Как сделать прогу которая включает чёрный экран на телевизоре при нажатии какой-нибудь кнопки на пульте, но звук при этом не отключает? Где вообще про программирование для телевизоров пишут?
Посоны, в программинге недавно. Поясните за такую хуйню: Вот есть у меня устройство. Для него установлен официальный драйвер. Хочу использовать этот драйвер для управления устройством, потому что официальное приложение неудобное, а аналоги платные. Суть в чём, как мне использовать хуйнейм-драйвер? Нихуя гугл не помогает, везде статеечки как НАПИСАТЬ драйвер, но я это в рот ебал, мне нужно готовый использовать
>>818005 Этот вопрос решается на стороне телевизора. Тебе нужна его прошивка, которой нигде не будет. Теоретически её можно сдампить, а дальше долбить её дебагером.
>>818053 Если разработчик не дал никаких официальных API для работы с его драйвером, то ты никак не сможешь его тыкать напрямую. Твой выход - реверс протокола. Сначала погугли, вероятно кто-то уже всё отревёрсил и тебе осталось взять только нужную либу. Если нет, то ставишь сниффер на тот вид связи что у железки. Смотришь пакеты и выстраиваешь принцип работы.
Дочитываю книгу из раздела "для ньюфань" из оп поста.
Уже не терпится написать что-нибудь полезное. Придумал для себя удобный "менеджер задач".
Так вот в чём вопрос. Стоит ли прямо сейчас читать книги из следующих разделов (Скотта Мейерса и т.д.) или лучше сейчас попробовать так поковырять, а потом вернуться к теории?
>>818070 >Этот вопрос решается на стороне телевизора. >Тебе нужна его прошивка, которой нигде не будет. >Теоретически её можно сдампить, а дальше долбить её дебагером. Покажи книгу которая научит
>>818079 К сожалению в ревёрсинге я не силён. Занимался им только на базовом уровне.
Попробуй посмотреть в сторону крякинга. Там ты получишь нужные базовые знания инструментов, асма и принципа работы программ. Конечно тебе нужны знания ассемблера, причём на твоём тв он, вероятно, будет несколько другим.
>>817999 >Сука, убивал бы за перегрузку арифметических операторов И ещё так убого сделанную. Не могли сделать как в хачкеле, чтобы можно было делать свои операторы и задавать им приоритет и ассоциативность
Как отвязать vs2015 от версии винды? Версию фреймворка при сборке поставил 3.5, потыкал все что только нашел - все равно на батином ноуте с неапдейченной семеркой не запускается (ошибка при запуске 0xc000007b). говноедская студия ненавижу блядь сука сука
Пиздец аноны, хелпаните. Начитался всякого говна из шапки. Хочу что-то делать, но не знаю что. Может найти какой-нибудь опенсорс, где меня будут учить, а я буду прогать для них за спасибо? Куда дальше развиваться? Что можно делать?
>>819344 На самом деле он писал какой-то йоба проект и несколько тредов назад закончил. Потом нажал кнопку компилировать и до сих пор ждёт пока компиляция завершится.
Исходники в UTF-8, пикрелейтед хуита. В убунте на кодблоке все с кириллицей нормально. Если перевести через какой Sumlime в виндокодировку, все сразу в MVC ок, но какого хуя там должна быть виндокодировка в 2015й то версии?
Что-то ОП не подоспел и конкретно охуел не способен в перекат ОП-хуец дегенерат Наконец-то кое-как Мы решились напустяк Запилили тред мы новый Аутируя как совы А точнее как сычи Братья-боги крестухи
И пасту заебеньте с перекатом, может ОП воскреснет к след. треду.
Читаю о виртуальных методах и появился вопрос (не связанный, впрочем, с виртуальными методами напрямую).
Есть у меня объекты Класс и Сабкласс, но храню я их всех в массиве с типом Класс. Как мне в лупе понять, какого именно класса объект и сделать с ним какие-то действия, кроме проверки dynamic_cast'ом? Возможно ли это, если у базового класса нет виртуальных? Или в этом случае и компьютер даже не в курсе, что там объект другого типа, т.е. на стадии компиляции уже всё закрепляется?
То есть, что-то такое: MyClass a; MySubClass b; MyClass •arr[2] = {&a, &b}; for (int i = 0; i < 2; i++){ if (type(arr) == MyClass){ arr->baseMethod() } else if (type(arr) == MySubClass){ arr->subClassDataMember = 20; } }
Я понимаю, что так делать не стоит и нужно менять архитектуру приложения, но никакого приложения нет, просто возможность интересуют.
>>820859 У базового класса может не быть чисто виртуальных (pure virtual) методов, тогда ты сможешь создать объект этого класса.
Если есть чисто виртуальные методы, то тогда ты просто не сможешь сделать объект базового класса, т.к. в таблице вирт. функций у тебя не будет реализации этого метода.
Проверить является ли класс базовым или наследником без всяких изъёбов можно только через dynamic_cast. Но ты в любом случае не сможешь обратиться к данным/методам наследника, если работаешь с базовым.
Я бы тебе пару примеров накидал, но мне пора на вёсла.
>>820869 Не, чисто виртуальные я ещё не трогал (главу не до конца дочитал, лол).
>Но ты в любом случае не сможешь обратиться к данным/методам наследника, если работаешь с базовым. Да, про это я что-то забыл. А как-нибудь можно затайпкастить там, но с сохранением данных наследника? Просто (MySubClass)•arr не сделать же, потому что вызывается конструктор MySubClass(const MyClass *o), ну и очевидно, что из объекта o не достать subClassDataMember, потому что проблема что до каста, что внутри конструктора одна и та же.
>>820877 Плохо понял о чём ты. Тебе ничего не мешает кастовать указатель. Можешь гонять его как тебе удобнее. static_cast или dynamic_cast.
https://ideone.com/Q3qnZv Вот я сохраняю и меняю данные наследника. Менять данные напрямую вообще не очень хорошо. Всё желательно делать через методы. В качестве исключений могут быть простенькие структурки с каким-то простым набором данных.
>>820932 Чёт я тебя слегка дезинформировал. Используй dynamic_cast, когда тебе нужно проверить возможность каста. Или тебе нужно обыграть это. Короче, dynamic_cast для runtime.
static_cast для compiletime. В любом случае используя static_cast, ты должен быть уверен что такое преобразование возможно.
Поседевшие пальцы
Собирают пердак.
Старший брат:
Предыдущий:
TL;DR
Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов
простреливания ногирешения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искусственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполне возможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Эти фичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Best practices
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все:
Проектирование
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Кроме того, на ангельском доступны стандарты C++11, C++14, а также последняя версия черновика стандарта C++17.
Тонкости языка
Книги для тех, кто возлюбил кресты всей душой и желает углубиться в детали:
Отдельные аспекты
Читать по необходимости:
и других фич последних стандартов
для разработки многопоточных приложений
остальным частям стандартной библиотеки
язык программирования, чтобы ты мог
программировать, пока программируешь"
в ужас даже исходники boost::MPL
на C++. Для его чтения не нужно знать
мертвые языки, в отличие от этого вашего Кнута
https://goo.gl/yDuQgG (часть 5)
Другие обучающие материалы
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три
Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:
Софт и библиотеки
Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
https://goo.gl/WIPW9L (ангельская версия)
"sudo aptitude install codelite codelite-plugins"
для установки под *nix
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использовать текстовый редактор в связке с каким-нибудь компилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература:
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Литература:
https://goo.gl/toUDWc (исходники примеров)
https://goo.gl/qpkZFm (книга) +
https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
И еще куча библиотек на любой вкус.
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Предыдущие треды на архиваче
Старые ненумерованные треды
Отдельные Qt-треды