На фирме "GalleySollution" Однажды случился обвал... На баги, фреймворки сырые Мой верный товарищ упал...
Скажи мне, Галера Крутая, Ужель это смерть настает? Я молод, а где-то работа Меня в Калифорнии ждет.
Но вышел приказ из конторы -- На помощь спускаться не сметь! Сказал управляющий людям Нет дела до этого мне. За смерть С++-ОПа-поэта Я выдам полтинник жене...
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:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Чтобы вкатиться в Qt без знаний плюсов, достаточно будет прочитать книгу для нюфань по плюсам(Страуструп) и потом уже целенаправленно читать книги по Qt или есть варианты оптимальнее?
>>764791 >>764783 Может я неправильно сказал, я где-то видел примерно такую конструкцию: while (std::cin > a, b, c) {} Примерно так, чтобы в 1 строчке был ввод в разные переменные.
QT-ПРОБЛЕМЫ Можно как-то во время дебага смотреть значения переменных, указателей, членов классов кароче говоря? Чёт не могу совладать с интерфейсом кутэ криэйтора.
Если у меня переменная не поинтер, есть ли альтернатива Foo bar = *(new Foo()) ? А то как-то не красиво получается. Хотелось бы привычный синтаксис Foo bar = new Foo().
>>764912 Контексты разные же. Например, ты не можешь проверить существование метода с определенной сигнатурой в типе, который имеет заданное выражение, пользуясь одним только auto.
Как такое может быть? Есть структура. В ней декларированы только члены этой структуры. То-есть, нету ни конструкторов, ни деструкторов. Сейчас я получаю segfault в деструкторе этой структуры(дефолтный). Почему такое происходит/как чинить?
>>764927 Там много кода. Могу сказать, что динамически там ничего не создаётся. >>764930 Ты имеешь ввиду, что там может быть где-нибудь один и тот же указатель/массив или что?
Не знал где спрашивать, спрошу тут. Система Ubuntu 14.04 IDE Eclipse. Проект внезапно C++. Каким образом в этой IDE подключать библиотеки к проекту. Какое расширение у библиотеки должно быть .a или .so ? Кроме подключения хедеров и библиотеки в свойствах проекта нужно ли что-то ещё? В этой библиотеке определено пространство имен. Когда вызываешь из контекста при наборе кода, IDE его видит, а при компиляции нет.
Антуаны, вкатился в кресты совсем недавно сейчас мой уровень - написание калькулятора через кейсы или подобные небольшие задачи. Сейчас появилась необходимость написать код, который работает с небольшими POST и GET запросами сайта обновление страницы, получение каких то числовых данных - попробовал погуглить, но по запросу "POST GET запросы C++" нихуяшеньки нет, либо речь идёт о каких то библиотеках. Раньше писал подобное, но на Delphi. Собственно, ткните носом, что читать по этому вопросу.
>>765199 >>765178 Но я же в тред по крестам написал, значит мне не нужен питон. >>765196 А с помощью встроенных библиотек никак? Или curl просто устанавливаешь и через инклюды подключаешь потом?
>>765207 >Или curl просто устанавливаешь Не надо устанавливать, просто кидаешь в ту же папку, там в гайде все описано. Алсо, если у тебя VS, то через NuGet от в один клик подключается.
>>765359 Страус неплох, но его нужно читать вместе со стандартом, ибо весьма много неточностей, недомолвок и даже ошибок мелких, даже в 4 издании. Не говоря уже о ранних.
Читал несколько лет назад документацию, которую писали в Apple. Господи, до чего же она была прекрасно написана. Ясно, легко читалась по 100 страниц в день. Стиль, слог, верстка, подобранные примеры -- все изумительно.
А теперь читаю документацию к одной либе. Каждый день как пытка. Иногда получается прочитать не более одной-двух страниц настолько уебански все написано. Верстки, системы, оглавления нихуя нет. Видно, что писал тот же мудель, что и саму либу. Косноязычный аутист. Сука, ненавижу.
>>765693 Именно поэтому в конторе должны быть надсмотрщики над программистишками. Чтобы пиздить их беспощадно и постоянно.
Фирме нужны технические писатели, корректоры, редакторы, верстальщики, редакторы стайл-гайдов и дизайнеры HCI. Только так софт начнет решать задачи людей, а не программистишек.
Дай программистишке волю он насрет кучу кода и скажет: "Документацию мне писать лень, ебитесь сами. Если че непонятное — то прямо в коде посмотрите там. А я пошел писать новый говнокод."
>>765736 Ты не понимаешь сути C++. Он не призван сделать жизнь программиста легче или лучше. Он призван наполнить стандарт всем говном, которое только придумали. Это легко наблюдать по плавному переносу всего boost-говна прямо в стандарт. Сделать так, чтобы проекты разрабатывались годами и требовали для своего поддержания орды высокооплачиваемых макак, которые постоянно лепят ассерты и ебутся с отладчиком. Если софт будет писать легко, он не будет не иметь проблем с освобождением памяти — то кто в здравом уме будет платить кодерам их сегодняшние зарплаты? С++ идеальный после Java язык, для развода инвестора на бабки.
>>765796 У индекса вектора тип - size_t, а не int. Технически, это неверно. По умолчанию тип целых чисел - int, поэтому auto ix = 0 выдаст int. auto выводит тип из правой части.
>>765768 Нет, дружочек. Для assert еще гарантируется, что в случае ошибки диагностика будет содержать текст строки, которую ты вторым аргументом укажешь, а также номер строки с ошибкой, имя объемлющей функции и единицы трансляции. И вызывает оно не exit, а abort, это существенно в плане вызова деструкторов.
>>765923 Не совсем понял, в чем суть кода, но decltype и auto используются для того, чтобы меньше приходилось менять код в нескольких точках одновременно и уменьшить касты между типами везде, где только можно.
>>765930 Завместо деклтайпа, можно написать: auto i = 0u; Да и вообще, лучше завести для себя такое правило: если переменная всегда будет равна нулю или больше нуля, то использовать size_t
Скажите, я хотел переписать пример, который тут был >>764940 для безопасности. Выполняется, но что-то в коде не то. https://ideone.com/pSk805 Тут виртуальный деструктор нужен? Помогите пожалуйста.
>>766073 >stringstream Сложно. >загугли int to string Говорит to_string есть, но с++ почему-то его не находит. Но я написал свою. Спасибо.
А вообще это какая-то неудобная штука opencv. Как будто дли си писали. Нет бы сделать эту функцию методом класса изображение. Всё было бы в разы удобнее. Почему так не сделали?
Проблема такая. Сделал базовый класс, от него производный по типу "является". Затем в программе хочу к указателю на базовый класс присвоить адрес переменной производного класса, а он не разрешает. Visual Studio выдает "не допускается преобразование в недоступный базовый класс "Cd"".
>>766196 >является Нихуя у тебя не является, у классов по умолчанию приватное наследование, ты реализацию только унаследовал. Пиши Classic : public Cd { ...
БРАТЦЫ! КРЕСТОНОСЦЫ! делаю децентрализованный игорь на андройд ndk. вроде графика и физика изи но сетка это вообще пиздец. но это не важно Вопрос по STUN. Я понял что мне нужен stun уже успех но http://ideone.com/knBvgP почему не рабит? гайды за 2 дня гугловки не нашел и действовал в идеоне по логике. На локал хосте рандомный порт открывется сокетом и листится. но ответки с Stun не приходит. Q3 работает. поэтому думаю проблемы в NAT нет. В чем косяк?
>>766246 >преслести промышленного программирования Так нахуй брать эти школоподелки? Серьезные люди в продакшене юзают: - MS VS - Eclipse CDT - XCode - Qt Creator - CLion - Vim
Всем, кто советует иное, можешь плевать в лицо без раздумий.
>>766275 >766270 >вроде текстовые редакторы в qtcreator и eclipce это vim и открою тайну vim бывает гуёвым Лалка, они поддерживают режим ввода текста, как в vim и не больше. Код из vim они не используют. Особенно Eclipse, которая написана на Java. А называть gui версию vim настоящим gui текстовым редактором - это вообще охуеть.
>>766281 ну да, с eclipce ступил. ну про режим ввода как vim я понял пробовал guivim тоже охуел. но думал кто-то юзает >>766279 я думал ты залетный с /b и жирно тралил
>>766223 1. Подними stun на виртуалке и потести в виртуальной сети. 2. Почитай доку к сокетам 3. Почитай подробнее у Таненбаума про протоколы, с которыми собрался работать.
Школота в треде, нужно сравнить несколько чисел с одним, так же где то читал, что возможен такой вариант кода if (x1, x2, y1, y2 > 7) Это будет работать? inb4: Иди на хуй
Если посмотреть на дату оригинального поста с опенсиви, то можно заметить,что он написал намного раньше появления этого треда. Следовательно Олежку решил подставить какой-то зависник, который вероятно вместе с ним учится. Осталось выйти на связб с Олежкой и спросить не травил ли кого-нибудь недавно. Лошара и будеь автором вброса.
Подскажите, а нет ли какого-нибудь простенького портативного компилятора на шинде для С++? Я на линуксе пользуюсь консольными командами с г++, а на шинде, я смотрю, только 20 гигобайтный вижуал?
Ты так или иначе всё равно будешь работать с плюсами. Qt нужен для написания гуи, но логика какая-то же тоже должна быть. Сначала набей руку в плюсах, а потом немножко почитай Шлее или Саммерфилда по Qt и кури доки по Qt, они у них хорошо написаны.
>>764773 В плюсах вкатиться куда-либо невозможно, не зная сами плюсы. Для Qt надо очень хорошо владеть адванцед понятиями, типа pointer ownership, построением хорошей архитектуры и тд.
>>766361 >Подними stun на виртуалке и потести в виртуальной сети. мне нужно обойти nat, как мне поможет виртуалка? на ней тестовый nat собрать? >>766343 я делаю реализацию peer-to-peer на цпп и там надо на листинг сокеты ставить в тредики ченить собирать... а какое отношение лабы имеют к цпп треду?
потсоны что делать если твой код выглядит как c::foo(int const const a, const std::vector<const int const const> const * const b, const const const const const const c) const ? const : const
>>767344 А в студии он через .h нормально добавляется? Я в mingw пишу и как туда добавить .lib понятия не имею, весь гугол перерыл уже. Если просто закинуть .lib и .dll в папку с проектом и добавить в код заголовочный файл, ничего не работает.
>>767350 Вроде-бы просто так работает. И если ты собираешь его в .lib то никакого .dll нет. Тебе нужно только кинуть curses.h и pdcurses.lib в папку проекта, добавить pdcurses.lib в зависимости твоего проекта и #include "curses.h", тащемта всё.
>>767350 >Я в mingw пишу и как туда добавить .lib понятия не имею Никак, у mingw .a вместо .lib. Или собирай либы сам под mingw, или ищи уже собранные в дистрах линукса.
Время выебонов Сколько человек из желающих ВКАТИТЬСЯ в плюсы и/или сишку реально вкатилось хоть на уровень джуна? Судя по борде, то у каждого второго планы изучать сие.
Может кто что подскажет. У меня есть менеджер задач. Каждая задача выполняется на отдельном потоке. Задач много. И тут я хочу одну в одной из задач вызвать sleep. И не хочу терять зря время потока, и дать выполнять ему другую задачу. А когда время пройдет, то то свободный поток подхватит ее и продолжит выполнение. Пока только придумал создавать новый поток, добавлять его в менеджер задач. А тому, который уснул не посылать потом новую задачу и отдавать дескриптор ОС. Норм решение или стоит ещё подумать?
>>767527 > терять зря время потока Время ты не теряешь. Система поставит на выполнение другой поток вместо остановленного и все. Ебаться есть смысл только если количество остановленных задач может приближаться к размеру пула потоков - тоесть проблема в том что могут кончиться потоки в пуле. Если я правильно тебя понял (каждая остановленая задача приведет к созданию нового потока) то твое решение так себе. Проще увеличить размер пула.
>>767544 >Время ты не теряешь. Ну как не теряю. Изначально я создаю n потоков по количеству ядер (допустим 4). Нагружаю все 4 ядра. В одном вызываю sleep(3) нагрузка на CPU - 75%, пока поток спит. > Проще увеличить размер пула. Это я и хочу сделать, но в риалтайме. Создал новый поток, а старый после завершения освободил. Одновременно рабочих у меня будет столько, сколько у цп аппаратных потоков.
>>767558 Имелось ввиду что у тебя есть некоторое количество заранее созданых потоков (пул). Ты не создаешь и освобождаешь потоки (это тяжелая операция), а переиспользуешь старые. Когда задача отработает поток не уничтожается, а возвращается в пул. Когда нужно запустить задачу то из пула берется уже готовый свободный поток. Когда нужно приостановить задачу ее поток останавливается и на выполнение отдается другая задача. Когда можно продолжить то вместо запуска новой задачи снимается с паузы старая задача.
Как можно быстро распространить криптолокер? Заливать в интернет как быть независимой женщиной и эксплуатировать мужчину.fb2.exe?
(Автор этого поста был предупрежден.)
Крестаны, собираюсь обмазаться C++, потому что в целом хочу подтянуть базисные знания по программированию и попробовать запилить небольшую 2D игру в детстве жутко мечтал сделать свою игру, так сказать совместить приятно с полезным, чтобы не сорваться в процессе изучения. Вопрос этот наверное платиновый, но правильно ли я делаю? Или тут только драйвера байтоебят, а мне дорога в C# с Юнити? Хочется поставить себе долгосрочную задачу с конкретным результатом, поебаться с разными сложностями и алгоритмами как в детстве, когда решал задачки на тимусе.
Ты каждый день тратишь кучу денег на деликатесы, девушек и друзей. С двумя последними ты сутками зависаешь в клубе и пьянствуешь неделями. От скуки ты скупаешь машины и квартиры. Пора положить конец такой жизни!
Удали все контакты из телефона, продай всё, кроме самого необходимого и обратись в веру. Благодаря вере ты сможешь искупить свои грехи и возможно поможешь обратиться другим.
>>767803 Можно и то и то. Если не смущает юнити (например фактический вендорлок на виндоуз, хотя с этим пытаются бороться, может даже поборют) то лучше в юнити пойти - ты там быстрее к результату сможешь прийти. А так-то и на плюсах можно, если есть желание именно ими заниматься. >>767799 Глобальное пространство имен раздувается кучей идентификаторов которые все не упомнишь - появляется вероятность конфликтов.
>>768153 constexpr ненужное гавно, очень редко используемое. Вот изза таких вещей как constexpr, prvalue и так далее изучение новых крестов превращается в ад
>>768227 Зависит от того, на чем преимущественно ты хочешь писать в итоге. Вкатываясь в кресты после няшной, довольно трудно избавиться от навязчивого чувства, что 80% фич крестов — ненужное (и даже вредное) говно. Так что если твоя цель кресты, то лучше с них сразу и начать, не набирая вредных (для крестопрограммера) привычек из сишечки.
>>768254 >навязчивого чувства, что 80% фич крестов — ненужное (и даже вредное) говно Охуительные истории. Надо быть совсем упоротым утенком, чтобы так думать.
"Ух епт, теперь не надо высчитывать размер для маллока? Говно, нинужно".
"Ух епт, теперь не нужно ебаться с макросами для обобщенных функций и типов? А нее, говно, нинужно".
"Ух епт, теперь не нужно каждый раз городить vptr вручную? А нее, говно. Не жили хорошо, неча начинать".
Как начать работать, если я ленивый уебок? Иногда бывают продуктивные месяцы, когда не отвлекаюсь ни на что. А иногда я такой ленивый пидор, что самому стыдно.
>>768293 Ну иди пойди уже поучи что-нибудь. Если ты ньюфаг, что 80% инфы для тебя будет одинаково новой, что в учебнике по си, что в учебнике по крестам.
Аноны, подскажите. Есть сущность скилла (умения). У скиллов есть эффекты, некоторые со сложной логикой. Метод "use" получает все необходимые данные (id, player, world). Где мне описывать логику эффектов? Делать нагромождение if (id == 1) ... else if (id == 2) ... ?
>>768188 Охуел что ли. Если ты не понимаешь, для чего нужна фича, то это не значит, что она не нужна. Если сложна, то иди учи бейсик.
>>768153 const может быть просто фиксацией любого значения, типа "Вот это пользователь не должен менять". constexpr показывает, что выражение может быть рассчитано во время compile-time, если ему переданы constexpr. В ином случае выражение будет рассчитано в рантайме. const, например, нельзя использовать, как параметр шаблона, а constexpr можно.
>>768456 > Делать нагромождение if (id == 1) ... else if (id == 2) ... Когда ты сталкиваешься с ситуацией "нужно сделать нагромождение ифов" это верный признак что можно применить ООП. Это конечно не значит что его нужно пименять. В конечном счете нагромождение ифов может оказаться более простым и понятным вариантом.
>>768468 >В ином случае выражение будет рассчитано в рантайме. >const, например, нельзя использовать, как параметр шаблона, а constexpr можно Ты путаешь понятия "constexpr" и "constant expression". Второе может храниться и в const (например, если ты пишешь const int x = 1) и прекрасно использоваться для размеров массива и параметров шаблона, ибо тоже рассчитывается в compile-time. Но не любой const хранит constant expression, поэтому ввели constexpr, который это форсирует.
>>768770 У constexpr для функций вообще другая семантика же. Там даже константность не гарантируется для методов. constexpr-данные ~ гарантированно константное выражение литерального типа constexpr-функция ~ функция над литеральными типами, которая вычислится в константное выражение при условии, что аргументы будут константными выражениями.
>>764736 (OP) Хелпаните. Вот простейший расчет времени, вот по идеи он должен мне больше 24 часов не выводить. Подскажите гуру чему деление часов с остатком работает через жопу?
>>768867 > он должен Кому должен? Ты берешь остаток от деления на 3600, что может оставлять от 0 до 3599 и делишь на 24. Что дает результат от 0 до 149.
>>768895 >Я имею ввиду, если глядя на ядро системы ты быстрее поймешь что к чему? Ха-ха-ха, блядь. Быстрее всего ты поймешь, если будешь читать умные книжки и писать свою недосистему ради ознакомления с основными тонкостями.
>>768909 Категорически протестую. Эти теоретики со своими концепциями придумали Minix, MULTICS и стек OSI (да блджад, это не просто "модель OSI", которую в универчиках изучают, ни сделали работающую имплементацию - но работает TCP-IP вместо их красивых построений). Практики сделали UNIX, TCP-IP и оно работает.
>>768912 >да блджад, это не просто "модель OSI", которую в универчиках изучают, ни сделали работающую имплементацию - но работает TCP-IP вместо их красивых построений
Они-то теоретики, а ты - самый настоящий кукаретик. В OSI только TCP-IP реализованы, ну охуеть теперь.
>>768932 >В OSI только TCP-IP реализованы TCP, IP и примкнувший к ним ICMP реализованы сами по себе, OSI-модель вместе с нихуя не работащим OSI-стеком от теоретиков к ним не относится НИКАК.
Not organized to be able to just throw out a reference and many disappeared over time as old web faded. It's more something you see relative to other OS's than an absolute. I really need to try to integrate all the examples sometime. Here's a few, esp from past, that give you an idea.
Note: A number were concurrency safe, had a nucleus that preserved consistency, or were organized in layers that could be tested independently. UNIX's was actually a watered down MULTIC's & he's harsh on it there. I suggest you google it too.
Note: Capability architecture at HW level. Used intermediate code for future-proofing. OS mostly in high-level language. Integrated database functionality for OS & apps. Many companies I worked for had them and nobody can remember them getting repaired. :)
Note: Brilliance started in Lilith where two people in two years built HW, OS, and tooling with performance, safety, and consistency. Designed ideal assembly, safe system language (Modula-2), compiler, OS, and tied it all together. Kept it up as it evolved into Oberon, Active Oberon, etc. Now have a RISC processor ideal for it. Hansen did similar on very PDP-11 UNIX was invented on with Edison system, which had safety & Wirth-like simplicity.
Note: Individual systems with good security architecture & reliability. Clustering released in 80's with up to 90 nodes at hundreds of miles w/ uptime up to 17 years. Rolling upgrades, fault-tolerance, versioned filesystem using "records," integrated DB, clear commands, consistent design, and great cross-language support since all had to support calling convention and stuff. Used in mainframe-style apps, UNIX-style, real-time, and so on. Declined, pulled off market, and recently re-released.
Note: LISP was easy to parse, had REPL, supported all paradigms, macro's let you customize it, memory-safe, incremental compilation of functions, and even update apps while running. Genera was a machine/OS written in LISP specifically for hackers with lots of advanced functionality. Today's systems still can't replicate the flow and holistic experience of that. Wish they could, with or without LISP itself.
Note: Article lists plenty of benefits that I didn't have with alternatives for long time and still barely do. Mainly due to great concurrency model and primitives (eg "benaphors"). Skip ahead to 16:10 to be amazed at what load it handled on older hardware. Haiku is an OSS project to try to re-create it.
Note: Capability-secure OS that redid things like networking stacks and GUI for more trustworthyness. It was fast. Also had persistence where a failure could only loose so much of your running state. MINIX 3 and Genode-OS continue the microkernel tradition in a state where you can actually use them today. MINIX 3 has self-healing capabilities. QNX was first to pull it off with POSIX/UNIX compatibility, hard real-time, and great performance. INTEGRITY RTOS bulletproofs the architecture further with good design.
Note: Coded OS in safe Modula-3 language with additions for better concurrency and type-safe linking. Could isolate apps in user-mode then link performance-critical stuff directly into the kernel with language & type system adding safety. Like Wirth & Hansen, eliminates all the abstraction gaps & inconsistency in various layers on top of that. JX OS http://www4.cs.fau.de/Projects/JX/publications/jx-sec.pdf
Note: Builds on language-oriented approach. Puts drivers and trusted components in Java VM for safety. Microkernel outside it. Internal architecture builds security kernel/model on top of integrity model. Already doing well in tests. Open-source. High tech answer is probably Duffy's articles on Microsoft Midori.
So, there's a summary of OS architectures that did vastly better than UNIX in all kinds of ways. They range from 1961 mainframes to 1970-80's minicomputers to 1990's-2000's desktops. In many cases, aspects of their design could've been ported with effort but just weren't. UNIX retained unsafe language, root, setuid, discretionary controls, heavyweight components (apps + pipes), no robustness throughout, GUI issues and so on. Endless problems many others lacked by design.
Подскажите дебилу, как работают автоматические объекты в цпп. Если они создаются на стеке, то как к ним потом обеспечивается доступ? Вот объявил я, к примеру, несколько переменных: int chislo = 42; double pi = 3.14; MyYoba xui("pizda");
Как потом достаются значения переменных? Выталкиваются в обратном порядке, а потом снова запихиваются? Или просто указатель стека перемещается?
>>769175 При вызове каждой функции она берет себе от стека столько памяти, сколько нужно для локальных переменных. В этой памяти переменные и инициализируются. При выходе из функции память возвращяется.
>>769179 В смысле "достаются"? Переменные достаются чтением учатска памяти. Разницы в чтении памяти между кучей и стеком нет. Стек автоматически освобождается, а куча - нет, и все.
>>764736 (OP) А как мне завести цикл на повторение программы? Ну, понятно что черед do while. Вот например, do{ cout" Повторить выполнение,(y/n)?" while( cin quit&& quit =='y') } А как на начало всей программы будет перевести выполнение ?
>>769489 Берешь и все тело main () обрамляешь этим циклом, очевидно же. Тащемта, это единственный в хостовых реализациях, в каком-нибудь freestanding типа Arduino есть init () и loop () вместо main () вариант сделать повторения, ибо управлять рантаймом до и после работы main () ты не можешь, и вызывать ее вручную тоже запрещено.
Крестосы, кто нибудь пишет код без new? Вот совсем. Как еду без соли. Я пишу под арм, надоел мне чистый си, иногда классы удобно, но естественно размер раздувается, а иногда нужно укладываться в 64K. В результате пооткусывал все что можно, чтобы libstd++ не тащить. Могу жить без rtti и исключений, они в ембеде не нужны. А вот к new все таки привык. В результате изворачиваюсь двумя способами: локальные объекты создаю на стеке перед вечным циклом, и уже их адреса передаю во вложенные объекты, зная что из цикла никогда не выходим. Естественно бывает неудобство, если вложенные объекты нужно тоже вкладывать или внутри них нужно создавать другие объекты и их передавать во вложенные классы. Тогда я инициализирую члены в конструкторе через : но это неудобно, иногда хочется несколько строк еще добавить, приходится инициализацию прятать в сами вложенные классы, внутри их конструкторов и тд
Хелп, анон. Сегодня решил попробовать хардкорно покодить на линуксе, в терминале. Ввожу я значит vim example.c, открывается редактор быдлокода, все хорошо, а как переключаться между редактором кода и вводом команд? Например тот же makefile запустить. И еще, этот файл example.c хранится в недрах оперативной памяти или сохраняется на диск? Как его сохранить на диск?
>>769591 Хелп, анон. Сегодня решил попробовать хардкорно попердолить консольку, в терминале. Ввожу я значит emacs example.c, открывается редактор быдлокода, все хорошо, оборачивайся сучара я тут голый стою сосать у тебя хочу а ты к этому еблану идёшь наркаман штоле ща перееду камазом мозги прах выпотрошу вытащу селезёнку и съём ах не идешь пидорас ну погоди сука я как дам по ебалу ахуеешь хуй ебанный какашку свою в жопу засунь как высунул все задыхаются смотрят на нас и ржут а я стою тебе в рот сру сука тупорылая иди нахуй чтоб я не видел тебя на моей улице уёбок блять ах ты бить будешь ну всё сучонок пизда тебе я тебе череп оближу выебу трахпну дурак и сделаю из него скворечник нахуй потом вытащу киши кровь говно расчленёнка оргия чёрный властелин айдар печёнка селезёнка вылезла и по жопе ползает хуйло блять лучше раздразнить собаку, нежели бабу а собака блять тебя за ногу хуяк оторвала кровищща хлещёт ты орёшь бегаешь к бабе прибежал а та там с мужиком в постели ебётся ты её бах нахуй из пестика везде кровь баба обосралась а собака прибежала и начала говно жрать а говно то сука радиактивное собаку разорвало на куски на лает пиздёшится всю на куски распидорасчило а ты её по жопе на сука за то што меня кусала мужик стал в окно вылезать бабы увидели защекотали нудиста до смерти а я их всех выебал кишки в супе сварил съел в помойму выбосил бомж увидеел выпрыгнул орёт ты чё пидарас охуел ко мне в дом дерьмо всякое кидать изнасиловал меня в жопу кончил на спину облизал и….блевать сука мозги искры из глаз кровь говно кишки хуй пизда джигурда оргии крловавые негры саус парк гомер симпсон трахнул мо а сайдшоу мел смотрел и аплодировал а я ему хуяк кость в жопу нехуй орать всё правильно сделал так ему пидорсу повар.итог моралевый блеыять дразните баб а то ебутся с кем попало шмары вонючие ненавижу сук
>>769599 Ууу, я в линуксе немного нью фаг, поясни, пожалуйста, что происходит в этой строке :) А как между редактором и вводом команд то переключаться?
>>769584 Эмбедовка же ж. Глобальные переменные (синглетоны) решают. А ещё темплейты. Включаешь оптимиздатор и он режет всё говно и код становится маленьким. Без нью спокойно - это ж не гуйню хуярить.
Что-то не работает ctrl+z... В видео уроке чувак пишет пишет код, а потом как-то вдруг прописывает :wq и дальше как в обычном терминале vim Makefile... Скрины приложил. Как он это делает?
>>770107 в виме вводишь :wq и нажимаешь enter. Он там из вима вышел, просто он остался на виду как и предыдущие команды терминала. Ты это на степике проходишь курс, я так понял. Вот тебе по виму туториал https://ru.wikibooks.org/wiki/Vim А вообще в виме есть внутренний свой мини-туториал хороший vimtutor тоже этот курс прохожу, параллельно с линупсом
>>770152 Хм я пробовал тупо заменить new mallocoм но не сработало - начало все сыпаться. Может в твоем линке что-то дополнительное происходит, надо попробовать >>769659 да, синглтоны юзаю в большом кол-ве, ведь они естественным образом возникают с переферией - порт есть порт, он один такой.
>>770170 >Может в твоем линке что-то дополнительное происходит Тупо gcc собираю (не g++, он плюсовую либу линкует). Вот ldd linux-vdso.so.1 (0x00007ffc29954000) libc.so.6 => /usr/lib/libc.so.6 (0x00007f303cf94000) /lib64/ld-linux-x86-64.so.2 (0x00007f303d335000)
>>770174 Я тоже раньше юзал gcc. Кажется под coocox'ом. Как только переключался на g++ код раздувался на лишних килобайт сто из-за stdlibc++.
Однако! Перешел на eclipse, казалось бы какая разница, но может наконец правильные опции подобрал, но теперь компилю и линкую честным g++ и код все равно маленький. Я на армовских МК на голом железе.
>>770208 а, ну понятно, сам указываю где аллоцировать. не понятно правда почему обычный new не сработает, если его на malloc зарутить, malloc то нормально работает, он знает где heap и тд
>>770216 Placement new только конструктор вызывает по переданному адресу. Обычный new видимо что-то еще делает, что от сислибы зависит. Надо стандарт ботать.
Первая версия - с ней помог анон, но она громоздкая и много лишнего. Вторую написал я, но она все равно не вытаскивает и делает это даже хуже, чем писал анон. Что не так бля? Косяк возникает на классах из которых надо вытащить 3 имени. Т.е. более двух зависимостей
Поставил дистрибутив линуха. Что дальше? Как мне написать свой первый хеллоуворд на прыщах? Где писать, чем компилировать и как? Предложите все, что есть со своими плюсами и минусами.
>>770365 Суть в том, что много лишних действий. Мне надо за один шаг вытащить имена из строки. Не надо разбираться где кто и кем приходится. Достаточно просто вырвать имена и все. Моя просьба была в том, чтобы анон пояснил что не так с моим выражением и почему оно не берет 3 имени и более
>>770365 Суть в том, что много лишних действий. Мне надо за один шаг вытащить имена из строки. Не надо разбираться где кто и кем приходится. Достаточно просто вырвать имена и все. Моя просьба была в том, чтобы анон пояснил что не так с моим выражением и почему оно не берет 3 имени и более
Есть классы, которые образуют сраную иерархию. Т.е. даже не иерархию, есть один базовый класс и от него 50 отнаследованных. Это нужно только для того, чтобы запихивать эти классы в один список и дёргать у них с пяток функций.
А в остальном классы довольно сильно различаются набором параметров, которые я оставил торчать наружу public.
Даун с потоками возвращается. Допустим у меня есть 4 потока. Каждому из них я даю задание считать мне файл из жесткого диска. Имеет ли смысл так делать или в один поток будет лучше(не будем пидорасить HDD и прочее)? И в чем тут разница между HDD и SSD?
>>770556 >Ну если много дисков, то это понятно. А если один? А если одни, то сперва тебя будет синхронизировать арбитр шины dmi, а потом - арбитр шины sata, а затем - средства ОС, которые маппят диск в адресное пространство. Так что можешь забыть про параллельность здесь.
>>770586 >арбитр шины sata А ничего что у шины SATA есть зачем-то своя очередь и у SATA-диска довольно нетривиальная прошивка, которая почему-то очень сильно влияет на его производительность? Как ты думаешь, зачем они существуют и не связано ли это каким-то образом с поставленным вопросом?
>>771130 Тоже дс, си/плюсы, криптография. Тоже 125к, считаю пиздецки мало, пока скидываю на свой возраст (23 лвл). Куда дальше идти - хз. Думаю стать начальством в своей шаражке, нежели прыгать из фирмы в фирму.
>>771556 Полтора года крестов, линукс-хуинукс, гцц, студия. Могу в qt, 11\14 стандарты, чистый си, немного в php\js, немного в шарпы. Ниче интересного.
>>771760 >771556 >Полтора года крестов, линукс-хуинукс, гцц, студия. Могу в qt, 11\14 стандарты, чистый си, немного в php\js, немного в шарпы. Ниче интересного. Конкаренси, сетевое программирование умеешь?
>>771776 >Конкаренси, сетевое программирование умеешь? И еще, было такое, что не отказывали в отклике на hh? Чего я спрашиваю: у меня похожее резюме, но опыта побольше и вот меня конкретно так игнорят. Правда, я в Мухосрани.
>>771776 >>771778 Про Concurrency теорию знаю, там про мутексы хуютексы, атомики и прочие треды. В сеть тож чутка умею.
Я кидал резюме в 2 конторы, обе меня взяли вообще без проблем. В итоге правда в своей остался, начальник хуями покрыл и дал +к ЗП(вот и стало 125).
Если я верно понимаю, то крестовику в мухосрани делать вообще нечего. Я сам из ДС6, пришлось в ДС переезжать, т.к. в моем городе было 3 крестовых вакансии с ЗП до 60к потолок.
Спрашивают много по сетям (Модели OSI надо знать), много по наследованию (виртуальному в том числе), Эксепшены и эксепшен-сейф код, создание\разрушение хитрое. Ну и оверолл мучают по алгоритмам\структурам. Мне понравилось, годное собеседование.
>>771968 >Спрашивают много по сетям (Модели OSI надо знать) Можешь описать поподробнее? В каком объеме спрашивают? Т.е. к примеру, надо обзорно знать все основные протоколы или подробно рассказывать о них, уметь использовать и накидать псевдокод за пять минут?
>>772210 >я использую с++11, просто в идеоне его не было. А зачем вообще такой кусок вставлять в идеон, если он не 100% скомпилиться. Есть же gist и pastebin >ты про отступы, пробелы и скобочки? Я про создание объекта в лямбде, а не во внешнем скопе
Я ньюфаг. Я правильно понимаю, что по возможности лучше не использовать указатели? Можно ли как-то избавиться от использования указателей в этом коде? Проблема в том, что у Y нет конструктора по умолчанию. class X { public: X() { val = new Y(...); }
Хорошо, а если я хочу использовать глобальную переменную? Допустим, у меня есть глобальный Logger *logger = nullptr, а потом где-то в коде я его инициализирую. Я могу в этой ситуации как-то избавиться от указателей? Я так понимаю, если где-то вылетит эксепшн, то деструктор никогда не вызовется и будет утечка памяти.
>>772333 Я думаю, ты уже знаешь, что использование глобальных переменных - моветон. Либо используешь синглетон, либо умный указатель (например, unique_ptr), который сам за тебя все почистит, если что. Но второй вариант только для c++11 и дальше.
>>772338 Зачем создавать еще один си с костылями, если уже есть? Да и новые фичи достаточно полезны, и не такие сложные. Если ты просто не можешь вкатиться в них, то используй старый стандарт, никто не запрещает. Но смысл писать так - непонятно.
>>772342 >то используй старый стандарт Я его и так использую. И планирую еще использовать лет 10. Мне ваше говно нафиг не всралось. У меня уже есть 100к строк старого говна.
>>772333 голые указатели блядь ваще заебатая вещь. просто есть пидоры, которые в них путаются, поэтому в стандарт 11 года добавили unique_ptr, shared_ptr и weak_ptr. это всё классы, которые за тебя создают поинтеры и в деструкторе разрушают указываемый объект. где использовать смарт поинтеры, а где голые - думай сам. но есть один рул оф самб :" используй смарт поинтеры везде, где это возможно. в остальных случаях используй голые". например, из функции ты смарт поинтер не вернешь.
Крестобляди, вы же так загубите свой же язык. Эти лямбды, вик-поинтеры и таскание буста в стд вам даром не пройдут.
> Когда Erlang стал популярным, нас часто спрашивали, “является Erlang ОО-языком?”. Конечно же, правильный ответ – “Нет, конечно, нет”. Но мы не говорили это вслух – пока мы не придумали серьезные нестандартные пути ответа на вопрос, что было бы, если бы Erlang поддерживал ОО, чего на самом деле нет (если вы услышали то, что мы на самом деле сказали и умеете внимательно читать мелкий шрифт).
> Здесь мне вспоминается ключевая речь главы IBM во Франции, которая была адресована аудитории 7-й конференции IEEE Logic programming в Париже. В IBM Prolog было добавлено большое количество ОО-расширений. На вопрос “зачем”, он отвечал: “Наши заказчики хотят ОО prolog, вот мы и сделали ОО prolog “.
>>772350 Умные указатели придумали в основном не для того, чтобы всякие лялечки не путались, а для понятной архитектуры. Иначе был бы только один вид смарт поинтера на все случаи жизни. >рул оф самб Как же это криво звучит. Ту дринкс ту ве тейбл.
>>772356 Не хочешь - не используй. Что тебе мешает?
>>772342 Ясно, спасибо, буду использовать unique_ptr.
> Я думаю, ты уже знаешь, что использование глобальных переменных - моветон. Знаю, но мне кажется, что это лучше чем в каждом классе добавлять параметр log и пропихивать его туда. А по поводу синглтона: я не вижу чем он лучше глобальной переменной.
Последний вопрос. Погуглил, нашел презентацию "don't fucking use pointers". Автор пишет, что huge_object build_new_object() { huge_object ret = new huge_object; … return ret; } можно заменить на huge_object build_new_object() { huge_object ret; … return ret; }
Но при этом же вызывается конструктор копирования. Разве это норм копировать огромный объект?
>>772368 Если каким-то образом huge_object меньше в размерах, чем указатель на него, то да, можно заменить. но блядь в 99% случаях поинтеры меньше объектов че за даунскую презентацию ты смотришь
>>772368 >don't fucking use pointers Крестобляди не осилили поинтеры, поэтому решили украсть объекты из смаллталка, смартпоинтеры из фортрана и ламблды из лиспа. А всего-то надо было нормально освоить поинтеры.
Во втором случае, как правило, не вызывается конструктор копирования. Здесь компиляторы могут применять оптимизацию, которая поддерживается почти везде. Читай про RVO / NRVO.
>>764736 (OP) Посоветуйте пожалуйста идею для сайдпроекта, после которого можно будет вкатиться на позицию джуна/мидла на позицию нормального системного программиста. Что-нибудь достаточно масштабное, но не слишком муторное. Чтобы нужно было использовать треды, читать большие файлы, экономить память, и все такое.
Бекграунд: касался C++ только на первый курсах университета, где нам преподавали C++11. Он тогда очень понравился, но к сожалению я пошел в скриптовые языки.
>>772475 Либу для клиент серверного обмена сообщениями зашифрованными с помощью OpenSSL. Запили сервак, на котором можно регистрировать динамические либы, которые содержат обработку определённый запросов.
Алгоритм сервера такой: 1. Создаётся сервер. 2. Загружает динамические библиотеки (libcalc). 3. Библиотеки регистрируют свой коллбэк на запрос. Запрос вот такой, например: 'module:libcalc data:1+1'. 4. Если приходит запрос от клиента и нужный модуль есть, то управление передать модулю. Если нет, то вернуть клиенту ошибку.
В итоге должно выглядеть так: Client -"module:libcalc data:1+1"-> Server Server -"1+1"->libcalc_exec_callback; libcalc_exec_callback -"res:2"-> Server Server --"module:libcalc res:2" -> Client
При таком примере отлично поработаешь c либами на сях(OpenSSL), с сетевым уровнем(socket), с сериализацией/десериализацией(json, xml, ...), динамическая подгрузка функционала(либы для обработки запросов), потоки для распаралеливания исполнения запросов.
Вот как-то так. Задача не самая простая, но позволит подкачать скилл.
А так не мешай системное, клиентской и т.п. Тоже системное, зачастую, почти целиком состоит из Си. Т.к. АПИ осей обычно на Си, а не С++. И это лучше смотреть именно в апи. Определение подключения устройств, перехват вызовой, драйвера и т.п.
Память экономить нужно в эмбедеде. В остальных случаях, как драйвера, модули ядра и т.п. нужно ПРЕДЕЛЬНО правильно её использовать. Необходимость супер охуенно оптимизированного чтения громадных файлов пока ни разу не возникала. Ну я и не в биг дате, так-то. Ну а умение писать хороший многопоточный код станет громадным плюсом везде.
>>772475 Пропиздоглазил твой бэкграунд, прощу прощения. Боюсь, что тогда задача будет очень-очень трудная.
Попробуй свои врапперы написать вокруг тех же сокетов.
Покопай в сторону виндового WMI. В линях смотри демоны. В маке посмотри апи по работе с девайсами разными. Получишь представление, как выглядит АПИ разных осей. И поймёшь, как можно писать кроссплатформу при необходимости.
Но, на мой взгляд, твой бэкграунд очень слабоват, чтобы активно лезть на мидла системного программиста. Лучше его не трогать, пока не будешь хорошо чувствовать себя в С/C++.
>>772587 Съеби-ка ты нахуй, ньюфаня. auto_ptr для этих целей всю жизнь использовали. В 11 стандарте его заменили на unique_ptr, который используется точно с той же целью. И это если не упоминать shared_ptr.
>>772555 >>772555 Спасибо большое. Да, на мидла я особо не расчитывал. Попробую все же реализовать эту задачу, пока только для линукса. Ведь подразумевалась кроссплатформенная либа, так?
>>772607 Попробуй. Даже, если не выйдет, то полезного опыта будет с головой. Да, имеет смысл делать её кроссплатформой. Большинство кода на С/С++ имеет смысл писать кроссплатформой. Либо использовать кроссплатформенные либы. Но без фанатизма.
Если интересно про кроссплатформу, то посмотри как пишутся cmake файлы для проекта. На мой взгляд, это самый удобный способ иметь кроссплатформенный проект. Например, QtCreator и CLion отлично поддерживают формат проекта в виде cmake.
Самое главное, что можно удобно ветвить настройки проекта в зависимости от ОС. Например, линковать ос зависимые либы и прочие радости. Ввторе - симэйк проект можно собрать на винде, на лине, на маке в пару команд: cmake <project dir> -G "MinGW/Unix/... Makefiles" && make
Я правильно понимаю, что shared_ptr работает как garbage collector полноценный? То есть он медленнее чем unique_ptr, но я могу вообще не париться за то, когда он освободится?
Парни, поясните прошу Я могу за 2 месяца пройтись по Java и устроиться за 100к+ java-кодером, А могу учить ссылки-хуилки,смарт-поинтеры boost, stl, и еще хуй пойми что с кучей неочевидных нюансов. И для того, чтобы выдать норм код, надо лет 5 херачить, а по зарплате не сказать что больше. И даже енсли прочитать книгупо крестам страниц, то повезло, если хотя бы треть запомнишь.
>>772636 Так нельзя, как ты хочешь. Т.к. ссылка не может быть пустой. Т.е. тебе нужно будет задать какое-то изначальное значение этой ссылки. А поскольку чтобы заполнить эту ссылку тебе нужен экземляр твоего класса, то выходит рекурсия. Для создания объекта тебе УЖЕ нужен объект.
Для этого лучше использовать сырые указатели или умные (std::unique_ptr, std::shared_ptr). http://ideone.com/yJgJdi
>>772663 >Т.к. ссылка не может быть пустой. Т.е. тебе нужно будет задать какое-то изначальное значение этой ссылки. А поскольку чтобы заполнить эту ссылку тебе нужен экземляр твоего класса, то выходит рекурсия. Для создания объекта тебе УЖЕ нужен объект. ну я так и понял, но думал мож что-то предусмотрено для этого понял
Плюсы и сишечка со своими жирными стандартными либами и костылями - все. Хоть и сделали musl, uclibc, uclibc++ на них почему-то перекатыватся не стали.
>>772632 во первых, шансов стать 100+к джава-кодером за два месяца очень мало. во вторых, рынок джава-кодеров переполнен, каждый второй студент идет в джаву. конкуренция, демпинг, снижение средней зп. в третьих, плюсовый рынок наоборот страдает от голода, вакансий много, зарплаты можно очень годные получать, конкуренции мало.
иди в джаву, будь крутой макакой в тырпрайзе. мне больше работы и денег с плюсов будет.
>>772876 > uclibc++ на них почему-то перекатыватся не стали. > library will focus on space savings as opposed to performance Цель этих бибилиотек в том, чтобы создавать софт размером в 64к. Перекатываются на них только создатели электронных брелков размером с коробок.
>>772958 >Все эти функции и другие я могу реализовать вручную с помощью вин апи. Нахуя? Stdlib использует сишную библиотеку. Ну уберешь ты стандартную и напишешь свою, что ты изменишь? >Ну или если нельзя избавиться от рантайма, есть ли опенсорс аналог для винды? Glibc кое-как портирована на винду в виде gnuwin32, но опять же нахуя? Libc и stdlib в теории имеют одинаковые интерфейсы, хоть на практике на разных платформах есть свои нюансы. По факту, stdlib еще более не совместима, чем libc. И вообще ты какой-то хуитой страдаешь.
>>764736 (OP) Это нормально, если стримы в моей библиотеке будут работать с std::endl? Например mylib::myvar() << "Hello" << std::endl; Или лучше сделать свой mylib::endl?
Вчера спрашивал про конструкторы копирования, но до сих пор не понял как мне сделать следующее. У меня есть класс Matrix. Я в нем запретил копирование, потому что там внутри память выделяется динамически и копирование матрицы просто не имеет смысла. Можно ли как-то определить метод, который умножает 2 матрицы и возвращает матрицу (а не указатель)?
Я вижу 3 варианта и они все мне не нравятся.
1) Я прочитал про RVO. При определенных условиях объект не копируется когда возвращается из метода. Если запретить копирование, то конпелироваться не будет несмотря даже на RVO, я проверял. Но я не хочу разрешать дефолтное копирование, потому что это будет не копирование вовсе (2 указателя буду указывать на один участок памяти).
2) Можно специально переопределить конструктор копирования и операцию =, чтоб моя матрица относительно этих операций вела себя как std::vector. Но это тоже тупо. Зачем писать то, что я заведомо не буду использовать из-за неэффективности?
3) В качестве матрицы-параметров принимать смарт пойнтеры и всегда возвращать смарт пойнтеры. Типа friend std::unique_ptr<Matrix> operator звездочка(const std::unique_ptr<Matrix> A, const std::unique_ptr<Matrix> B) Ну это мне вообще не очень нравится.
>>772996 А, ну и 4 вариант. Определить что-то типа UnsupportedOperationException и кидать его из конструктора копирования и операции =. Тогда RVO сделает свое дело и у меня будет определенная степень уверенности.
>>772996 RVO/NRVO это всего лишь перестраховка, чтобы ускорить случаи, когда конструктор копирования есть, но можно не копировать. Ты всегда можешь создать в операторе локальную матрицу с результатом произведения, наполнить ее, а потом написать return std::move (matrix); В этом случае сработает конструктор перемещения, и все будет нормально.
>>772881 >в третьих, плюсовый рынок наоборот страдает от голода, вакансий много, зарплаты можно очень годные получать, конкуренции мало. ппц, не пали годноту лохам
>>772973 Не хочу чтобы в моей программе была проприетарная параша в виде CRT от майкрософт, которая занимает дохуя места. И да, динамическая линковка мне не подойдет
>>773301 Почему первое чем озабочен каждый семиклассник, написав свой первый хеллоу ворлд - это именно этими вопросами? Не проводились ли на эту тему какие-то исследования социальными психологами?
>>773317 Тащемта, это показательно. Те, кто не был совращен Столлманом в период сосничества, обычно становятся устойчивыми к этому дрочу на швабодку и не ведутся. А дети страдают. Может, предложить законопроект, приравнивающий GNU к педофильскому лобби?
>>773517 пока что сделал так, но нет возможности проверить с линковкой в QT что то не так for (int i = 0; i < date.size(); i++) for (int j = 0; j < date.size(); i++) delete date[j][];
>>773395 Спермоблядок, ты всё неверно интерпретировал. Социсследования интересовали про то, почему каждый семиклассник озабочен ужатием своей говнопроги с двух до полутора килобайт. И начинается такое не со Столлмана, а с MASM-а.
>>773551 >Социсследования интересовали про то, почему каждый семиклассник озабочен ужатием своей говнопроги с двух до полутора килобайт Эх, вспомнил свои нулевые и журнал Ксакеп. Я столько говна тогда понаписал...
>>773551 >проприетарная Я вот про это говорил. Путь байтоеба и путь красных глаз во многом пересекаются, но это не одно и то же. В погроммистском аду байтоебы находятся приблизительно во 2-3 круге, а гнутые евангелисты - в восьмом.
>>773673 mov, sub, jge. Если подразумевается ввод-вывод, то плюс int. Если допускаются конфигурирование прерываний, то, очевидно, достаточно mov и int.
>>773687 >Если допускаются конфигурирование прерываний, то, очевидно, достаточно mov и int. Почему? Из чего будут сделаны обработчики, если доступны только int и mov?
>>773700 Нет, я как раз имел в виду, что в прерываниях может быть ординарный код. Энивей прерывания, например, для обменов с устройствами, стандартизованы, и им не получится обрезать количество инструкций. То есть, ты можешь работать с mov, sub, jge как с "брейнфаком для бедных" и эмулировать биты отдельными байтами, но чтобы тебя понимали внешние устройства, тебе по любому понадобится работать с побитовыми инструкциями внутри прерываний.
QThread* newThread = new QThread(); newThread ->start(); Yoba yoba; //ёба наследуется от QObject yoba.moveToThread(newThread );
Почему у ёбы дважды вызывается конструктор? Почему при этом если в конструкторе вызвать QThread::currentThreadId() выдаёт главный тред приложения, а не newThread? Как вообще сразу поселить объект в другом треде, чтобы он там создался и не ебал мозг?
>>773899 >Почему у ёбы дважды вызывается конструктор? Ага, блядь, это потому что я дебил и создаю объект ещё раз в qml, нужно было заместо qmlRegisterType пользоваться setContextProperty. >Почему при этом если в конструкторе вызвать QThread::currentThreadId() выдаёт главный тред приложения, а не newThread? Вопрос снимается, на это похуй, убрал всё из конструктора, повесил на thread.started() метод init(), всё работает.
>>773024 Использовать std::move при возврате из функции не рекомендуется, потому что в этих случаях компилятор точно не применит RVO. Лучше вернуть просто matrix, а там уже само решится - либо rvo, либо move-конструктор, либо move-присваивание, либо и то, и другое.
>>773997 Неправильно прочитал. Так ведь наоборот же говорю не использовать move. Но если что, rvalue-ссылки это ссылки на объекты, которые вот-вот будут удалены, так что это вполне можно делать, если есть на то причины.
Помогите советом. Есть папка Source. В ней папка с проектом VS. В папке Source по папкам хранятся сорцы каждой подсистемы. Как мне в этой ситуации лучше всего использовать precompiled headers (находится в папке с проектом)? А то писать #include "../../MSVC/stdafx.h" бред.
>>774737 игры это либо писать движки (самый хардкор) либо писать скрипты на готовых Unity, Unreal Engine и т.д (самое легкое) либо с помощью готовых фреймворков мутить SFML, SDL. (хуй ты че серьезного сделаешь с этим, но по сложности средне)
линукс, хотя бы на виртулке, обязателен. насчет ide - попробуй Code::Blocks на линуксе, и Visual Studio или тот же Code::Blocks на винде.
>>774768 А у тебя какая виртуальная машина стоит? Я смотрел, все платные. Альсо, вон в гд: https://2ch.hk/gd/res/256276.html Кто-то 1 с 0 написал движок и игру на нём.
И еще, что лучше >Code::Blocks или codelite? Я смотрю по сравнению они одинаковы.
>>774783 >А у тебя какая виртуальная машина стоит? Я смотрел, все платные. Virtualbox, например. >Кто-то 1 с 0 написал движок и игру на нём. ну красава, хули. >И еще, что лучше Code::Blocks или codelite? не знаю, но опять же, советую именно Code::Blocks.
>>774823 >>774822 А на линуксе что есть? Я думал через виртуалбокс установить, если там есть что-то удобнее. Да и мне на 1 форуме писали что надо на линукс переходить для программирования.
>>774768 >насчет ide - попробуй Code::Blocks на линуксе, и Visual Studio или тот же Code::Blocks на винде. Как же ты заебал со своим code::blocks, маркетолог ебаный. Тебе уже ответили: >>766247
>>774863 Подцепить тулчейн для креатора из бандла? Или то был ебанутейшей редкости баг, либо ты пиздишь. В любом случае твое говно ни в какое сравнение не идет с qtcreator с точки зрения интеграции.
Почему QList остается пустым? В gridLayout должны быть несколько QPushButton. Они еще не создались? Выполняю эту строку в конструкторе mainwindow, но после ui->setupUi(this);
> Network Serialisation and Visualisation of Game State
> It’s probably obvious by now how this can be achieved: use serialisation to a byte buffer that is optionally compressed and send that to your endpoint - most likely binary and versionable. With the addition of an attribute that describes network transient fields, this allows you to make some very powerful editing tools.
> The main class of tool is an editor that connects to a live game, edits an intermediate data representation and broadcasts changes to a live game. There are many benefits to this approach:
> You get live updates of any changes on PC or console. > Design is multi-threaded due to the nature of network communication, making for some graceful UI tools. > You can iterate on your tool code without bringing the live game down. If the tool crashes, it doesn’t bring down the game. > If your game gets into a state that is deemed incorrect, you can connect and visually see the state of all your objects.
> If you want to write your tool code in C# or embrace the era of the Internets and write in a combination of Javascript, HTML, CSS, etc. you only need to write the equivalent of the above serialisation code in that language to allow editing and communication. Each C++ container type you support will need to map to an equivalent in the tool language.
>>764736 (OP) Для C++ есть нормальные фреймворки уровня Symphony, Django, Rails для веба, чтобы их еще кто-то использовал, ну и вообще экосистема для веб-разработки? Можно ли найти работу в таком направлении? Можно ли найти работу фрилансером или на удаленке? Или весь с++ - это обязательно пот, прыщи и поедание мозолей? Можно ли разрабатывать со скоростью, сравнимой с с#, java, python?
https://geektimes.ru/post/277502/ Прочитал статьюю и загорелся идеей разработки игры, планирую начать с изучения с++, а дальше написания игры своей мечты с поборами на патреоне. Взлетит?
>>775080 Я работаю прямо сейчас. Дохуя математики но мне в кайф. Есть и другие задачи, вот сейчас за стенкой ебутся с коррекной работой прилаги на 8 мониторов.
>>776305 Код менять нельзя. Только а. А там double в float конвертится и с константой забыл какого типа сравнивается. То есть надо подобрать такую строку чтобы после её конвертирования в float и сравнения с той константой в ифе получилось тру.
>>776337 А я, кстати, думаю, что задачку можно решить. Но надо поебаться с битовой логикой этого дерьма. Топик-стартер, запусти это дерьмо под дебаггером. Посмостри че там происходит в момент float b = strtod(a,0); мимо-крокодил
На фирме "GalleySollution"
Однажды случился обвал...
На баги, фреймворки сырые
Мой верный товарищ упал...
Скажи мне, Галера Крутая,
Ужель это смерть настает?
Я молод, а где-то работа
Меня в Калифорнии ждет.
Но вышел приказ из конторы --
На помощь спускаться не сметь!
Сказал управляющий людям
Нет дела до этого мне.
За смерть С++-ОПа-поэта
Я выдам полтинник жене...
Старший брат:
Предыдущий:
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-треды