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:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Есть текущая работа (100к+) в ДС, но она связана с промышленной автоматизацией. В геймдев вакансии все - ЮНИТИ ХУЮНИТИ, Сишарп и прочая блевота, а я, все таки, не зря байты ебу. Да и ААА пишется на плюсах.
Пердолю по чуть чуть опенгл, но мне кажется, что это немного не то. С другой стороны, взять UE4, нашлепать в редакторе игру - тож хуета. Что делать?
>>702236 чувак твоя работа в 10 раз лучше той чем тебе придется заниматься в русском игрострое просто поверь занятия типа портировать очередную ios игрулю на андроид или сидеть на саппорте второго уровня какой-нибудь mmorpg - это еще не самое страшное что бывает в нашем геймдейве
1. Как по хардкору WinAPI выучить? Чего почитать/посмотреть. Книги может годные какие есть? Ну так, чтобы сегодня читать сел, а через месяц уже в кнопочки/менюшки мог.
>>702282 я тебе говорю не о системе.. читай весь пост. как мне стащить пик с потока типо /dev/video0 без v4l2 уже принимается любой способ от qt до чего vlc осбатхерт мой.. ну прости!
>>702363 на С++ пишем рендер + физику и пару карт на рисуем код будем держать на гите.. обсудить все аспекты в токсе. я начал пока рендер писать.. смотрю вот как мои знания термеха вложить в вертексный шейдер и написать модель маниямира для 6ти степеней свободы для каждой модельки. такие дела.. потом сеть... звук гденить спиздить. потоки стабилизировать. и вуаля.. програмач тестит q5-hl3-aninemod
>>702555 Вот это ты лолка. Твой решарпер не лучше эклипса. Нахуй на винде тогда сидеть? Особенно, когда проект кроссплатформенный, а проектные файлы - Cmake. Вот это ты аутист, еще и деньги тратишь.
>>702449 На больших проектах(от 400МБ исходников) eclipse и clion будут жрать до 6GB. В сочетании с ssd тебя это полностью устроит - никаких зависаний не будет.
>>702632 Что поделать, умственно неполноценные неспособны использовать человеческий интерфейс и считают его дерьмом, так что для этих отбитых даунов-аутистов сделали консоль.
>>702666 >702662 >702658 > от 400МБ исходников >Это как? Что это должен быть за проект, чтобы в нём было 400 МБ исходников? >Почти 400 мегабайт текста в проекте в котором работаю. Игра для пека.
>>702666 >702662 >702658 > от 400МБ исходников >Это как? Что это должен быть за проект, чтобы в нём было 400 МБ исходников? >Почти 400 мегабайт текста в проекте в котором работаю. Игра для пека.
>>702708 >702706 >-P, --no-dereference >don't follow any symbolic links (this is the default) Алиас на комнду в шелле? Если нет, то ита бах. Репорть, пофиксь, вот это все.
мимо в бсд годно идет марс и кутекреатор. но в консоли писать.. вим и скриптов на все случаи жизни на баше.. хотя лол.. можно иде накапчевать на нкурсесе.. чтобы с хоткеями и вкладками.. но это трешак! особенно на стадии анализатор кода не работает . выйдет годный продукт.. лел сам пересел бы туда если бы не работа с иксами в проекте
>>702855 Интересно. Не сталкивался с этой задачей, но гугол дает линк https://forums.freebsd.org/threads/19127/ Советуют через mplayer mplayer tv:// -cache 128 -tv driver=v4l2:width=640:height=480:device=/dev/video0 > /dev/null 2>&1
Но это скорее всего хуйня. Есть мысль копать сорсы webcam прог. Но это платформ-зависимо будет.
>>702689 Устроился по блату на 113 тысяч в ДС с опытом работы полгода (пхпшником лал).
Сделал правильно тестовое (1 из ~50 кандидатов, серьезно), потому-что эйчарка спалила мне, что на нем будет (я эту тему поучил пару дней). Прошел 2 собеса, второй был на английском. Ну и взяли. Сижу уже 4 месяца нихуя не делаю вообще, т.к. ждем, пока проект нам отдадут.
что бы блять в конце не ставил и system("pause") и cin.get(); и даже _getch(); постоянно ебанная ошибка "Вызвано исключение по адресу 0хсссссссссс(ntdll.dll) Нарушение прав доступа при чтении по адресу 0хсссссссссс"
>>702885 >>702884 в принципе utox цепляет камеру в бсд, но смотреть как это в utox сделано -- крайняя мера т.к. тогда срок работы разрастется в недели! qtlibs не жует видеопоток с камеры. сейчас в поисках гайда от дивелопероа webcamd эти ребята хотябы /dev/video* намутили.. должны же они изигайд оставить!
>>702944 >>702948 крч.. ща я буду батхетить о мелко мягктих ставь qtcreator + mingw не еби себе мозг! чисто MSstudio херня зы.. вопросик уровня lab1, вангую ошибка вылетает в дебагере, а бинарь ты не пробовал запустить, а он рабочий
1. Выкинь нахуй ввод матриц с клавиатуры, ты что отбитый там? Вводишь ручками в файле и передаешь файл как аргумент программе - вот так делают белые люди.
2. Вместо "using namespace std;" делай "using std::cout;"
>>702989 > 2. Вместо "using namespace std;" делай "using std::cout;" > 6. Вместо system("pause") юзай std::cin.get(), как сказал товарищ выше. В чем разница? Я новенький.
>>702990 >2 Ты переносишь все имена из ::std в неймспейс ::. Если захочешь написать свою функцию sort, тебя ждет сюрприз.
>6 system("pause) платформозависимое говно, которое дергает внешнюю программу через систему. Нахуя этим заниматься, когда нужно просто дождаться ввода любого символа в stdin, что прекрасно делает .get() в istream?
Кстати на счет Рихтера, кто-нибудь его читал строго от начала до конца? К чему там всякие файлы манифестов, ебала со структурами безопасности. Все эти флаги, ну нахуй они? ИРЛ их кто-то использует? Там ведь все в общем заключается, что твой процесс имеет/нет право что-то читать/записывать, доступ к объектам ядра и т.д. Вот это вот нахуя так подробно все описывать, поясните, кто знает.
>>703323 Шо то хуйня, шо это хуйня. Правильные посоны выделят общую для этих нужных типов функциональность в адаптер, а еще лучше приведут их к общему интерфейсу, если есть возможность рефакторинга. И да, тут ты скажешь, что общей функциональности у них - хуй да нихуя, а я, в свою очередь, отвечу, что тогда тебе в принципе не может понадобиться хранить их вместе без какой-либо дополнительной инфы о том, что там за объекты. А если инфа есть - берешь ее и хуяришь в адаптер, чтобы в нем были безопасные селектирующие методы.
Котаны, взяли в контору меня, без опыта, пишу под ведро, юзаю c++ builder, это за кресты считается? просто вижу многие примеры и работы на чистых крестах и там все по хардкору с использованием библиотек, а у меня куча готовых функций предоставленных средой и как то это более халявно что ли выглядит..
>>703659 Помню пересел с RAD Studio на чистые кресты и охуел, вместо пары вызовов стандартной библиотеки я должен был обмазываться гигабайтами бустов, сотнями говнобиблиотек и тысячами строк велосипедов вокруг апи, а вместо гуя только сосноль и хуй за щекой.
>>703483 Таки забыл добавить, что они все уже унаследованы от общего интерфейса, но толку от этого большого нет, в вектор их все равно не засунуть. Просто не хотелось бы выделять память на них где попало и как попало.
Хотя вроде можно без утечек сделать. Попробую так.
Посоны, есть кто обмазывался http://beginners.re/ ? Коллега посоветовал для понимания С++ (я и сам подобного рода материал искал (оптимизация, распределение памяти, как работает программа, вот это всё). Вопрос в том норм ли мне зайдёт (с цпп более-менее дружу), если я не знаю ассемблера, даже все РОН не вспомню?
>>703897 >>703897 Пнятно, как их подключить ? Говно, мне анон посоветовал eclipse, а эта программка не запускается совсем, пишет :java was started but returned exit code=13
>>703899 Годная книга, но вряд ли поможет именно в понимании плюсов. Оно даст лишь понимание во что эти самые плюсы компилятся и как исполняются. Про оптимизации там вообще почти ничего нет.
>>703903 > Говно, мне анон посоветовал eclipse, а эта программка не запускается совсем, пишет :java was started but returned exit code=13 Сам решил проблему. > Пнятно, как их подключить ? bump
Пездюки, может кто нибудь пояснить с хуя ли string& копируется? И почему проблема решается именно константной ссылкой? И почему это настолько гениальная проблема, что в 17-м стандарте добавили string_view
аноны, помогите, треда по C не нашел, поэтому спрашиваю здесь. читаю k&r главу 1.9, в ней написана функция getline, которая записывает строку в массив s[] размером lim, в конце строки добавляя \n и \0. собственно вопрос, почему массив не переполняется? допустим, создаем массив arr[5]; записываем в массив, пока i<lim-1, т.е. i от 0 до 3 (4 элемента в массиве), когда i=4, выходим из цикла и помещаем \n в 4(последний) элемент массива, а для нуля места не остается
>>704101 > записываем в массив, пока i<lim-1 Да. При этом очередного с = getchar() не выполнится. > выходим из цикла и помещаем \n Условие c == \n не выполняется.
>>704157 Ты не понял. VS как была на винде, так и остаётся. Этот плагин позволяет по ssh посылать сорцы на удалённую linux-машину и там собирать. Вроде поддерживает удалённую отладку.
Анончики, помогите. Как мне лучше ограничить мой game loop? Проблема в том, что он юзает целое ядро проца, а sleep, как я понял, получает минимальное время на задержку и его использовать нельзя. Как быть?
current = time() // Что-то делаю sleep(1000/60 - (time() - current)),
то поток уснет на дольше, чем нужно. И fps не будет стабильным. Сразу скажу, что я тупой и если я не так делаю очевидные вещи, то просто поясните как делать.
http://ideone.com/0ZZ68E 1. Строчка №8 передача shared_ptr по значению - норм? На передачу по ссылке ругается. 2. Верно ли я понимаю, что унаследовав от этого класса например класс двунаправленного узла, все методы текущего будут не юзабельны, ибо shared_ptr<Mono<int>> не будет конвертироваться/интрепретироваться в shared_ptr<Bi<int>> ?
>>704408 Хотя нет, туплю. Оптимизировать не будет, если в теле цикла вызывается не const метод, и класс не темплейтный, его определения не видно. Тогда компилятор не может сделать вывод, что size не меняется.
>>704298 А если зациклить вызов функции которая запоминает время своего последнего "удачного" ретунра и если достаточно времени не прошло, то выполняет какие-то полезные для игры действия типа расчёта физики, а если время наступило, то рисует новый кадр. В случае отрисовки кадра делает "удачные" ретурн иначе "неудачны". Как обычно игры делают? В какой простой игре посмотреть как это сделано? Дум слишком большой. Мимо проходил.
Создать циклическую ссылку на базе твоей хуйни - нехуй делать, поэтому ты делаешь что-то не так. Тебе нужно или копировать списки, или же выдумывать сборку мусора.
>>704527 Спс. Циклическую ссылку? >>704485 В основе лежала идея, насоздавать и владеть лишь головой. Ну допустим засуну я в вектор и толку? Списковые операции как выполнять то?
>>703684 > Qt Существование этого набора велосипедов как нельзя лучше подтверждает мои слова о том, что "стандартные" кресты это неюзабельный кусок дерьма.
>>704537 Языки до явы вообще все были куда хуже в плане стандартной библиотеки, а в эпоху создания плюсов наличие libc на пользовательской машине было роскошью, лол. Не стоит забывать что плюсы это легаси, и никакие лямбдочки раз в 10 лет этого не изменят.
>>704585 >Языки до явы вообще все были куда хуже в плане стандартной библиотеки Бля, ну это вообще жирно. ArrayList, надо же было такое говно выдумать.
>>704587 Да, ебланское название, зато в ней было вообще всё что нужно и ява на этом выехала. Говно сейчас подтвердило, что похуй насколько убог язык – главное чтобы за тебя уже всё сделано было.
>>704592 Для признания всех джаваблядей опущенцами хватит прочесть страниц десять любого их учебника для ньюфагов. Встроенные типы отличаются поведением от классов, вообще пушка.
>>702133 (OP) ОП, это чума! Хотя бы кто-то услышал реквест хорошо/плохо - стиле. Можешь ещё по классике пройтись? У лукоморья, что-нибудь из Евгения Онегина или стихов Маяковского?
Алсо, попробовал передалать стишок про <<травинку и лесок>>.Вышло ничего.
Плюсаны, посоветуйте редактор кода для линукса. Хотелось бы что-то типа notepad++ - с подсветочкой кода и привычными хоткеями (а то я пока не могу привыкнуть к виму).
>>702998 Хуй знает. Тоже думал почитать (советовали для системного прогр-ния), но там столько всей этой низкоуровневой хуиты, что чуть крыша не поехала. Так что ЦА книги - наверное какие-то лоу-левел виндовс-разрабы.
>>704101 Пользуйся дебаггером в подобных случаях. По началу будет очень непривычно, но быстро привыкнешь. Тем более в визуал студии дебаггер очень даже охуенный даже в vs 2005
>>704604 Но область выделения памяти не зависит от этого в крестах. А там - встроенные типы передаются по значению, объекты по ссылке на кучу, отдельный метод для клонирования, ну пиздец же. И эти петухи еше что-то кукарекать смеют про выстрелы в ногу
>>704757 Вы любите джаву? А я на нее срал! Стране нужны байтоебы И очень жесткий анал Товарищ, Не мусоль словно клитор, кнопку Постирай свитер, побрей бороду Сделал коммит - посылай всех в пизду Не сделал - смазывай попку
>>704813 стоп стоп стоп.. я типо юзаю переменные формата int количесто_огурцов_у_анона ты говоришь что int num_of_количесто_огурцов_у_анона из-за проблем с полиморфизмом .. анон который вытащил мой скрин говорит что все мыи так понимаем.. по сути это: int num_of_a, num_of_b1.. bnum_of_Aamf32 // зашквар
но имхо -- не надо хранить данные в переменных и ебаться с этим! придумали же полиморизм! и все что не попадает под сигнатуросовпадаемые траблы выдавать из класса с данными функцией. .. хотя я считаю что вот тебе стоит глянуть в то как растет opengl. Он давно отказался от clearcolor3F подобных функций. еще в 200(0-4) ом году. И думаю что нам не стоит вдаваться в это. Новые фичи С++159 избавят нас от совпадений сигнатур и все будет круто
>>704841 Вот смотри. Допустим есть переменная unsigned int penisSize мы не знаем в чем Size. Поэтому мы пишем unsigned int cmPenisSize unsigned int inchPenisSize и теперь понимает в каких ед. измерения.
>>704841 > >но имхо -- не надо хранить данные в переменных и ебаться с этим! >придумали же полиморизм! и все что не попадает под сигнатуросовпадаемые траблы выдавать из класса с данными функцией. Поясни. Желательно с примерами
>>704849 Я имею в виду unsigned int cmPenisSize или unsigned int inchPenisSize. Вообще, это и есть kind, который ставится префиксом в имени переменной.
>>704849 но вот я ща играюсь с opengl и такой проблемы у меня не возникает т.к. я мерию все в метрах. но хотя я понимаю что unsigned int penisSize = 0.03 будет равносильно unsigned int penisSize = 0 что крутосыграет на взрыв.. как это 0 см когда 3! ... ... ... >>704850 ну я не догнал с самого начала о сути венгенрской нотации но имел ввиду
class penis { public: int GetPenisSize() // В метрах { return PenisSize; } float GetPenisSize() // тоже в метрах { return PenisSize; } double GetPenisSize() // а тут уже нахлест сигнатур { return PenisSize; } private: double PenisSize; // а тут длинна пениса в метрах } ... ... но вот в этом классе лучше всетаки юзать венгенрскую нотацию для члена измеренного в дюймах и членах в миллиметрах..
и добавим в приват int GetInchPenisSize() { return PenisSize/2.54; } float GetInchPenisSize() { return PenisSize/2.54; }
>>704948 typedef это тебе не newtype какой нибудь. Для компилятора SizeCm и SizeInch - один и тот же тип, поэтому он не может разрешить перегрузку конструктора по одному и тому же типу, ну а перегрузка по возвращаемому типу вообще не поддерживается даже если бы компилятор и считал сайзы за два разных типа
>>705211 >1) Вызовется ли конструктор 228 раз? Нет пока не напишешь new. >2) Если да, освободится ли память после клининга или удалятся только поинтеры? Только поинтеры.
Почему в библиотеке C++ такой убогий интерфейс? Пример говна: vector.erase(vector.begin(), position) вместо красивого vector.erase(position). Библиотеку проектировали индусы, которым доплачивают за размер кода?
>>705273 Второй раз вижу этот вопрос в этом итт треде. Всегда должен быть итератор, а не int для индексирования массива. Но я не понимаю почему у итератора нет конструктора копирования в int и конструктора который принимает параметр int. Сишники должны были быть довольны.
>>705273 >конструктора который принимает параметр int Потому что придется передавать еще и коллекцию в этот конструктор, что мало отличается от текущего решения.
>Пиздюк, ты скажи, как вызывать v.erase(4) вместо уебищного v.erase(v.begin() + 4). Охуительные у тебя проблемы, скажу я тебе. Просто так сделали и никого это не ебет. Хочешь исправить - сделай proposal и если противоречий не будет, его примут. C++ - это open source, тебе никто ничем не обязан, лалка.
>>705211 >1) Вызовется ли конструктор 228 раз? Вызовется. Только конструктор указателя. который ничего не делает и вообще его нет, но для формальности >2) Если да, освободится ли память после клининга или удалятся только поинтеры? Вектор вызывает деструкторы для элементов, которые он хранит. В данном случае — деструкторы для указателей. которых также нет и ничего не вызывается. А потом освободит память, занимаемую элементами.
Сап ананасы. Имеется концептуальный вопрос. Напейсал я TCP-сервер и клиента к нему на сокетах.
Надо, чтобы клиент среагировал, если сервер закроет сокет по таймауту. Соотвественно, вопрос, как обычно такие штуки реализуются?
Пока думаю в сторону создания отдельного потока на клиенте, который все время читает сокет и при получении определенного сообщения от сервера, уведомляет юзера, мол, сервер разорвал соединение. После чего закрывает сокет на клиенте.
>>705311 В идеале сервер должен отсылать сообщение клиенту что он отключен по таймауту. А в общем у проблемы проверки наличия соеденения с сервером нет нормального решения.
>You are given N integers.Then you are given 2 queries.First query consists of 1 integer denoting the position which should be removed.Next query consists of 2 integers denoting the range that should be removed.
Не сойдет ли мое решение за овер-инжиниринг? Мне просто нравится писать код. Хотел еще сделать проверку выхода индексов за пределы вектора, но получилось менее красиво.
>>705642 Нет, правда. Не могу найти нужную мне пограмму, может выучу какой язык и напишу сам. Просто, если это невероятно сложно и потребует несколько лет, то тогда и пытаться не буду.
>>705651 Блокнот пишется просто, если не можешь написать блокнот - ты не программист. Сколько времени надо учиться/писать зависит только от тебя. С++ не советую, бери шарп/питон/еще что подобное, они проще.
>>705653 >>705657 Я вот что хотел найти, но не нашёл: Органайзер. Вот пик нарисовал, каким должен быть примерный функционал. 1 - окно дат или календарь. Можно форматировать даты. 2 - закладки. На каждую дату или число свои закладки. 3 - собственно тело органайзера, куда я могу писать что хочу. Было бы огромным плюсом если бы там было переключение между обычным текстовиком и эксель таблицей + простенькие форматирования. Чтобы было портативным и можно было с флешки запускать, при чём на разных ОС - линукс и шиндовс.
Тяжело было бы сделать? А на ++ я слышал что это самый гибкий язык, и можно написать что хочешь + отличная поддержка самого языка, и разных платформ.
>>705684 Да в общем не особо, год назад хотел выучить ++ чтобы игры писать. Но на начале учебника забил на это дело, но простейший функционал знаю, остановился на векторах, вроде бы. Сложной выглядит задача?
>>705694 >>705695 Просто, обычно если я выбирал программы, то старался использовать те, которые были написани на С -> ++ -> Python. Да и я иногда читаю что программанейм была переписана с крестов или питона на чистом С, т.е. для меня С это как знак качества и производительности. Или я что-то не так понимаю?
>>705696 >производительности Да, в среднем, но не всегда. Язык на производительность влияет меньше, чем ты думаешь. >качества Нет. На си в среднем выше качество программистов. Потому что многие из них - старперы с хх годами опыта. Что к тебе, очевидно, никакого отношения не имеет. Собственно криво написать на нем наоборот намного проще.
>>705704 Если доьавляешь элементы один раз, то вектор+reserve+sort+ будет самый быстрый вариант. Если потом еще надо добавлять, то upper_bound. Вытаскивать элементы через lower_bound.
>>705657 >Блокнот пишется просто Лол, сразу видно, что ты никогда не работал с крестовыми либами для рич текста. Там обычно такой ад с пауками, если пытаешься шаг в сторону сделать.
>>705719 Короче, интерфейс на крестах - это Qt. Хотя по большей части Qt - это стандартная библиотека крестов, без которыми ими пользоваться для прикладных задач практически нереально.
И вот, интерфейс пишется на языке qml - декларативное описание всей хуйни, для функций - жабаскрипт. А вся технология целиком - QtQuick, смешение крестов/qml/жабаскрипта - все это нужно чтобы писать нормальные гуевые приложения.
Можно хуярить по старинке виджетами, но это ад и сто шагов назад тихо на пальцах
>>705755 В сорт я могу сначала одну лямбду передать потом другую. А в сет только в шаблоне можно компаратор передавать. Это почти тоже сатое что и в класс вписать равнение.
>>705760 То есть ты имеешь в виду, что несмотря на то, что сетом можно отлично сортировать что угодно, он не предназначен для сортировки, потому что синтаксис получается менее красивый, чем у сорта?
>>705704 Если у тебя все значения известны изначально (загнал пять тысяч потом отсортировал) то лучше использовать вектор, если постоянно добавлять-удалять то сет. У сета выше накладные расходы по памяти, с точки зрения сложности алгоритма - сложность у них одинаковая, но так-то с вектором чуть больше работы потому-что его сначала заполнить нужно а потом отсортировать (сет сортируется при заполнении). Но внутри сета происходит пердолинг с указателями, тоесть в общем работа с вектором будет чуть быстрее, скорее всего. Это если тебе не нужно будет удалять некоторые элементы из вектора.
>>705801 Вот что хотел спросить. Я давно искал программу, которая бы делала скриншоты игр и других окон, но все мне не подходили. А в каком-то треде мне сказали что есть какие-то мелкие скрипты на принтскрин, который захватывают текущее окно и выводят куда мне надо, и в них отсутствует чёрный экран. Это правда? Легко на ++ написать?
>>705877 Ты щас про язык? Я про машинное обучение. Ни в ИБ ни в ML не разбираюсь. Хотя шарю в архитектуре компьютера и алгоритмах. За пару месяцев надо хоть чему-то в этом научиться и хоть что-то написать. Будет быстрее если писать буду на крестах.
Если по машинному обучению... Ну, напиши прогу, которая будет распознавать макакину капчу. Хоть с какой то вероятностью. По любому надо будет дохуя параметров и обучать эту парашу.
Сап аноны. У меня вопрос по поведению функции select.
Использую ее, чтобы проверить готовность файлового дескриптора (на самом деле сокета) на чтение или запись. Так вот, при первом запуске программы, когда файловый дескриптор еще не был использован, т.е. это просто int, равный 0, функция при проверке этого "дескриптора" возвращает таймаут (результат работы функции select == 0).
Если же я в программе заюзал дескриптор, поработал с ним, корректно закрыл его функцией close(), то при следующей проверке функцией select, она уже вернет -1, т.е. ошибку.
Вопрос, почему так? Мне надо, чтобы никакого таймаута не было в ситуации, когда select проверяет еще не использовавшийся дескриптор, потому что это явный косяк.
>>705893 Не про то. Я же не умею даже с изображениями работать. Нужен курс по которому я разберусь как такие алгоритмы писать и всё такое. Вспомнил ШАД от яндекса. Ушёл гуглить. Есть что-то ещё?
>>705921 Кто тебе такое сказал? В стандарте вообще написано, что вставка в map за logn. Про красно-черное дерево ничего не написано. Но все реализуют красно-черным деревом. За константу вставка в unordered_map.
>>705941 вроде берешь выделяешь байтов памяти скока нужно.. и циклично пишешь мол скинуть/прибавить бит сверху в случае переполнения/окончания предыдущего.. .. в unsigned должно работать.. как ты провернешь это? я бля не представляю.. я просто хочу узнать что хранится в ебаном /dev/video0 и бля я походу вкатился к вам на долго! но я код пишу хуевенька
>>705989 Куда хочешь. Более разумно под каждую библиотеку отдельное местоположение выделять, но тут возможны нюансы. Нужно потом только указать комрилятору где искать (настроить в ide).
>>706000 Покажи настройку. Я скинул скинул этот файл в папку с проектом, а мне вс пишет: Unable to start program ...<путь к проекту> The system cannot find the file specified. ЧЯДНТ?
Ананасы, вопрос по синтаксису. Меня Qt просто в ступор вгоняет своими файлами, с миллионом наследований, пространств имен, что я понять нихрена не могу.
Занимаюсь олимпиадками, и тут возник вопрос про потоки ввода/вывода. Насколько я понял, есть сишные stdin/stdout и плюсовые cin/cout. И те, и те синхронизированы с IO-потоками ОС. cin/cout работают медленно. Люди советуют отключать синхронизацию: std::ios_base::sync_with_stdio(0), но это не всегда помогает. Так вот, я не могу понять, как подать какие-то данные в stdin. В первую очередь для отладки решений, не меняя кода. В cin можно загрузить, используя cin.rdbuf(), но scanf() их не увидит. Какие варианты?
>>706129 В старом треде были экспериментики https://arhivach.org/thread/94972/#511941 Решили что cin/cout также хорошо справляются если размер буфера увеличить. В олимпиадках даёт 128 мегабайт и если 1 из них на буфер потратить, то ничего страшного. Даже быстрее сишного варианта работать будет.
>>706074 > с миллионом наследований пиздишь, максимум одно, когда будешь перегружать какую-нибудь QAbstractHuitaModel >пространств имен Тоже пиздишь, там одно пространство имен, qt namespace
>>706129 >Насколько я понял, есть сишные stdin/stdout и плюсовые cin/cout. И те, и те синхронизированы с IO-потоками ОС. Есть сишные stdin/stdout и cin/cout читают/пишут с/в них. (Пока ты не запретишь им синхронизироваться). > cin/cout работают медленно Что, прямо так медленно, что заметно? > Так вот, я не могу понять, как подать какие-то данные в stdin. Берёшь и без задней мысли подаёшь. > В первую очередь для отладки решений, не меняя кода Поясни подробнее, чего ты хочешь.
>>706129 >Занимаюсь олимпиадками >cin/cout работают медленно Всегда знал, что олимпиады по программированию — бесполезное дерьмо для дегенератов. Пиздец задача: затюнить cin/cout.
>>706153 >Что, прямо так медленно, что заметно? Не проходят решения.
>Поясни подробнее, чего ты хочешь. В задачах на вход подаются какие-то данные. Чтобы не копипастить каждый раз примеры для проверки, нужно, чтобы перед исполнением они уже были в stdin'е.
>>706156 > В задачах на вход подаются какие-то данные. Чтобы не копипастить каждый раз примеры для проверки, нужно, чтобы перед исполнением они уже были в stdin'е. Сунь в файл и подай программе на вход: ./proga < in.txt >>706158 Хуяйпы.
>>706153 >и cin/cout читают/пишут с/в них И, кстати, ты не прав. Синхронизация идет не между ними, а между общим потоком программы. stdin and cin connect to the same thing (the program's standard input), as do stdout and cout (standard output) and stderr and cerr (standard error) http://www.drdobbs.com/the-standard-librarian-iostreams-and-std/184401305
>>706160 >Сунь в файл и подай программе на вход: ./proga < in.txt Геморно, я ж с IDE работают. В идеале как-то добавить в стандартный запуск такую штуку. Буду пробовать.
>>706167 Ну и как тогда понимать 27.4.1 [iostream.objects.overview] 1 The header <iostream> declares objects that associate objects with the standard C streams provided for by the functions declared in <cstdio>
>>706155 Кстати я лучше всех кресты знаю из олимпиадников своего региона. Они дипломы взяли, а итератором по мапу ходить не умеют. А учитель вообще #include <bits/stdc++.h> пишет. Думаю они потом на джаву перекатятся.
>>706216 > test() Это не тип а функция. Когда пишешь new он ожидает, что ты ему тип назовешь чтобы понять какого типа указатель создавать. А ты ему какую-то функцию скармливаешь которой у тебя даже нет и вообще это конструктор.
Какая разница, где его описывать? Раскидывать его на test.h и test.cpp мне будет весьма неудобно, внутри этого класса должны юзаться функции из того файла, где он на скрине. Я их писать пока не стал, чтобы не смущали.
>>706256 Если тебе нужен доступ к классу только из одного cpp-файла, можешь прямо в нём запилить этот класс. и объявление и реализацию. Только у тебя реализации не было конструктора test()
>>706259 > Но в хедере все инлайнится definition внутри классов хоть и имеют неявный inline, к реальному инлайнингу в смысле вставки в место вызова это не обязано приводить.
>QObject это что? Конструктор у него виртуальный? Если я правильно понял мануалы, то это базовый класс Qt, от которого все остальные объекты Qt унаследованы. На счет его конструктора -- хз.
>>706259 >Необязательно. Но в хедере все инлайнится, так что для больших кусков кода будет трешак.
Я хотел в этом же файле (где мой неработающий класс) еще пару функций определить, которые и в моем классе и в классе окна GUI использовались бы. Плюс одна глобальная переменная, которую бы они все периодически дергали.
Наверное рационально будет мой класс в хедер+цпп, функции тоже в хедер+цпп. А потом хедер с функциями подключить в классе. А класс уже подключить в хедере GUI.
А это можно как-то сделать? Это ж не warning, а самый настоящий compilation error.
В общем, я ради интереса изобразил то же самое, но с раскидыванием на отдельные файлы. Компилятор схавал без проблем. Придется смириться. Но это уже завтра, хватит на сегодня.
>>706289 >В общем, я ради интереса изобразил то же самое, но с раскидыванием на отдельные файлы. Ах, да. Qt != C++ же. Хидеры qmake прогоняет через MOC. Когда как для объявления класса в .cpp-файле этого не произойдёт.
>>706300 Класс со всякими public slot: не является валидным для C++. Хидер с объявлением такого класса прогоняется через MOC, после чего все эти slot-ы превращаются в валидный C++.
Че за хуйня с cin.get()? Пишу ,значит, два числа: одно число, энтер, другое число, энтер, энтер и ответа нет - сосноль закрывается, а когда пишу system("pause"), то она выдает ответ и только если я еще раз нажму, то закроется. Может я что не так жму ? Еще хотел бы спросить: cin>> x >> y; то можно будет два числа просто через пробел ввести ? (это не относится к тому, что я выше написал, там итемы другого класса, здесь хочу узнать про простые переменные int)
Ага, эт тема. Сделай так же, ток наоборот [code lang="c"] #ifdef HER freopen(...); #endif [/code] и пропиши себе в IDE компилять с -DHER
А вообще щас вроде модно стало одновременно класть input.txt и подавать его же на stdin. В итоге системе пофигу откуда ты прочтешь, а тебе не надо извращаться
>>706355 > ответа нет - сосноль закрывается В глаза ебемся или ты совсем не гуманитарий, что можешь прочекать и найти ошибки в коде из тысячи строк за минутку, но не можешь прочесть два предложения? Хуй соси. Несите следующего. Может я что не так написал, но что я имел ввиду: что я не могу оставить консоль, чтобы ответ посмотреть из-за того, что когда числа нет и я жму просто энтер - она выводит ответ и закрывается.
У меня возникают подозрения в этой строчке: >sheet[student] += mark;
Здесь в хэш-таблицу помещается новая пара, если ее не было, и инкрементируется значение, связанное с ключом. STL гарантирует, что при записи нового значения типа int оно инициализируется нулем, а не чем-нибудь еще?
>>706674 Да нет, уже и программу для вычисления площади круга описывает. Только что прочитал, что 1000000000 можно записывать как 1.0E-9, и нихуя не знаю, как это делать.
>>706693 > вычисления площади круга Это тот же хелловорлд. Тебе нужно внимательней прочитать тчо он про манипуляторы пишет. Нужно выставить нужный тебе формат числа, что-то типа std::cout << std::fixed << std::setprecision(16) << qwee; Нужно подключить <iomanip> И 10 в девятой будет 1.0Е9 а не 1.0Е-9
>>706722 ебать доска быстрая? Аноны.. я просто хотел узнать о потоке /dev/video0 в последних трех тредах годноты -- веток 5 из 20 хватит топить треды.. т.к. найти годноту надо скролить про то как .h в иде законектить и как сделать lab1_ans=a+b .. может будем адекватами и не будем раковать хотябы в ставшем мне любимым треде?
Поясните, действительно такая гадость возможна? https://ru.wikipedia.org/wiki/C%2B%2B#.D0.A2.D1.8F.D0.B6.D0.B5.D0.BB.D0.BE.D0.B5_.D0.BD.D0.B0.D1.81.D0.BB.D0.B5.D0.B4.D0.B8.D0.B5 Приведение типов Некоторые преобразования типов не интуитивны, хотя могут производиться неявно. В частности, операция над беззнаковым и знаковым числами порождает беззнаковый результат; однако, в аксиоматике теории множеств множество натуральных чисел (N) является подмножеством множества целых (Z), а совместное использование элементов разных множеств допустимо лишь на уровне общего надмножества — то есть интуитивным было бы получение в результате целого (знакового) числа, но в С++ происходит наоборот, и возникает риск труднообнаружимой ошибки[22].
>>702133 (OP) Парни мне нужна библиотека для mvs, чтобы построить графики. 1) График по функции, например y = x; 2) График по таблице, например x = 1, 2, 3; y = 2, 3, 4 Какие библиотеки можно юзать? Желательно, чтоб не сильно геморно прикручивалась.
>>706942 ну когда пишешь лабу -- да. но я мимо тот байтоёб который писал игру байтоёбя когда стал работать с большим количеством однотипных, но разных классов/структур. понял что можно взять однотипную вешь и пихнуть её в отдельный класс/структуру, а остальные классы.структуры будут меньше и даже не изменятся! + работа с дочерними классами упростится. .. .. например.. у нас есть бочки ящики оружия.. делаем класс с позицией из вектора vec3 и двумя производными по ней. унаследуем всё всё от него. и потом перерасчитываем все разные классы одной формулой! .. сколько ты будешь трахатся с этой таской в процедурном стиле? зы я смотивировал?
>>706952 ну я щас эклипс подстроил пиздец как под себя от цветов до хоткеев. мне удобно капец как нажать хоткей и печаткать новый класс одной левой чем в файлике main.цпп что-то городить.. да и пишешь больше 200 строк в файле и открываешь его в ебанутом редакторе (на телефоне в гите) охуеваешь его скролить! а так красиво.. все на своих местах.. понятно
Сука, ну не правильно высчитывает эта блядина. Мне надо, чтобы находилось среднее арифметическое а1,..,an без элемента a[x], который вводит пользователь, но он выводит все неверно. cpp.sh/2x24v
>>707254 >знаю, что вероятность не очень большая, что прокатит. >но попробовать хочу - хуже не будет. >вот только думаю, как бы правильно оформить это дело.
>>707260 никаких суперпроектиков не пилил, если ты об этом. поэтому и хочу напроситься на стажировку или на полставки.
>просто есть вариант пойти на QA, и потом возможно съебать в девелоперы, но это ведь такой круг, да и QA не особо мне поможет, когда опять буду искать ++.. >поэтому и хочу напроситься хоть на полставки или на стажировку.
>>707219 Бывают случаи, когда скопировать ссылку на объект нельзя. Например, когда ты возвращаешь объект, созданный внутри функции. Если вернуть сслыку, то она будет ссылаться на уже уничтоженный объект. А копию делать может быть очень затратно.
>>705782 Вобщем вектор+сорт конкретно в моём случае лучше, т.к. сначала можно сделать ресёрв, потом нужно сорт+юник+сорт другим компаратором. В конце необходим доступ по индексу, т.е. сет вовсе не подходит, т.к. по нему прыгать нельзя, только взад-вперёд елозить.
Кста, кто-нибудь знает, можно ли в бинарном дереве организовать произвольный доступ со сложностью быстрее чем О(Эн)?
И спросил: "Антоха,
Как мне кодить хорошо
И не кодить плохо?" -
"У меня секретов нет -
Расскажу, что знаю," -
Анонимуса ответ
В шапке помещаю:
"Кто пихает грязный хак
В лабу воровато,
Тот бездельник и дурак,
Быть им плоховато.
Кто бандитов четырех
Вспомнит даже ночью,
У того весь код неплох
Абсолютно точно.
Кто о тактах не слыхал,
С asm'ом кто не дружен,
У того не код, а кал -
Здесь такой не нужен.
Этот - старый байтоеб,
Бородой заросший.
От крестов он хмурит лоб,
Но пишет код хороший.
Этот - макросы подряд
Лепит без оглядки.
Про такого говорят -
Он грязнуля, гадкий.
Тот - Макконнелла прочел,
Код свой правит вечно.
Из такого выйдет толк,
Сомневаться нечего.
Правила у нас просты,
Помните, нюфани:
Не осилит тот кресты,
Кто халтурить станет..."
Не дослушав, нуб ушел,
Прошептав со вздохом:
"Быть макакой хорошо,
А крестоблядком - плохо".
Старший брат:
Предыдущий:
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-треды