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 собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Автор(ы)
Название
Год
Ссылка
Ален Голуб
Веревка достаточной длины, чтобы выстрелить себе в ногу
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, 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:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>>692430 >>692431 Вы видели тред где решали какая шапку будет? Недавно был. Суть в том что у старого опа лапша в шапке, а у нового не крутой оп-пик, нет стишка и многое из шапки выпилил. Мод решил сделать хтмл разметку для шапки старого опа чтобы не было такого спагетти. Теперь оп пости стишок с оп-пиком и через форму жалоб сигналит моду про новый тред, а тот редактирует шапку вставляя хтмл код в неё. Исходники шапки на гитхабе и скоро такое на всех тредах будет. Надо просто самому хтмл разметку написать и через пул реквестов сюда https://github.com/pr-hats/2ch.hk-pr-Hats/ отправить.
>>692445 C# 10 дней назад свою шапку туда залили, а мод что-то не добавляет её им. Кстати такая система позволит всегда свежие ссылки на треды в шапке прикреплённого треда писать.
>>692459 >Пока что фича экспериментальная Еще в том треде писали, что пока что только на крестотреде тестируют. Потом уже всем объявят, если взлетит концепция.
>>692464 Что тут тестировать? 2 мелких комита за всё время. Никакого прогресса и жалоб. Пора по всем тредам пройтись и с плашкой мода сказать чтобы тоже свою шапку пилили. Надо только за jsом следить чтобы туда лишнего не записали.
Короче, 17 стандарт как-то НЕ ОЧЕ. Из добавленных фич: - filesystem - всякое говно из буста по типу optional, any и пр. - всякое минорное говно по типу добавления генераторов в <random> и пр.
Ни concepts, ни modules, ни networking, ни Transactional Memory, ни networking не ожидается. Найс, ждем C++20
>>692470 >Никакого прогресса и жалоб Оставлю тут свой отзыв. Как его до мода донести не знаю.
1. Убрать из шапки упоминание про [code] т.к. к крестам это не имеет отношения и им тут не пользуются. 2. Заменить все сокращённые ссылки на не сокращёный. Это для удобства. Они всё равно не показываются. 3. У меня не отображаются полоски между колонками в таблице. Наверно нужно как-то переписать чтобы везде работало. 4. Полоски между разделами в шапке при дэфолтном оформлении плохо видно. Заметнее их надо сделать. Или сразу цвет указать чёрный такой чтобы на всех стилях и на архиваче заметны были. 5. В старых тредах на архиваче проебались картинки. Тот кто эти треды заливает уже завёл свой фликер аккаунт для хранения картинок?
Однажды на собеседовании меня спросили, что такое dependency injection. Этот термин я услышал впервые и честно об этом сказал. Мне ответили, что не знать это стыдно и на работу меня не возьмут. Прийдя домой, я посмотрел, что же это такое. В тот момент, когда я увидел, что это обычное уменьшение связанности, я понял: Java - говно, а джава-бляди - сраные макаки, которым нужно объяснять, что такое уменьшение связанности, вводя специальный паттерн.
>>692472 > Короче, 17 стандарт как-то НЕ ОЧЕ. >Из добавленных фич: он уже выпущен чтоле, ёба? Нет? Вот и иди нахуй со своим тыканьем пальцем в небо. >всякое говно из буста по типу optional, any и пр. Это говно в std::experimental уже 2 года. >Ни concepts, ни modules, ни networking, ни Transactional Memory, ни networking не ожидается. Я конеш понимаю что тебя волнует нетворкинг, но если асио не добавят - мир станет только лучше.
Ты, кстати, пропруфаешь мб? если правду написал, то го в дж тред посаны))
>>692494 Бля, да это же даже не паттерн, это, сука, основной принцип ООП, блядь, - АБСТРАГИРОВАНИЕ. Именно поэтому в GoF об уменьшении связанности написали один абзац в первой главе. Это и так подразумевается, когда ты пишешь ООП-код. А Dependency Injection - изобретение java-макаки, чтобы донести простую истину до других java-макак, которые не читают классические труды по проектированию.
>>692488 >Однажды ты спросишь меня,что что я люблю больше:low coupling или dependency injection,я отвечу-low coupling,ты уйдешь так и не узнав что dependency injection это low coupling
С другой стороны и хорошо - в другие языки больше народу потянется, конкуренция всегда полезна надеюсь что ди с растом начнут быстрее разрастаться и из коммитета выкинут нахуй старых пердунов.
>>692535 Это называется "качество сообщества". Если в других языках средний разработчик - мартышка, для которой на SO миллионы ответов на одни и те же вопросы, то С++-господа знают цену общению и вместе ведут дискуссии о наиболее важных и животрепещущих проблемах.
>>692539 >Это называется "качество сообщества". Если в других языках средний разработчик - божественный господин, у которого не возникает проблем на каждом шагу с его основным инструментом, то жопа C++-даунов горит 24/7, отчего они выливают свою боль и тупые вопросы в интернет нескончаемым потоком. Не благодари
>>692567 Я писал игру где шарик по экрану летает с нарастающей скоростью и надо меняя направление его полёта не дать ему врезаться в стены. Делал смену кадров с помощью sleep. А как правильно надо было?
>>692571 Не, крестовый тред достаточно интересный, я сам не крестоблядь, но тут порой интересные дискусии ведутся, люблю почитать. А вот тот же лисотред это какой-то пиздец, скатили в емаксосрач и утонули.
>>692560 C одной стороны какая-то макака, которая строчит по 1к строк в день, использует реверс-дебаг(вангую бинарник 15КБ), и отправляет джунов фиксить баги(которые обычно требуют понимания предметной области на таком уровне, что надо идти к product owner'у), а еще у которого дебагер никогда не падает и стек не портится.
А с другой стороны вроде серьезный дядя, который не может объяснить, что дебагеры еще как крэшатся, стек еще как ломается, а охуительные истории про включение reverse-debugging на серьезных проектах такие охуеительные.
>>692575 Открыл картинку, увидел типичную боль крестомартых про утечки, неопределённое поведение, конпеляцию, магическим образом ломающуюся релизную версию. Что и требовалось доказать.
>>692590 Действительно, в то время как в нормальных языках зависимости подключаются одной строчкой в конфиге, в крестах обязательно порвать себе очко конпеляцией гигабайтов крестодрисни, а потом вымазать в ней все файлы инклудами. Эта особенность си/с++, наверное, даже хуже, чем все сегфолты и утечки вместе взятые. Тем не менее крестоблядки уверяли меня, что boost это дохуя стандарт, а то кастрированное поделие без буста это и не с++ вовсе.
>>692650 Они дали мне пищу для размышлений, несомненно. Наверное даже я спустя полгода стал менее радикально смотреть на это все. Но это таки не отменяет того, что игнорирование имеющихся технологий из-за их несовершенства - в чистом виде неосиляторство. Ты как дровосек, который нашел у барахлящей бензопилы кучу недостатков и пошел рубить лес топором.
>>692666 Тот алтфак в общем-то прав, я так и не понял, почему он не сказал то, что я. В особенности на linux, gdb просто пиздец какая баженная хрень. Именно поэтому проще использовать печать. И это не говоря о том, что дебагер не всегда применим в принципе. Например, когда под отладкой не повторяется баг.
>>692670 проще использовать печать @ в ньюфаг тред приходит ньюфаг у кооторого программа http://ideone.com/3Tarc4 с закоменченой 14 строкой работает неправильно, а с раскоменченой - правильно inb4: вот что printf животворящий делает
>>692674 >gets(isbn); >while (isbn[pos]) { >pos++; Давай ещё более нереальный пример придумай. Если специально себе грабли подкладывать - обязательно наступишь.
>>692742 Не сошелся, конечно. Просто если надо дебажить под *nix, то и спорить не о чем, я и сам полностью согласен насчет ущербности тамошних отладчиков.
>>692622 >Bjarne Stroustrup created the C++ language in 1979, and it still scores high in language popularity indexes today as it expands into mobile development. Как у крестов сегодня в мобилке? Как там решается проблема непереносимости кода? Какие варианты сейчас есть вкатится на плюсахobjective-c мимо в mobile development?
>>692622 Алсо, Бьёрне много говорит о нитинге. Если это будет действительно так же хорошо говорит, то можно набегать на удавов, гошников, чтобы похуисосить. Анон как бы ты прикрутил нитинг в кресты?
>>692779 Android NDK гугли. Вроде даже был гайд на хабре. Ну и официальные доки нормальные у него. Алсо, замечательно интегрируется со студией, отладка на устройстве, нативный эмулятор на десятке, все дела.
>>692793 Ну уж и никак. Ядро должно уметь писать дамп. Даже на твоей картинке виден стек, например. А потом пялишься в код до посинения и ишешь, что там могло пойти не так.
Треду 7 часов и уже больше 100 постов. Что делать если тред уйдёт в бамплимит, а оп не успеет стишок написать или оп-пик подобрать? Может самим перекатывать после 600 постов?
>>692851 Тащемта можно месяц в бамплимите сидеть и нихуя не будет. Четыре прошлых треда до сих пор живо. Просто что мимокрокодилы заходить не будут, и наверное скучно станет.
>>692958 >см 12-ю страницу. Проверил, собиралось 2 минуты и потребляло ок 30МБ. В статье сказано gig of RAM and a couple CPU hours.
>А нечитаемые сообщения куда-то делись? Стали структурированы и намного легче читаемы.
Конечно, можно много минусов найти, но в последнее время язык оче стремительно развивается. После выхода с++98 был пятнадцатилетний(!) застой, согласен. Тут недавно говорили, что жава - убогий язык, и по сути кроме НуллПоентерИксепшена ничего не больше даёт.
>>692973 >Зачем нужны шаблоны Например чтобы выбрать реализацию дерева или тип аллокатора для твоего мап-велосипеда. Хочешь красно-чёрное - пожалуйста, хочешь АВЛ нет - проблем, хочешь выпендриться - захерачь Андерсона. Для реализации каждого дерева нужно определить только базовые операции, а для выбора дерева в твоём недомапе - всего-навсего поменять или добавить один шаблонный параметр.
>>692993 Бля, смотри, массив, в нем элементы это объекты определенного класса, у класса есть всякие переменные в public, вот это методы я имею ввиду, и надо сравнить эти объекты с помощью min_element, как подсказали в вопросов треде по признаку этих самых методов. У какого из объектов самый малый метод этот, заданный в классе.
>>692983 Ну вот, гцц 4.8 - слишком отсталый, хотя версию сделали 3 года назад.
По поводу 12-страницы: <1 секунды error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) instantiating 'Loop<T*> Loop<T>::operator->() [with T = int...
Любую метапрограмму можно ввести в рекурсию без условия выхода.
Высокий порог вкатывания гарантирует, что индусы не отберут у тебя красную икру.
>>692999 Да, работы мало, это следствие 15-и летнего застоя и того факта, что в стандартной либе до сих пор нет сети и фаеловой системы.
Тут один ананас говорил, что в плюсы добавят возможность работы с жаба кодом. Таким образом, пока жабобляди будут над нами смеяться, изза того что не в джаву добавят возможность вызова плюсокода, а наоборот - мы тихо и незаметно огрызём у них большой кусок рынка.
>>693015 >Таким образом, пока жабобляди будут над нами смеяться, изза того что не в джаву добавят возможность вызова плюсокода, а наоборот Ты совсем ёбнутый?
>>693013 Где именно? В функции ставлю ругается на то, что выражение должно иметь тип класса в { return i.f < j.f; }. Я не окончательно разобрался с этими ссылками.
>>693005 Ну рассея такая страна, изза большой территории - большой полиморфизм мозгов, т.е. много потенциально способных делать поистине крутые вещи и столько же конченого быдла. А поскольку ещё и нефти много - то нахуй никому не надо науку и сопутствующие прикладные области развивать.
Поэтому истинный патриот должен уехать, например, в гейвропу.
Когда ресурсов много - лучше всех живут безмозглые бабуины. Очень сложно одновременно заниматься наукой и корешиться с депутатами. Разнообразие мозгов - затрудняет взаимопонимание. Вобщем профессора Савельева в помощь.
>>693032 Пишет какую-то неебическую хуйню, связанную с ошибкой в algorithm. Первая строчка: не найден оператор, принимающий левый операнд типа "realPer" (или приемлемое преобразование отсутствует)
>>693024 Приезжай для начала в прибалтику, можешь даже квартиру за 25 тыщ евро в кредит под 3% годовых взять. За 5 лет спокойно лет выплатишь, если не бухать и по шлюхам не ползать. Красная икра 25 евро/кг, ток такую самому солить надо.
>>693039 Ясно. Тогда вопрос в тему, как правильно биндить вызовы других языков: python, lua, js, yoba$, etc? Был опыт прикручивания python -- вылез шаблонныйв смысле рутинный, однородный код. Интересует как архитектурный аспект, так и конкретная реализация.
>>693049 Бля, ты делаешь из просто объекта, в который записывается другой аналогичный минимальный объект, вектор. Теперь я не могу вызывать из него методы далее, нет, не компилируется. Но красное подчеркивание под min_element исчезло, теперь ругается только где я пытался брать методы из perMin. Я кстати убрал * перед min_element, да.
>>693036 Я закончил вуз и учил кресты. Теперь хочу весь день калывать на работе т.к. мне больше нечем заняться. Готов переехать в другой город если зарплаты будет хватать на съём квартиры. Но все зарплаты оказывается не больше 40к, а для тех те что больше кресты знать не обязательно, а только будет плюсом. А чтобы утроиться на хорошую работу мне надо 3 года опыта на схожей должности. И где этот опыт найти?
>>693053 >Бля, ты делаешь из просто объекта, в который записывается другой аналогичный минимальный объект, вектор. min_element возвращает не минимальный элемент а итератор на минимальный поэтому его нужно разыменовывать звёздочкой. Сколько строк программа?
>>693059 >perMin[0] Это у тебя объект. Не вектор. У тебя не определён оператор идексации. Ты не можешь квадратные скобки писать. Ты их можешь писать для realPerM
Антонасы, поясните такую вещь. В позапозапрошлой конторе решил вкатится в шаблоны, голова кипела по-началу. Наваял немало всяких вещей, которые уменьшают код и ускоряют его написание.
Потом у нас поменялся владелец, который заранее выплатил бонус и дал проверочное задание на пару меяцев. В ходе напряжённой работы два чувака решили полностью удалить из репозитория шаблонный класс, который заменили сотней строк кода вместо одной переменной. Возможно они отомстили мне за то, что часто троллил их насчёт жирного буста, который они так усердно дрочили.
>>693066 Я несколько лет работал на заводе за относительные копейки (хотя сейчас $1000 кажется чем-то большим, а я ведь не на полную ставку работал), потом ушел на апворк. Вот и весь мой опыт, резюме пустое, а все есть.
>>693060 >min_element возвращает не минимальный элемент а итератор на минимальный поэтому его нужно разыменовывать звёздочкой >Это у тебя объект. Не вектор. У тебя не определён оператор идексации. Ты не можешь квадратные скобки писать. Ты их можешь писать для realPerM Что значит разыменовывать? Как бы так сделать, чтоб он элемент возвращал, а не итератор? Или по итератору записывал в этот объект все методы, класс же общий, хуй знает. Мне просто надо, чтобы этот элемент записывался в другой объект этого же класса, откуда я мог его использовать, и всё. >Сколько строк программа? Около 1000 всего, но почти ничто не имеет отношения к этому min_element, это всё в функции происходит, которая нигде не использована, эта дичь даже не компилится ведь.
>>693074 >Что значит разыменовывать? Как бы так сделать, чтоб он элемент возвращал, а не итератор? Или по итератору записывал в этот объект все методы, класс же общий, хуй знает. Мне просто надо, чтобы этот элемент записывался в другой объект этого же класса, откуда я мог его использовать, и всё. Звёздочку перед ним поставить. Превратишь в объект. Но это ты уже делал.
>>693089 Когда я щелкаю по этой ошибке он мне дает строчку из библиотеки algorythm. Вот еще что дает
c:\program files (x86)\windows kits\8.1\include\shared\guiddef.h(192): или "bool operator ==(const GUID &,const GUID &)" [найдено при поиске с зависимостью от аргументов] 1> при попытке сопоставить список аргументов "(realPer, const realPer)"
Кто-то разбирается в OpenGL? Там можно как-то повляить на порядок в котором вычисяются шейдеры? У меня текстура у которой нужно немного подправить альфа канал. Строки независимы друг от друга, там без разницы в каком порядке вычислять, но в самой строке для корректного просчета нужно чтобы более левые (в координатах текстуры) пиксели (фрагменты) просчитались первыми. Есть какая-то возможность добиться такого?
>>693040 >И что это за хуйня фокус_чейн? Порядок смены активных виджетов по табу >А что будет если выставить фокус твоему виджету не перепахивая родителей? В том то и дело, что ничего. Никакого эффекта. Нужно учитывать вложенность виджетов, насколько я понял. Т.е. если у тебя есть что-то типа
То ты не можешь для frame назначить порядок input1-input2-input3, а только box1-input1-box2-input2-input3 По крайней мере у меня проще не получалось, на стековерфлове то же говорят. А в целом в инете инфы мало, так что хуй поймёшь.
>>693094 Если правильно понимаю, то это поведение не специфирется. Но есть костыль: прогоняешь свою текстуру, через фрагментный шейдер с параметром, который кодирует колонку, итерируешься по параметру, каждый раз вызывая шейдер, лал.
>>693056 >Требования: >Понимания принципов объектно-ориентированного программирования, знание одного или нескольких языков высокого уровня (C++, java, pascal).
>>693177 >считалось что я работаю незаконно мама ама криминал
Да тебя молодого наебали просто, тип без вышки нельзя лялял, но мы глаза закроем типа и будешь работать, но сам понимаешь денег хуя да нихуя(на самом деле нет), а ты и рад был за доширак поработать.
Аноны, в прошлом треде мне помог разобраться с задачей один доброанон, но вот все таки я разобраться не смог, т.к. некоторые конструкции непонятны, нужна помощь. Сам код: http://ideone.com/NAOIOn
1. Как работают циклы for в основной функции? Что они делают, почему именно двоеточие и зачем auto v? 2. В функции vecvec assign() мы возвращаем функцию как я понял и в ней: Передаем вектор размера N+1,0 если я правильно понял?
>>693096 То есть нужно по табу переключаться между input1, input2, input3, так? Не помню как это делается в тех же wxWidgets или Qt, но в крайнем случае придётся написать небольшой класс, которому даётся список виджетов и методы next(), prev(), current(). Может быть в gtk уже есть такой класс хелпер.
Что значит "знание boost" в описаниях вакансий? Если знание стандартной библиотеки я еще могу понять, то с бустом не все так однозначно. Там же, мать его, 136 модулей, порой с весьма экзотической функциональностью.
Посоны, жопа горит. Почему при запуске под дебагером MSVS 2010 при вводе четвертого элемента вываливается ошибка Invalid heap в функции push_to_min на строке push_heap, а на идеоне программа отработала нормально?
>>693264 Обычно хватает знания самых популярных либ: smart pointers, ptr-containers, foreach, noncopiable, filesystem. Хотя меня как-то спрашивали про geometry и GIL.
>>693197 1. Это http://en.cppreference.com/w/cpp/language/range-for можно заменить на обычные for 2. Возвращается результат функии, в которую предается в том числе три заполненых нулями вектора размера N+1 и один вектор векторов (vecvec(1,vec(N+1, 0))) который будет использоваться для хранения результата, а в данный момент там один заполненый нулями вектор размера N+1. Это все конструкторы векторов.
>>693408 Если отечественные, то не советую. У нас даже в топовых вузах преподавание крестов оставляет желать лучшего, преподы до сих пор живут в 90-х. Чего уж говорить о параше на продажу.
>>693534 >преподы до сих пор живут в 90-х Это как раз в отсосных топовых рашковузиков такое положение дел, а в моем миллионнике C++11 и 14 проходили, если говорить только про актуальность стандартов.
>>693408 Глянуть стоит, раз скачал. Но если ты про книгам не можешь, то как-то стоит усомниться в выборе занятия. Если обычные книги из шапки не вставляют, гугли дополнительно примеры, или найди какую-нибудь статью вроде "пишем свой первый рогалик на C++".
>>693535 >проходили В этом вся суть. Везде проходили, но нигде не изучили. Вот какой проект на крестах вы писали в вашем миллионнике? Не отвечай, я знаю, что это была лаба2.
>>693534 Насколько я понял, там обычные курсы в аудитории, которые они дополнительное еще через Интернет другим ученикам транслируют. Ну а кто-то эти трансляции записывает и на торренты сливает. По php смотрел как-то курсы от Специалиста. Дядечка там как бог поясняет. >>693551 >Если обычные книги из шапки не вставляют Не вставляет их с монитора читать, а бумажных вариантов у мну нет.
У меня лежит малинка, я решил под неё писать быдлокод на крестах. Накатил на неё эклипс и Bluez чтобы не просто быдлокод писать, а ещё светодиодом на БТ-свистке моргать. Хеллоуворлд компилируется, БТ-свисток моргает и даже находит соседние устройства.
Но эклипс на малинке это удовольствие для ценителей, поэтому захотелось мне писать быдлокод на десктопной убунте, а на малинке отлаживать удалённо. Обмазался паком компиляторов для малинового арма и RSE для эклипса. Простой хеллоуворлд компилится, запускается удалённо на малинке и прекрасно отлаживается через GDB. Но вот при попытке сделать что-то сложнее, а именно при попытке подключить блютусовские библиотеки, начинаются проблемы.
Гугл говорит, что нужно кросс-компилить Bluez под армы на десктопной убунте, но, блядь, как это сделать, я ума не приложу. Можно ли каким-то образом линковщику ссылаться на библиотеки, которые хранятся на удалённой машине? Вот тут https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=98777 паренёк был с идентичной проблемой, но он как-то без проблем скомпилировал Bluez на своей убунте.
>>693645 Линковщику похуй, что линковать - можно просто скопировать arm-либы и правильно прописать пути через -L. Если хочется совсем просто, то юзай qemu-arm. Но будет медленно, если кода много.
>>693803 >>693804 А чё, прикольно и даже хитро с целью сделать эстеншен методы как в дотшарпе. И главно теперь не надо переизобретать свой стринг, чтобы добавить в него стартс_уидт()
я всё правильно понел? и нет ли в этой фиче каких подводных камней?
Петуханы, кто в теме. Поясните кратко и уверенно за кодировки в цепепе. Да, я проглядел мельком Джо Саттиса про i18n. Ну там круто, форматы ввода/вывода цифер денег и времени и всё такое. Куча кода.
А что с кодировками? Как кошерно принимать строки от пользователя и показывать ему, чтобы он видел все символы? (я пердоля, для меня не очень актуально, а вот у всяких спермоворов вечно геморрой с кириллицей в консоли)
Или корректная работа с кодировками нереальна в стандартном C++, надо тащить всякие сторонние либы?
>>693865 Вот, например, пишешь ты класс векторов или матриц. Ну или её какой хуйни. И вот ты с этой хернёй что-то хочешь делать: складывать, сравнивать, присваивать, умножать и тд. Для этого тебе надо перегружать операторы соответствующие. Ну или для каждого такого действия можно написать функцию.
>>693874 Оккк, перегрузка операторов это что-то вроде создания операторов под собственный класс. Почему, блядь, так нигде не написали? Почему везде такая вода?
>>693935 И при чём тут это? Ты всё равно будешь пилить свои велосипедные каналы, очереди и тд. если решишь использовать только стандартную библиотеку. А в той книжке ни слова кроме как о классах из stl.
>>693745 >Хочу вкатиться в игрострой. Это лучший для этого язык? 0. Если ты собираешся пилиить игры в одно лицо, или микротимой индихуинди, то выбирать нужно движок. 1. Если ты хочешь идти в контору, то подавляющее число пилит под андроид и яблоко. Следовательно Andoid-SDK, Objectiv-C. 2. Если ты хочешь попасть в ААА контору, тот либо С# и Unity, либо C++ и, желательно, какой-то движок (благо уже все стоящие халявные). 3. Обрати внимание, что автор игры - продюсер, потом идет гейм дизайнер, который формализирует на бумагу все идеи продюсера, чтобы кодер (ТЫ) получил конкретное ТЗ для реализации. То есть ААА кодер в /gd/ это просто кодер.
>>693967 Если бы ты дочитал до конца, то ты бы знал, что там всю вторую половину книги занимает рассказ о красивой реализации параллельных паттернов вроде пула потоков.
>>694143 Это понял. >>694145 То есть эта хуйня просто возвращает фолс всегда? В чем профит? Я думал типа надо описать там что ты подразумеваешь под ==, типа, if (A.a==A.b) { return true; } или типа того.
>>694151 > В чем профит? Тебе же простой пример нужен был. В него добавляешь дополнительные проверки, в зависимости от твоего класса, которые позволят иногда вернуть true. Можно, наверное, начать с if (this == &a) return true;
>>694018 Пару раз делал обертки над стандартными контейнерами. Обычно довольно простые вещи с наивной и немасштабируемой реализацией, но это потому что у меня питомец проект (Pet project)
>>694059 Кулстори в том, что stl, как и вообще механизм шаблонов в крестах, непригодны для действительно больших проектов, в гейдеве уже давно это поняли, так что дрочить на них могут только студенты, не писавшие ничего длиннее laba1 laba2 это мемчик такой кароч
На олимпиаде наконец разрешили использовать 11ыйшплашапыл стандарт. Я ч ним не много работал и ни одной задачи с ним не решил. Какие там крутые штуки есть которые мне могут пригодиться? Помню только array, auto и forin.
>>694255 >крутые штуки >огрызок от type inference, недозамыкания, foreach >2011 Почему кресты развиваются в таком темпе, будто это хоум-проджект одного человека?
>>694253 Я еще тогда тебя обоссал. Его доводы настолько нелепы, что даже отвечать лень. Но ради того, чтобы обоссать тебя еще раз:
>Templates suck as they cause link-time spam and compile times to skyrocket. They severely bloat the size of the debug symbol file, which on large projects can easily reach several hundred megabytes of data. Abstractions built with templates perform differently depending on whether compiler optimizations are enabled or not (every tried debugging Boost code?). They’re essentially unusable on large code bases beyond container-of-T and simple functions. Шаблоны плохие ути пути. Debug-сборка большая, ойпамагите. Аптимизации нипартируемые. Примеров, кстати, он не завез. А по делу: есть одна единственная проблема - охуительный вывод компилятора. Но является ли это критичным? Нет. К тому же, эта проблема полностью уйдет после релиза концептов.
>RTTI sucks because it doesn’t do what anyone wants, and you can’t even rely on it returning a type name formatted in a certain way. Этой парашей и так никто не пользуется. Либо в класс вводится отдельное поле type_id, или используются cast'ы через visitor'ы.
>Classes suck because their guts have to be in headers for all to see. Охуительные истории неосилятора. Товарищ с 10 годами опыта не знает про абстрактные интерфейсы, которые можно реализовать либо через наследование, либо через pimpl.
>>694282 Потому что там сидят старпёры. Предложили корутины как часть языка – былиьпосланы нахуй. Предложили ещё разок присоснуть хуйца из буста – нихатят. Блядь, они вывод типов и вариадик тимплейты 10 лет пилили, о чём вообще говорить.
Потому и появляются постоянно новые языки вроде D и Rust.
Прочитал >Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) после 2 лет байтоёбства в K&R, за плечами поверхностное изучение 3 тома Кнута (ещё в универе), небольшой опыт писания на коленке на низком уровне (ASM), немного понимаю в модулях ядра, драйверах Linux и кросс-компиляции. Про графику не знаю вообще ничего, с трудом переделал шаблонную формочку в Qt для отслеживания своего заказа на почте. Не программист, инженер. Цель - летом сменить работу и пойти джуниором на крестах, потому что интересно, перспективно и потому что заебало инженерить. Собираюсь обмазаться Маерсом по STL и им же Effective C++, какие ещё советы? Нефть авансом, выручайте, анончики
>>694289 Ты хоть раз читал пропозалы, лалка? По ним можно увидеть, что любую фичу ОЧЕНЬ тщательно обсуждают. Тебе до этих старперов еще учиться и учиться.
>>694311 Чем это УГ хуже УГ в других языках? Есть много неприятных проблем в C++, но не думай, что в комитете считают, что так и должно быть. У них не хватает времени сделать сразу и охуенно, потому что в отличии от других языков, здесь есть одна большущая проблема: обратная совместимость.
>>694321 > обратная совместимость. Это да. Нужно было сразу дропать совместимость с C на уровне исходных текстов. Не думаю, что в 1978 для кого-то было в новинку вызывать сишный код из более других языков.
>>694328 >Нужно было сразу дропать совместимость с C на уровне исходных текстов. Не думаю, что в 1978 для кого-то было в новинку вызывать сишный код из более других языков.
Охуительные истории. Дохуя кода на C ты тоже предлагаешь выкидывать?
>>694333 > Дохуя кода на C ты тоже предлагаешь выкидывать? Ты жопой читаешь, что ли? > Не думаю, что в 1978 для кого-то было в новинку вызывать сишный код из более других языков.
>>694285 У тебя хоть эти десять лет опыта профессиональной разработки есть? >Этой парашей и так никто не пользуется. Либо в класс вводится отдельное поле type_id, или используются cast'ы через visitor'ы. Фича X говно плохо сделано тупо, приходится городить костыли. Но это не недостаток языка, нет! >охуительный вывод компилятора. Но является ли это критичным? Нет. мда ясно понятно >>694287 Я что-то сомневаюсь, что если левый хуй с горы врроде меня, предложит новую нужную фичу, ее тут же кинутся добавлять в стандарт.
>>694289 >корутины нахуй нужно это говно, тот класс задач что они решаются, легко делается обычной комбинацией подпрограмм и флагов а что произойдет когда мы в язык введем еще одну конструкцию? правильно, заставим обезьян (обычных пользователей языка) напрягатся и охуевать
>>694328 Кому нужно? Это сообщество выбрало С++, а не С++ был навязан сообществу какой-то корпорацией. Таких умников с дропаньем всего и вся было дохуя, Вирт, например.
>>694321 Вот и главная проблема – там сидят старпёры которые никуда не спешат. Вот что изменилось во всех фичах из C++11 и 14 за пошедшее десятилетие с 2003-го? А нихуя.
Люди, делающие замены C++ вроде делают что-то классное, а вроде да идите вы нахуй с вашими тараканами – у того же D вроде ахуенная рефакторнутая версия крестов, а у него десяток компиляторов, у каждого свои ошибки, костыли, версии рантайма и языка. Gc от которого хуй убежишь и прочее дерьмо вроде 2 стандартных библиотек.
Итого с одной стороны старики-пердолики, а с другой – велосипедисты переоценивающие свои возможности. Нахуй так жить.
>>694395 Это не мешает в каждом стандарте расширять язык, сохраняя костыли 20ти летней давности. Просто пройдёт ещё 3-6 лет, и может кто-то созреет, что концепция уже давно продумана.
Тем более, люди пишушие конкурентную хуету сейчас страдают намного больше из-за отсутствия таких средств в языке (а потом C# и даже убогие go приматы поясняют за продуктивность, лал).
>>694347 >У тебя хоть эти десять лет опыта профессиональной разработки есть? Мы тут "сперва добейся" обсуждаем или конкретные проблемы?
>Фича X говно плохо сделано тупо, приходится городить костыли. Но это не недостаток языка, нет! Знаешь почему этим никто не пользуется? Потому что когда нужно принимать решение в зависимости от типа, обычно можно использовать стандартные средства полиморфизма, а не typeid. По сути, единственная проблема RTTI - это медленный dynamic_cast. Но когда тебе нужно сделать переход на другую ветвь иерархии, то скорее всего у тебя и так есть механизм visitor'ов и реализовать быстрый cast проще простого. Да, можно реализовать быстрый dynamic_cast. Но нахуя? Всем же похуй на это.
>мда ясно понятно Никто не отрицает, что ошибки в шаблонах печатаются дерьмово. Но мешает ли это писать код? Не мешает. Ну ок, потратишь ты минут 10(в крайнем случае) на поиск проблемы, ну и все. А типичная проблема с шаблонами, когда используешь библиотечный шаблон, вообще решается за 30 секунд. Так что повторюсь опять: хреновый вывод ошибок шаблонов не является критичным. Да и в конце концов, какое решение лучше? Тебе известны решения лучше, чем шаблоны в C++? Если послушать того неосилятора, то нужно переходить на макросы, что конечно же намного читаемо, да. Или на динамический полиморфизм через void*. Ну это конечно куда безопаснее и быстрее, чем существующие инструменты.
>Я что-то сомневаюсь, что если левый хуй с горы врроде меня, предложит новую нужную фичу, ее тут же кинутся добавлять в стандарт. Если ты сделаешь research фичи, опишешь все решаемые проблемы и проработаешь тему так, что никто не сможет придумать corner case, а так же предоставишь готовую реализацию, т.е. сделаешь все то, что делает комитет стандартизации, то твой пропосал в кратчайшие сроки попадет в стандарт, уверяю тебя. Но ты же ленивый хуй, поэтому - да, твой пропосал не пройдет дальше обсуждения в google groups.
>>694253 >На вопрос, что именно стало лучше относительно критикуемых автором аспектов языка, ответа, ожидаемо, не последовало. Ну ты школьник, у которого в голове один гейдев и своих мыслей нет, нахуя мне нужна полемика с копипастой этого неадекватного лиспоеба? У него там написан бред чуть менее, чем везде.
>>694413 >Итого с одной стороны старики-пердолики, а с другой – велосипедисты переоценивающие свои возможности. Нахуй так жить. А третьего не дано. Если бы фичи принимали в стандарт С++ с той же скоростью, что и в D, он бы просто превратился в D с хуевым обратно-совместимым синтаксисом. А разработать zero-overhead имплементации разных модных в этом сезоне фич не так просто.
>>694413 >Тем более, люди пишушие конкурентную хуету сейчас страдают намного больше из-за отсутствия таких средств в языке (а потом C# и даже убогие go приматы поясняют за продуктивность, лал). Так есть же уже и stackful и stackless коротюны в виде либ, что еще тебе нужно? Или ты думаешь в стандарте будет что-то охуенно отличающееся? Сахарком это покроют и все.
У меня вопрос, касаемый тщетности бытия программистом под окнеблядикс и тоске по ушедшим временам работы на красноблядиксе. После двух дней(!) гугления и ненахождения вменяемого ответа, я отчаялся до того, что спрашиваю на дваче. Есть задача, которая теоретически должна решаться очень просто стандартными средствами,и которая так и решается на линуксах, но с которой всё не так просто на винде. Задача - упаковать в финальный билд исполняемого файла файл ресурса так, чтобы его можно было считать из кода по указателю просто как область памяти. Условие - использовать при этом мелкософтовские компилятор и линкер(я бы не мучался, если бы это условие не было обязательным). Дополнительное условие - нет возможности использовать .NET Я уже охуел гуглить и ненагугливать никаких вменяемых решений. Теоретически это должно решаться через систему ресурсов студии, но к ней отсутствует хоть сколько-нибудь вменяемая документация, и все официальные документы предлагают решение только через .NET, который я не могу использовать. Возможно, я совсем тупой, и не вижу какого-то очевидного решения, в таком случае подскажете его, пожалуйста, очень прошу! Пока что самое простое из найденных решений - это использовать обёртку на ассемблере(через .incbin), но должен же быть менее жопопроходный способ? Прошу не предлагать включать данные массивом данных в коде. Прошу не предлагать gcc - я и так знаю, что эта задача решается одной строчкой с ld. Мне нужно решение для студии.
>>694452 >Прошу не предлагать включать данные массивом данных в коде. Самый нормальный (кроссплатформенный) вариант - сделать pre-build rule, в котором твой ресурс сконвертится в .inc файл и добавится к существующему коду через #include "yoba.inc". А так гугли windows api resources.
>>694472 Критерий не у меня, а у начальника. >>694477 Спасибо, кажется, это то, что нужно. Сейчас попробую. >The proper syntax is hard to figure out just from reading msdn docs. Это мягко сказано ещё.
>>694490 Ну вообще он прав. Постинкремент МОЖЕТ быть медленнее. Если это итератор, то при постинкременте приходится создавать копию текущего состояния, чтобы её вернуть.
>Как считает Страуструп, объединение разработки этих двух языков принесло бы большую пользу, но оно вряд ли возможно по политическим соображениям. Так что практическая совместимость между C и C++ постепенно будет утрачиваться.
>>694207 Не, ну много где делают свои контейнеры, свои аллокаторы. В Qt, например, при наличии своих контейнеров, перешли к использованию стандартных алгоритмов. Не говоря о том, что стандартные контейнеры тоже рекомендуют использовать, где уместно.
С помощью const std::queue<Yoba>& getYobas() нужно получить ъочередь йоб в другом классе.
Так вот, auto yobki = getYobas() будет достаточно, или нужно auto& yobki = getYobas() ? А что если не было бы "const"? Тогда в случае с "auto" вызывалось бы копирование?
>>694543 >>694523 Я (мимокрокодил) стараюсь всегда использовать const и & вокруг объявлений auto, если они подразумеваются, чтобы читатель кода видел мои намерения. Норм же?
>>694633 Суть в том, что каноничное ООП не так уж часто и нужно. На Qt пиши - точно познаешь, так как часто придется писать свои классы на основе всяких QAbstractYoba
>>694657 Балда, наоборот Qt это кресты для людей, а не для мазохистов. Нормальная IDE, великолепная встроенная документация, и отличные плюшки на любые потребности и случаи жизни.
У меня есть класс А. Нужен новый класс В, который поглощает функционал А, но методы и переменный в нем названы по другому ( для удобства, ясности, однозначности). Писать В заново или есть какой-то способ унаследовать с переименованием? _наркоманджпг_
>>694018 Ptr-container из буста. Spatial tree бустовый из geometry и велосипедный R*. Хитрый вариант листа с Union для упаковки опциональных данных. Куча кастомных итераторов. Это вспомнил на вскидку
>>694662 Но после чистого c++ на одном main.cpp от Qt мне страшно. Уже, конечно, читаю этого Шлее, но мне такого плана книженции никогда не нравились. Предпочитаю методом научного тыка все осязать
Бля шо за хуйня, апплаюсь на hh на C++ вакансии, на которые анкетой 100% подхожу, но меня сбривают. Т.е. я понял бы, если провели собеседования и тогда им что-то бы не понравилось. А тут тупо даже не приглашают. Что происходит бля?!
>>694761 >>694764 Нет, ну я серьезно. Может есть какие-нибудь особенности вакансий на hh.ru? Анкета с опытом 2.5года, не нуб, вся хуйня. Приехал в Россию из Украины и ищу здесь работу. А мне из 13 вакансий сразу 5 отказов. Шо за хуйня, спрашивается?
>>694776 Политика же. Кряклы не хотят ватана на работу брать. А ватаны считают что ты должен с калашом бегать и хунту стрелять. А не в России прохлаждаться.
>>694785 > Поставил Хуево же. Разве что для теста. А так на собеседовании наверное расстроятся. Паспорт же у тебя не российский чтобы совсем скрыть прошлое? Может попробуй говорить что ты с другого города, Днепр например. Донецк это слишком депресивно.
>>694800 Ну статический анализатор, не ворнинг компилятора. Андроид студия, например, выделит подобное (в с++ коде, ndk) желтеньким. Больше IDE на текущем компе нет, так что проверить не могу.
>>694804 Еще один раз спрашивал, что конкретно не нравится, ответили "слишком специфический опыт". Это вообще как понимать? Ну да, бизнес логика немного необычная. Но все остальное как и везде же.
>>694624 Со стандартными контейнерами мне более удобно проходить по map'у.
У qt преимущества тоже вроде бы есть, но на мой практике мне показалось, что они заключаются лишь в наличие некоторых сахарных методов.
>>694662 QtCore слишком жирный, как по мне. Слишком высока связность у этого вашего Qt. Но если не байтоёбствовать, то норм, да.
>>694668 Добавь абстрактный класс в верхушку иерархии и используй агрегирование вместо наследования.
>>694825 Пиздец, как ты такое мог написать? Я не засну теперь нормально после такого. Эта функция должна быть раз в 10 короче. И впредь литералы ставь слева в блоках условия. Но это всё равно пиздец.
>>694843 При деплое получается 20 мегабайт что ли, запамятовал уже. Не много, но и не мало. Отладочная сборка. Там, где это критично, лучше обойтись легковесными либами. Мне-то норм, но таки не дает покоя наличие тонны какой-то странной хуеты, которая мне никогда не понадобится.
Если пройтись по so'шке qtcore командой strings, ты сможешь найти там пророчества про тебя и твою мамашу.
>>694848 Некоторые буст жуют. Да и не для всех предметных областей Qt нужен. Есть еще сотни отдельных либ для логов, сериализации, фс, кодировок и интернационализации, потоков (привет c++11-богам) и многого другого из Qt.
Я вот на своем проекте использую Qt. И это значит, что если я захочу переписать сеть или потоки без Qt (да хотя бы ради интереса) то придётся переписывать половину всего кода. Не то чтобы я хочу свалить всю вину на Nokia/Digia за непродуманный дизайн своего поделия. Но мне кажется, что это пиздец сложно -- совмещать Qt сигналы/потоки с другими либами.
Так-то, работает -- не трогай. Но из-за этого проект в стагнации, потому что Qt не всемогущ, а лезть в код самого Qt мне сильно лень при наличии альтернативных либ.
В стандартной библиотеке нет столь высокой связности, потому-то (и из-за обратной совместили) она и развивается медленно -- старые пердуны разделяют мою паранойю.
>>694859 >за непродуманный дизайн своего поделия Наоборот, лучшего дизайна библиотеки чем в Qt - в жизни не видел. Часто, даже стоит только подумать "мне нужна такая то поебень" - и она там есть, стоит подумать про "нужен какой-то метод" - и сцуко, он там есть и называется именно так, как т ы ожидаешь.
Собсно, в Qt есть практически все, редко возникает необходимость "сочетать" его с другими библиотеками.
>>694303 Спасибо! А насчёт практики? Изучил https://habrahabr.ru/post/117996/, но вообще весьма смутное имею представление о том, как проходит собеседование на джуниора по с++. Если предложат прямо на месте реализовать какой-нибудь алгоритм уровня 2-3 курса, то я попыхчу, но сделаю, но не больше.
Считается ли по умолчанию, что программист на крестах должен уметь в технический английский (то есть в требованиях к вакансии тех. английского нет, но знать он его должен все равно)?
>>695119 Есть n натуральных чисел. Нужно разделить их на k отрезков числа идут подряд и пропускать числа нельзя но между отрезали могут быть числа не входящие не в один из отрезков минимальной длины m. Так чтобы минимальное средне арифметического отрезка было максимальным. У каждого отрезка есть средне арифметическое СА и нужно разделить последовательность на отрезки так чтобы минимальное из СА всех отрезков было максимальным. Надеюсь вв поняли. Ограничения n<=10000 k<=500 и m от 3 до n/k.
Может кто сказать по поводу вещей, которые нужно знать чтобы интервью на jun dev`а пройти? Не думаю, что пару прочитанных книжек достаточно будет. Второй год уже пишу на C++, учиться в универе реально заебывает, хочу уйти работать. Если кто-то скажет, что конкретно будут спрашивать/что нужно знать при поступлении на работу, буду благодарен.
>>692400 (OP) Котаны, помогите с решением задач, пожалуйста
1)Написать функцию, которая будет принимать в качестве аргумента одномерный массив целых чисел и возвращать разность между наибольшим и наименьшим значениями элементов.
3) Написать функций my_strcpy(), my_strcat(), my_strlen(), my_strcmp() (две на выбор), которые будут работать аналогично библиотечным функциям strcpy(), strcat(), strlen(), strcmp().
4) Написать функцию, рекурсивно вычисляющую сумму ряда вида Σ 2x/x!, где х принимает дискретные значения от 0, до 20 с шагом 1.
>>695143 На джуна нет конкретных требований, все очень сильно зависит от конторы. Нужно брать количеством, между собеседованиями подтягивая на чем засыпался. Но в общем как минимум нужно понимать stl (итераторы, функторы), знать ответы на традиционные подъебки (виртуальный деструктор), какую-то библиотеку виджетов (Qt например) в общих чертах - имеется ввиду MVC или подобные паттерны, событийное программирование и т.д. Ну и в базвордах ориентироваться, ООП и т.п.
Исходники не причем. В б кто то создал тред с просьбой помочь сделать лаболаторку на С, ну я решил проверить себя и написать на плюсах. На идеоне компилится.
>>695143 Тезис первый: без знания предметной области ты можешь устроиться только макакой, вне зависимости от опыта/знания самих крестов. Тезис второй: макаки на крестах получают очень мало, потому что все студенты изучают кресты на начальном уровне и создают высокую конкуренцию.
>>695142 >но между отрезали могут быть числа не входящие не в один из отрезков Щас перечитал условие там не понятно написано. >k*m<=n >сумма всех T-iых должна быть равна n.
Скачал значит Qt 5.6.0, пытаюсь собрать пример с кубиками, а эта хуйня говорит This example requires Qt to be configured with -opengl desktop Мне что теперь вручную Qt пересобирать что ли?
>>695211 Вставь текст ошибки в гугл, мб тебе отдельно чото докачать надо или другую сборку. Мб для выбранного тобой тулчейна так собрали. // не у компа сейчас
>>695238 Как я понял, в примере устаревший QtOpengl, а сейчас уже работают через QtGui и опнгл туда зашито с -opengl dynamics, поэтому эта херня его не видит. Могли бы и обновить пример.
>>695667 Нет, это как раз таки универсальные знания, которые неплохо иметь, но которые играют не такую важную роль. А предметная область это, возможно не связанная с языком и программированием вообще напрямую, инфа по тем проблемам, которые в конечном счете решает твой софт. Например, для гейдевелопера предметной областью будет игростроение, оно тянет за собой компграф, компграф тянет векторную геометрию, ну ты понел. Или, скажем, ты пилишь какой-нибудь финансовый софт, тогда ты должен знать статистику, вычислительные методы, ну и в экономике хотя бы терминологию понимать.
Вариант тупо нанять абстрактного кодера и транслировать ему задачи в общепонятных терминах тоже есть, но тогда все равно надо иметь прослойку - дополнительных консультантов по предметной области, чуваков, транслирующих задания в кодерский язык, и так далее. Получается дороже, поэтому обычно стараются нанимать тех, кто так или иначе в теме. Иногда дополнительно нанимают сотни макак-джунов для черновой работы, но там платят мало, задачи неинтересные, и ничему ты не научишься, а поэтому и не вырастешь в синьора. Как-то так.
Я как-то раньше не задумывался. Что делать, если мне нужно представить массив массивов массивов массивов ... массивов. То-есть, большое кол-во измерений. Так же скажем, что он может менять размер динамически (то-есть, нельзя использовать одномерный массив, как в геймдеве делают, и обращаться к нему типа arr[i*width + j]). 1d массив: обычный указатель. 2d массив: указатель на указатели. 3d массив: указатель на указатели на указатели? И так далее? С такой штукой же работать вообще невозможно. Как обычно делают это?
>>695799 2d массивы нужно делать единым куском. struct Yoba { int data; int cols; int rows; void get(int i, int j) { return data[irows + j];} };
Если 3-е измерение небольшое, например цветная картинка RGB, лучше сделать массив не int'ов, а struct Vec3f { int r; int g; int b};
Если третье измерение большое, то можно уже делать указателями. struct Yoba3d{ Yoba* yobas2d;};
И, наконец, если у тебя, допустим, пятимерный массив, нужно смотреть в сторону sparse структур данных.
struct Yoba5d { vector<tuble<int, int, int, int, int>> data; void set(int i, int j, int k, int l, int m, int value) { data.push_back({i,j,k,l,m,value}); } };
Почему? Потому что dense массив с ростом измерением очень быстро растет. Например, пятимерный массив со стороной "куба" 10 будет иметь размер 10^5, а со сторонй куба 100 - 100^5.
>>695840 В реальности никто не закладывается на тензорные структуры - с такой срамотой непонятно как работать. Если что-то больше трёх измерений и с этим активно работают, то следует изучить внутреннюю структуру или как-нибудь аппроксимировать. Смотри cross-approximation, SVD, HOSVD, Tucker decomposition, (Quantized) Tensor Trains.
>>695840 Ну-ка давай поясни, чем это твоя схема лучше использования индексации вида i + j K + k K L + l K L M + ...
>>695743 Хм, но разве знание предметной области - это не требование для синьоров? А для тех кто ниже, предметная область - желательно, но не обязательно?
>>695965 Тогда зачем, по-твоему, нужны всяческие ШАДы, мэйлрушные курсы, студенческие стажировки и прочее? На них ведь не кодить учат, а как раз предметной области, при том, что никто тебя не возьмет синьором сразу после.
>>695799 Собираешь массив из маленьких элементарных с фиксированным размером, которые индексируются другим массивом. Для 3д, например, составляешь из кубических массивов со стороной, скажем 16 элементов. Тогда при увеличении размера достаточно перестроить только массив индексов.
https://habrahabr.ru/company/infopulse/blog/279927/ Чото прочитал и погрустнел. Обещали мажорный релиз - теперь собираются релизнуть 2,5 математические функции палезнасть и стандартизировать убогие директивы отключение варнингов, которые везде свои 9000 лет. Даже банальный constexpr if не завезут.
Аргументы в защиту старпёров пожалуйста, хочется уринировать чью нибудь мамку.
Пиздос посоны, не могу сделать асинхронный вызов на C++/CLI.
Пикрелейтед короче. Хотел, чтобы при нажатии кнопки StartButton асинхронно запускалась функция ololo. Но всё выполняется последовательно и форма подвисает на несколько секунд, пока выполняется ololo. ЧЯДНТ?!
>>696202 Ну бля, сам не люблю эту хуйню. Мне нужно по быстрому GUI прикрутить к научной работе, хотел в winforms состряпать на отъебись. если бы скорость была не критична, на шарпе бы сделал
>>696211 Это ужасно, сам был в этой ситуации, нужно было гуй пилить на шарпе, а критические по скорости куски кода пилить на сишке и пинвокать. А сейчас так вообще есть возможность на расте такие куски пилить, чем я и пользуюсь.
>>696212 >>696180 >>696210 Вы тралируете так? Очевидно же, что необходимость создать объект класса yoba в классе yoba следствием плохо продуманной структуры приложения.
>>696217 Начнем с того что создать объект класса внутри самого себя (в общем случае) нельзя в принципе. А содержать ссылки(указатели) как на самого себя (у каждого класса уже есть this) так и на другие инстансы своего класса он спокойно может - например связный список. Мне кажется анон именно его и пытается запилить.
>>696226 >Когда нужно выделять память на стеке Когда эта переменная используется только в текущей области видимости (от { до } функции всесте со всеми вложенностями).
>>696252 >И что. Выделил на стеке, вернул на стеке. Все без кучи. 1) Передать 4/8 битный адрес вместо целой структуры куда быстрее; 2) Прокатывает до тех пор, пока стек не закончился. А он заканчивается где-то в районе 4 мб. >>696249 Ещё одно животное читать не умеет. Иди нахуй просто.
>>696257 >Передать 4/8 битный адрес вместо целой структуры куда быстрее Без разницы, на самом деле. И так и так обращение по адресу идет. Все результаты больше машинного слова возвращаются через указатель на стек в предыдущем фрейме.
>>696265 Речь не об обращении. А о том, что если у тебя струкрура, например, величиной в мегабайт - весь этот мегабайт будет бессмысленно скопирован. Если компилятор не соптимизирует, на что бездумно полагаться лучше не стоит.
>>696198 Обидно из-за модулей и контрактов, но лучше никакие не впиливать, чем впилить неготовое и навсегда зашкварить стандарт, обратно-то не выпилишь. Все остальное вообще нинужно, либо сахарок, либо сверхизбыточнные фичи.
>>696285 Что не готово-то? Модули? Главный камень преткновения – экспортируемость йобана в рот текстовых макросов! Спасибо комитет, нас в 2016 они очень волнуют. Можнобыло просто послать нахуй эти макросы – стандартные инклюды-то никуда не денутся.
Про избыточность – ну разве что ufcs. Всё остальное нужно более чем, если ты конечно не наслаждаешься анальными костылями. И уж тем более это всё обкатано десятилетиями в других языках, не надо пиздеть про "кококо сыро". Они решили устроить песочницу – пусть весь мир подождёт, чо.
Итог – хули смысла от 3-х годовых стандартов, если новые фичи всё равно вводятся раз в 10 лет?
>>696290 Они не хотят сделать что-то по экспортируемости шаблонов сверх того, что есть. Нахуя модули, если по-прежнему придется делать гигантские шаблоны в один файл? Пущай допиливают.
Упившись властью, ты умом сгнила,
Погрязшая в сомненьях и раздорах!
Нет мудрым предложениям числа,
Но счесть бы смог по пальцам однорукий
Советы, что ты ладно приняла.
Сплетаясь в склоке, как весной гадюки,
Вы модули отвергнули в обрат.
Исхода не дождутся наши внуки!
Пока ваш пленум спорами объят,
Приступит к делу колыбель порока,
И Билла псы их к жизни претворят.
Страшась сойтись во взглядах раньше срока,
К своей кончине ускоряете ход:
Немного от оков стандартных прока,
Коль ересь преимущество дает.
Старший брат:
Предыдущий:
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-треды