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:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>>714898 (OP) >Концепты? Вам, потомки обезьян, >За пять лет не осилившие треды? Но они и правда нужны. Нужнее, чем нетворкинг, фейлсистем и даже чем треды! Типы и работа с ними — это фундамент языков.
Concept? The descendants of monkeys, Five years later, he has not mastered multi-threading? Yes, if all drunk as Cuba Committee, It would have sobered the hype! Red! Modules! Korutin drink! PIHA all the features does not happen much! You namaraete hellouvorld one, And we are - again linker redesign? Like a pack of mangy dogs for a long time You know, the question of the dream vacation, Blindly dreaming about the benefits of shit, Continue There grinding head. Of course, the whisper of a deck of cards And EU-Ok you do hurt, For you, only that the right to open In order to go to hell, and deflected to the right? In vain did the barking! Bjorn and wise and important, This is to fuck in a language that once was lost. Kohl does not want to wait for the right moment - Go to amass one snake eyes.
поясните про модули вместо инклудов и стандарт с++17. Вроде была инфа, что модули пока отложат, но будут пилить потом. Было такое или я придумал? миможабокодер
Как создать матрицу в классе (не объявляя ничего кроме класса в майне) и работать с ней в дальнейшем вне класса? Если это невозможно, то как лучше реализовать это? Нужно создать матрицу в отдельном файле в виде класса, что собственно я и сделал, но в дальнейшем необходимо использовать ее в другой функции, описанной в майн. Помимо этого в эту функцию нужно передать размерность матрицы
Мне нужно создать матрицу в классе, находящимся в Matrix.h, где пользователь вводит размер матрицы и там же она создается. для этого у меня реализована функция Create(); и в main я пишу Matrix Data; Data.Create(); Data.OutPut();
на выходе получаю рабочую матрицу, все заебись, но теперь мне нужно работать с этой матрицей в main не менять ее значения, а просто иметь к ней доступ . Даже элементарно вывести ее через майн, а не через Data.OutPut();
Но я этого сделать не могу, потому что память под нее я выделяю в классе, объявляю там же и в этом же классе пользователь вводит ее размер. По идее, мне надо ее как-то вернуть из класса. Возможно я не понимаю чего-то
>>715401 В дальнейшем мне нужно иметь доступ к data. Я опишу функцию в main, которой нужна матрица data и ее размер (employee х position). Т.е. у меня будет функция, которая принимает значения data, employee, position
Ньюфажие итт. Прочитал пару книг, сейчас второй день сижу залипаю на кодингейм, решаю задачки навроде олимпиадных. От таких задач вообще есть толк в изучении языка?
>>716044 >716039 >Это не лаба, я учусь по учебнику Страуструпа с шапки. У вас тут помогают же, нет? Обращайся почаще к документации на cppreference. Ее же для тебя и пишут
Неужели нет долбанного фриланса для софтовиков, я уже не знаю за что мне взяться, везде сраные индусы, везде анальные ограничения. Не хочу сидеть в офисе и сосать у босса, я могу писать мелкий софт любого характера хоть по 10 баксов за проект. Где найти биржу или людей? Неужели 10 баксов раз в 2-3 дня - слишком много для обычного человека?
>>714998 2 >>716199 ты мое зеркало анон, но только не ебешься с /dev/videoX ищу лабы/курсачи за 5$ и делаю. но в начале семестра/практики я сусу хуйца ем ничего
Поцоны не бейте, лучше обоссыте. Я только начал изучать c++, написал в консоле калькулятор. В функции main весь код калькулятора. Как сделать её многоразовой? Калькулятор просчитывает одно действие, выдаёт ответ, а затем работа функции завершается. По ссылке текст кода, если кому интересно. http://pastebin.com/pR9X0YFS
>>716489 Прочитай первые десять страниц любой книжки по с++. Это уже даже не смешно. Тот скриншот про компиляцию в Visual Studio уже даже не кажется фейковым.
>>716518 Да можно и модули навелосипедить, покушать там pimpl и заныкать макросы в анонимные неймспейсы, а ещё написать constexpr функцию которая будет заменять все точки на слеши и сувать всё в кавычки, назвав её "import".
>>716544 В шапке указаны только книги и два ютьюб-курса одинаковой степени полезности. В книгах много воды, в курсе слишком мало, хотелось бы на самом деле, что-то среднее.
Возникла идея - классификация программиста по уровню знаний и умений. Например: "Начинающий - знает основы синтаксиса и STL библиотеку. Умеет писать лабы, что давали в универе" и т.д.
Знающие аноны-программисты можете заполнить такой список? Я только в самом начале пути и было бы интересно послушать опытных анонов.
>>716557 Хм.. Но ведь есть какие-то базовые вещи, азы которые знают все программисты? Можете их расписать? Пока у меня складывается впечатление, что вся книга Стэнли Липпмана - это тот минимум, что нужно знать. А книга у него довольно объемная, страниц на тысячу.
>>716561 Спасибо за ценную ссылку. Первое впечателние, что это шутка - столько знать. Но кажется я долго смотрел на жизнь в розовых тонах. Буду заделывать бреши в своем образовании.
>>716563 >Компиляция-то от этого не ускорится. Суть модулей, чтобы хидеры не парсить стотыщ раз подряд. Ты похоже не знаком с pimpl и предкомпилированными заголовками. Модули велосипедят уже 20 лет, и всем похуй.
>>716575 Автоматически ты в пимпл все не сконвертишь, плюс не все в принципе можно сделать пимплом. А типизацию у темплейтов можно худо-бедно и сейчас накостылить, причем не слишком сложно.
Небольшой вопрос по памяти: мы создаем истанс класса а, и вызываем метод, который в свою очередь создает инстанс класса к несмотря на то, что метод закончил работу, деструктор класса к не вызывается потом, мы запоминаем адрес пременной типа дабл и удаляем класс а Потом выводим то, что находится по ссылке, выводится то же число, что и было введено констурктором к - 9.11
Далее, второй случай, допиливаем дестурктор а, где пишем delete k; - все равно, 9.11 остается в памяи процесса
Так вот, вопрос, как рассматривается участок памяти, в котором находится число 9.11 в первом и во втором случае, это все еще алоцированное пространство, или уже нет?
>>716675 Не решили нихуя, комитетчики посчитали, что мейнстрим — async/await некошер, а они единственные могут сделать правильно, лол. Юзайм буст, в общем, как всегда.
Боги c++. Я школьник бывший тут недавно. В задание нужно использовать контейнер map. Сам я погуглил и нихуя не понял. Идея решения такая. 1) делаем map<string, double> base; 2) как-то забиваем в поле string имя-фамилию, в double, среднее значение 3) выводим 3 худших значения Не знаю как сделать 2 и 3. Т.к. не знаком с мапом. Помогите мне! Прошу!
>>716687 >1) делаем map<string, double> map сортирует по первой компоненте. На случай, если ты хочешь эффективно доставать оттуда по минимальному баллу.
С другой стороны, map<double,string> не катит из-за возможных одинаковых средних баллов.
>>716701 Черт, а как тогда освобождать память таких массивов? Просто, без квадратных скобок?
Суть в том, что я пытаюсь понять, как воспринимается память системой под которую был или не был вызван деструктор. Есть класс а, в этом классе - подкласс к. Как будет расцениваться выделенная под класс к память если вызывать деструктор класса а с деструктором класса к и без
>>716712 Никак не освобождать, память под 100 элементов выделится при создании класса и освободится при уничтожении. Ты же не выделял с помощью new, зачем вызывать delete тогда.
>>716711 Я не понимаю как заносить туда. Вроде так. base.insert (pair<string, double>(str, num)); Но как мне взять число если я полностью считал строку?
>>716724 >удаляют Я тут и пытаюсь понять, как это все устроено, что и как нужно удалять. Значения остаются в памяти, их можно спокойно просмотреть по поинтеру. Откуда мне знать что память уже релоцирована, явного деструктроа класса к я же не вызывал?
>>716636 >Далее, второй случай, допиливаем дестурктор а, где пишем delete k; - все равно, 9.11 остается в памяи процесса >>716712 Ты вызываешь этот деструктор (удаляешь a) и после используешь r?
>>716738 При удалении память просто помечается как свободная, все значения в памяти остаются (и могут быть прочитаны) пока память не будет переиспользована для чего-то другого. Поэтому важную инфу в памяти нужно вручную затирать нулями или чем-то случайным. Ситуация как с файлами на жестком диске, если ты понимаешь о чем я.
>>716750 В первом случае ты можешь удалить память выделеную под дабл через оставшийся указатель, все остальное утекло (хотя непереносимым пердолингом тоже можно вытащить скорее всего). В втором случае все освобождается (если правильно деструктор написал), добавь в деструктор К обнуление флоата если ты через него проверяешь. По самому факту освобождения флоат не обнулиться.
>>716763 БЛЯ, КАК ВСЕ ПРОСТО, СПАСИБО! Ток 1 вопрос, разве можно простым cout? Я так выводил for (auto it = m.begin(); it != m.end(); ++it) std::cout << it->first << " : " << it->second << '\n';
Посоны, подкиньте, пожалуйста книгу годную по паттернам, именно тем, которые получится применять в C++ и, в целом, про их назначение (конечно, некоторые знаю и использую, но хотелось бы по-полнее).
>>716791 Тогда надо стрелку на точку менять, правильно? >>716789 Я привык, что всегда есть более компактное и эффективное, и элегантное, и гибкое решение, но я его не вижу. Вот и спрашиваю, какое оно.
>>716687 Иди нахуй, сука. Заебали со своими лабами, тупые пидарасы. Сначала полгода нихуя не делаете, а потом приходите на двачик со своими имбецильными "плак плак, крестаны, помогите решить лабу) посыпаю голову пеплом)))".
А ГДЕ ТЫ 3 МЕСЯЦА НАЗАД БЫЛ, СУКА? А ЧТО ПОТОМ БУДЕШЬ ДЕЛАТЬ, А, МРАЗЬ? СВОБОДНАЯ КАССА КРИЧАТЬ? ВСЕ ПРАВИЛЬНО ПОНЯЛ?
>>716806 Что ты блядь несешь еблан? Я пробники нарешиваю, тут задание где ассоциативные контейнеры нужны, я про них не знал, из гугли мало что понял. Логично что я спрошу у кого-нибудь и разберусь, а не буду как конч сидеть и ждать.
>>716820 МНЕ ПОХУЙ БЛЯ КТО ТЫ: СТУДЕНТОМРАЗЬ С ЕБУЧИМИ ЛАБАМИ ИЛИ ШКОЛОГНИЛЬ С ЕБУЧИМ ЕГЭ. КНИГИ И ДОКУМЕНТАЦИЮ ПИШУТ ИМЕННО ДЛЯ ТАКИХ КАК ТЫ, ЧТОБ ТЫ, СУКА, ВЗЯЛ, НАПРИМЕР, ДЖОССАТИСА, ОТКРЫЛ ГЛАВУ ПРО MAP И ПРОЧИТАЛ ВСЕ НАХУЙ: И ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ, И ИНТЕРФЕЙС, И ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ, ДАЖЕ ПРО НЕБО И АЛЛАХА ТАМ МОЖНО ПРОЧИТАТЬ.
НО НЕТ БЛЯ НАДО НА ДВАЧ ИДТИ И СПРАШИВАТЬ. А ЕСЛИ ИНТЕРНЕТА НЕ БУДЕТ, ЧТО ТЫ БУДЕШЬ ДЕЛАТЬ??? А ЕСЛИ НА РАБОТУ УСТРОИШЬСЯ, ТОЖЕ КУРАТОРА БУДЕШЬ ДОЕБЫВАТЬ ПО КАЖДОЙ МЕЛОЧИ?
>>716828 > А ЕСЛИ НА РАБОТУ УСТРОИШЬСЯ, ТОЖЕ КУРАТОРА БУДЕШЬ ДОЕБЫВАТЬ ПО КАЖДОЙ МЕЛОЧИ? Ну уж как конченный даун сидеть и нихуя не понимать я тоже не буду. Для того люди и общаются на определенные темы, чтобы инфу получать. В этом нет ничего зазорного. > КНИГИ И ДОКУМЕНТАЦИЮ ПИШУТ ИМЕННО ДЛЯ ТАКИХ КАК ТЫ, ЧТОБ ТЫ, СУКА, ВЗЯЛ, НАПРИМЕР, ДЖОССАТИСА, ОТКРЫЛ ГЛАВУ ПРО MAP И ПРОЧИТАЛ ВСЕ НАХУЙ: И ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ, И ИНТЕРФЕЙС, И ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ, ДАЖЕ ПРО НЕБО И АЛЛАХА ТАМ МОЖНО ПРОЧИТАТЬ Бля, я прочитал примеры, прочитал про всякое и не было или я не увидел нужного мне и представь Я ПОШЕЛ НА ТЕМАТИЧЕСКУЮ ДОСКУ, В ТЕМУ ГДЕ ОБЩАЮТСЯ НА КОНКРЕТНУЮ ОБЛАСТЬ В ЭТОЙ ТЕМАТИКЕ И СПРОСИЛ ВОПРОС СВЯЗАННЫЙ С ЭТОЙ ОБЛАСТЬЮ, вот же я мудак, пиздец, как посмел, ШЕЛЬМЕЦ!
Даже если взять твои обвинения. Задание я сделал сам, мне нужно было знать только как забить данные в контейнер и все!
>>716836 >Я ПОШЕЛ НА ТЕМАТИЧЕСКУЮ ДОСКУ, В ТЕМУ ГДЕ ОБЩАЮТСЯ НА КОНКРЕТНУЮ ОБЛАСТЬ В ЭТОЙ ТЕМАТИКЕ И СПРОСИЛ ВОПРОС СВЯЗАННЫЙ С ЭТОЙ ОБЛАСТЬЮ Ты пошел на тематическую доску, зашел в тематический тред и как настоящий школотрон не прочитал шапку, в которой есть и нужные книги, и народная мудрость: >Вопросы по синтаксису идут на хуй >Лабы идут на хуй
В данном случае твой вопрос является чем-то средним. Пойми, бугурт здешних плюсанов не на пустом месте берется. Уже тредов так 5 приходят всякие школотроны вместе с студентотой и спрашивают то, ответы на что уже 300 раз написаны в шапке.
>>716848 > Ты пошел на тематическую доску, зашел в тематический тред и как настоящий школотрон не прочитал шапку, в которой есть и нужные книги, и народная мудрость: Читал и книжки у меня скачаны, заходил на стак, ну не нашел я, что блядь мне делать?
>>716848 Да ладно тебе, братюнь, не горячись. Не всегда мы были опытными и умели искать инфу быстро. В школе этому не учат же. Я вот был в его возрасте гораздо большим долбоебом. >>716866 Ты просто следуй паре простых рекомендаций: 1. Если твой вопрос формулируется в виде "как сделать X?", то лучше гуглить это, гуглить на английском, смотреть факи, доки, книги, стековерфлоу - что угодно, хранящее инфу, но не спрашивай, блядь, в треде. Тред должен нести пользу читающим его, а не быть забитым вопросами разного уровня глупости. Вопрос, на который есть ответ в книгах из шапки, и тем более гуглящийся, вызовет перебрасывание какашками между тобой и алтфаками, никто в результате не выиграет. 2. Если твой вопрос формулируется в виде "как лучше всего сделать X?", "посоветуйте хороший источник информации про X" etc - вот тогда смело пиши в тренд, будет польза как тебе, так и другим анонам потом.
В общем. При любом обращении к xml_writer внутри inc_block софтина вылетает.
Если где-то виднеются косяки - это "боевые раны" - уже чуть ли не брутфорсом - и по ссылке пробовал передавать и по указателю, напрямую обращаться (т.к. один хуй глобальные). Теперь вот таким макаром сделал - одна беда, не хочет и все.
Студия кормит меня пикрелейтед, когда я удаляю массив из указателей на свою структуру. Что делать? [CODE] delete[] data;//здесь происходит пикрелейтед data = new dial[length];[/CODE]
>>717078 При компиляции. Потому что вызов конкретного метода должен замениться прыжком в эту vtable.
Учи английский, сука http://stackoverflow.com/questions/3849498/when-is-vtable-in-c-created >Typically, vtables are structures created at compile time (because they can be determined at compile time). When objects of a particular type are created at runtime they will have a vptr which will be initialized to point at a static vtable at construction time.
Что с веб-программированием на плюсах? Наткнулся на главу в одной книжке, пишется какой-то интерфейс и прочее. Это актуальо вообще? Требуется где-нибудь?
>>717365 Ты объявил локальную переменную xml_writer которую и используешь в конструкторе. А в tms::inc_block() ты пытаешься использовать член класса xml_writer который не инициализирован, судя по тому коду что ты предоставил.
>>717374 И вообще, если я не ошибаюсь QXmlStreamWriter занимает 4 байта, нахуя ты пердолишся с указателем на него. Объяви его (в h файле) как QXmlStreamWriter xml_writer; а не QXmlStreamWriter *xml_writer; - он создастся и удалится автоматически.
Нужны советы: как сделать, чтобы программа компилировалась всеми популярными компиляторами?Аноним15/04/16 Птн 13:08:00#177№717464DELETED
Хочу устроить небольшой эксперимент, целью которого будет выяснение вопроса о необходимости избавляться от ветвлений в таких функциях как min, max, sign и abs. Каждый должен иметь возможность взять вот этот cpp файл https://github.com/Zealint/fastest_algorithm/blob/master/BranchFreeTimeout.cpp, скомпилировать, запустить и посмотреть на вывод в stdout. Программа выдает две колонки чисел: время работы функции с ветвлением и без него. Программа может работать долго, несколько минут (не пугайтесь, она не виснет).
Сейчас программа компилируется только в VС++ 2015 и в GCC 4.8.1 (из MinGW), а мне бы хотелось, чтобы она работала и в других компиляторах. Кто что может посоветовать сделать? От std::chrono мне не избавиться, время замерять нужно как-то более менее универсально, от int32_t тоже, так как я не знаю, вдруг у кого-то будет int размером 64 бита (мало ли). Возможно, я не во всём следую Стандарту или есть ещё какие-то ошибки?
Важно вот что: я отдаю себе отчёт, что код зависит от наличия знакового сдвига и дополнительного кода в представлении отрицательных чисел. Так и было задумано.
Переносимые типы данных и их использование в С++?Аноним15/04/16 Птн 13:09:58#178№717465DELETED
Добрый день! Никак не могу найти ответ на этот вопрос, все уже облазил, может кто-нибудь поможет? Нашел только это : "Переносимые типы данных — это обобщенные типы данных, соответствующие в разных системах баз данных простым, совместимым между собой физическим типам. Физические типы данных — это типы данных, поддерживаемые целевой базой данных. Например, если установлен драйвер Access, все типы данных, доступные в Microsoft Office Access, будут доступны как физические типы данных в модели." - и то, не совсем понимаю суть того что написано. Помогите, пожалуйста!
>>717465 А где Вы этот вопрос получили, возможно от этого и будет ответ. Но в целом, как мне кажется, переносимые типы данных для Вас, это те, для которых размер и содержимое гарантированно на заданном наборе платформ. К примеру, int может быть как 2, так и 4 байтовый, а вот uint32_t - только 32байтовый.
минимизации булевых функций (Получение МДНФ)Аноним15/04/16 Птн 13:14:27#185№717474DELETED
Передо мной стоит задача написания минимизации булевых функций (Получение МДНФ) на С ++.
Еще в прошлом году у меня был курс по дискретной математике, и с основами я знаком. Мне бы хотелось, что бы вы помогли мне с написаним алгоритма перевода в ДНФ и объяснить как из ДНФ перейти в МДНФ.
Не обязательно на с++. Я думаю не будет проблем с переводом алгоритма в с++. Главное, что бы я понял сам алгоритм получения ДНФ и МДНФ.
И было бы здорово, если бы вы написали примеры какие то.(что на входе, что на выходе, и т.д)
Возможно я не туда пишу, но знаю, что тут есть умные люди, а других хороших сервисов я не знаю. Буду рад, если поскажите такие.
>>717474 Почитайте про алгоритм минимизации Квайна-МакКласки. Это тот же алгоритм Квайна, но переделанный так, что его очень удобно реализовывать на машине.
Запуск графического режима из терминала?Аноним15/04/16 Птн 13:16:41#187№717476DELETED
Я знаю, что в DOS игры запускались напрямую из консоли. Есть ли возможность запустить графический режим в консоли (которая в линуксе - ttyx) без входа в графическое окружение? Решение желательно для c++.
Помогите разобраться с указателямиАноним15/04/16 Птн 13:21:58#191№717480DELETED
Дана строка, содержащая слова разделёнными пробелами и даны 2 указателя на начало слова и 2-ой указатель указывает на конец слова. Как вывести, например, 1-ое слово через указатель? Начал проходить тему указатели и не могу вникнуть
> int main() > { > char str = "Just some text inside of string"; > > { > char beg = str + 5, end = str + 9;
> puts(str); > puts(beg); > puts(end);
> printf("%.s\n", end-beg, beg); > }
> { > char beg = str + 5, end = str + 8;
> puts(str); > puts(beg); > puts(end);
> printf("%.s\n", end-beg+1, beg); > }
> return 0; > }
Just some text inside of string some text inside of string text inside of string some Just some text inside of string some text inside of string e text inside of string some
>>717476 Если что-то простое то SVGAlib есть. Сложнее то нужно OpenGL цеплять. Или на прямую, или более оптимальный вариант - что-то типа SDL ил Allegro.
Как сменить таблицу символов в C++?Аноним15/04/16 Птн 13:32:06#201№717491DELETED
У меня в C++ по умолчанию стоит ASCII. Как мне переключить кодовую страницу на Unicode, чтобы cout мог отображать символы из данной таблицы по их универсальным именам вида '\uXXXX'? Символы должны отображаться в консоли.
>>717491 Нашел решение: необходимо работать с символами и строками Unicode так, как с данными типа wchar_t, т.е. использовать wcout вместо cout, предваряя символьные константы и строки префиксом L. Пример: wcout << L"\u00f5\n\n"; - печатает символ i с двумя точками.
>>717494 и зачем здесь эта цитата из книжки для типа "C++ для чайников"
Удерживание клавиши для вводаАноним15/04/16 Птн 13:34:19#206№717497DELETED
Столкнулся с такой проблемой: пользователю требуется нажать и удерживать пробел, и до тех пор, пока он его не отпустит, в консоль должен выводиться символ. Не знаю как заставить getch реагировать на удерживание клавиши.
>>717499 for(int key=getch(); key==' '; key=getch()) { cout << '#'; } но это фигня - потому что отработает не на отпускание клавиши, а на ввод чего-то другого. Если просто отпустить - остановится и будет ждать нажатия другой клавиши.
>>717502 Очевидно, в тех случаях, когда требуется, чтобы переменная была ассоциирована с потоком, а не со всем процессом.
Википедия приводит в качестве примера errno, которая будучи обычной глобальной переменной может быть "испорчена" другим потоком выполнения. Если же её объявить как thread_local, то в каждом потоке будет существовать свой экземпляр под именем errno.
Если это твое, то иди просто нахуй. Если ты какой-то левый хуй, то сообщаю тебе, что меня безумно беспокоит наличие дилетантских и инфантильных вопросов в этом обсуждении и поэтому я просто вынужден выражать свои эмоции на этот счет.
>>717515 пробни например стажировку в яде, и воообще я сам офигеваю что в hh из вакансий нет по крестам ничего, но стоит взять /dev/vi.., встать с дивана и пробовать! оформить гитлаб/хаб просится на работу за ничего но со стажем решать задачи на тонкости и алгоритмы за пол наносекунды и через годик-хуёдик вкатится в норм контору с норм зп и уже со стажем за спиной
Суп, программач. Копаю по тихонечку плюсы такая-то хуита, шо пиздец. и не могу понять, почему этот код не работает. То есть он работает, но операции не выполняются.
>>715389 Перегрузи оператор [] и обращайся через Data[j]. Раз у тебя ИНКАПСУЛЯЦИЯ. Чем не вариант? Или сделай поля публичными, раз у тебя там такое "здравствуй-90-е" процедурное программирование.
Ну и пара очевидных советов: запрашивать ввод пользователя внутри функции создающей матрицу -- это плохо. Это раз. Во-вторых данные лучше инициализировать внутри конструктора. Выдумывать для этого отдельную функцию Create не нужно. Вынеси в main запрос ввода размеров и передавай их как параметры внутрь конструктора.
>>716246 Где ищешь лабы/курсачи? Может, поделешься местами? Понимаю, что лишняя конкуренция тебе не нужна, но я бедный студент, и кушать хочется. Тоже тыкался по биржам, но ничего толкового не нашел. Пытался поискать какие-то тематические группы вконтактике, но они там все анально-огорожены.
>>718029 есть 3 места 0 твой универ 1 типичный программист обсуждения студенты туда бегут сразу пачимута 2 итт/нюфаньтред итт я 6 тредов и видел только одну большую работу за ничего500 р вроде при коде в 800 строк минимум но думаю под сессию раки набегут ппц
найдёшь лабу в 1 и 2 -- попроси студента рассказать паре друзей бездельникам. кеш забираю мертвыми деньгами. Хватает на пару шавух в неделю и рис с соевым соусом. зы в планах уйти в html + py + css + js для фрилансов или стажировки пробнуть как тут >>717632
Здравствуйте, лабодрочеры. Понимаю, что ИТТ обсуждаются только лабы и проблемы компиляции одной кнопкой в визуалстудии а не насущные проблемы, но я смею немного обратить на себя ваше внимание.
Собственно - пишу один лексопарсер для автокомплита (дада, yacc и ragel, все дела, но я велосипедист), и для построения AST приходится заниматься множественной копипастой в стиле:
Собственно, как это можно красиво завернуть списки инициализации в препроцессор/constexpr? Писать всё руками с последующим рефакторингом - слишком печально, писать отдельный скрипт для кодогенерации в 2076 - тоже некошер.
>>718297 Ну, можно сделать что-то вроде такого: template <class... Args> Function(std::initializer_list<Args> args) { std::tie(name, arg1, arg2, etc) = std::make_tuple(args...); }
Алоха, антуаны. Писал спрашивал уже в соседнем треде, теперь и тут спрошу. Подходят ли кресты под разработку приложений с упором на работу с tcp/ip и чтение/запись в память, работа с указателями и адресами и т.д.?
>>718020 >"здравствуй-90-е" процедурное программирование Школьник думает, что ООП изобрели после 90-х. И что с изобретением ООП "процедурное программирование" якобы "устарело" и стало ненужным.
>>718394 > весь хайп ООП - это 80-е Мне казалось (сильно в этом не копался), что всё же начало 90-х. Открывал когда-то книгу какого-то Бутча от 94-го, что ли, года. Там было типа такого: «вот есть у нас программа-фильтр, которая считывает файл, что-то там с ним делает и выводит. Но это НИСАВРИМЕННО! Надо создать объект "файл" и объект "фильтр" и послать между ними сообщения!» Плюнул и закрыл. Я думал это техническая литература. А оказалось — на уровне религиозных брошюрок.
>>718398 Пишешь код, выделяешь полиморфные алгоритмы, далее оформляешь их либо в виде шаблонов, что проще, но только в статике, либо в виде интерфейсов, либо в виде, внезапно, tagged union'ов. Об объектах не думай, должны быть [полиморфные] алгоритмы, [полиморфные] структуры данных, конкретный тип полиморфизма нужно определять по месту. Лучше всего в структуре данных иметь только конструкторы и один operator(), тогда твои объекты превратятся по сути в функции на стероидах и их будет очень легко совмещать. Так как 90% кода это трансляторы одних данных в другие, такой подход тебе во многом поможет.
>>718396 Кто страшится всех трудных путей - тот глупец; Кто, познав их, не видит простого - слепец. Раз за разом дорогу с умом выбирая; Быстро к цели идет, обогнав их, мудрец.
Что писать в резюме в графе "предыдущий опыт работы", если ты нигде официально не работал, и все что у тебя есть - полсотни багфиксов вговнорепозиториях на гитхабе?
>>719020 >>719024 С ангельским у меня проблема. Я просто запутался из-за того, что QDir::currentPath() возвращает не путь к директории, где находится исполняемый файл, а на уровень выше, почему-то.
>>719045 >Returns the absolute path of the application's current directory. The current directory is the last directory set with QDir::setCurrent() or, if that was never called, the directory at which this application was started at by the parent process.
Что понимается под parent process? Компилятор, cmd.exe, .exe моей программывсе равно ничего не подходит
Но чтобы это сделать пришлось ради этой одной строки подключать #include <QDir> в main.cpp, что меня немного напрягает, или это нормальная практика и код от этого сильно не увеличится.
И что лучше, сделать как написано выше, или в файле моего класса, где используется <QDir> подключить <QCoreApplication> и в нём установить setCurrent?
Или вообще в main получить applicationDirPath() и передать его в статический метод моего класса?
>>719069 Ну, если я дважды кликнул на ехе-файле - какой это процесс? explorer.exe? Почему тогда currentPath() возвращал путь к папке, в которой вообще нет исполняемых файлов?
>>719072 >Ну, если я дважды кликнул на ехе-файле - какой это процесс? explorer.exe? Где-то около. > Почему тогда currentPath() возвращал путь к папке, в которой вообще нет исполняемых файлов? Прям при запуске двойным кликом? Или всё-таки из какого-нибудь QtKreakl?
И всё же, второй вопрос в силе. >Но чтобы это сделать пришлось ради этой одной строки подключать #include <QDir> в main.cpp, что меня немного напрягает, или это нормальная практика и код от этого сильно не увеличится. >И что лучше, сделать как написано выше, или в файле моего класса, где используется <QDir> подключить <QCoreApplication> и в нём установить setCurrent? >Или вообще в main получить applicationDirPath() и передать его в статический метод моего класса?
>>719064 > код от этого сильно не увеличится Зависит от хедера, вообще не должно сильно много увеличится. Если сильно волнуешься и нужна только одна функция можешь попробовать просто ее задекларировать, что-то типа bool QDir::setCurrent(const QString & path); главное чтобы библиотека была прилинкована. Но это так себе способ, так как в хедере может какая-то магия происходить.
>>719064 а тебе не класть на размер кода? главное же размер объектников и конечного экзешника, что благополучно решает линковщик, который выкинет всё лишнее.
Ребят, помогите с лабой одной проблемой. Мне нужны аналоги getch и kbhit на линукс. Считывание нажатой клавиши и проверку нажата ли клавиша в данный момент.
#include <iostream> using namespace std; int main () { float X,Y; cout<<"X="; cin>>X; if (X<-2) Y=-X; else if (X>0) Y=5-2/3X; <-----не работает конкретно это else Y=5+1.5X; cout <<"Y=" <<Y<< endl; return 0; }
Насколько плох/хорош перевод "Программирование. Принципы и практика использования C++" Страуструпа? Обычно читаю на аглицком, но надо как можно быстрее вкатиться на минималку, а на русском я всё-таки раза в 1,5 быстрее читаю и воспринимаю информацию.
Как в Qt сделать так, чтобы при нажатии кнопки вызывалась какая-нибудь функция, которая использует текст из lineEdit'ов ui-формы? Например, она записывает их в файл. Не понимаю, где нужно делать слот и как получать доступ к этим строкам.
Няши, подскажите, где можно почитать про сокеты? Основы я наешел, а вот даже отправку комманд найти не получается. Да и вообще, если я правильно понял, сокеты это единственный вариант соединения шиндоуса и линукса? Такой важны раздел, а ни где нет инфы. Я даже не могу найти, можно ли по сокету передавать объекты типа массивов и т. д.
Как правильно создать массив размером graph[m][2]? Знаю, что можно [code] int graph = new int [m]; for(int i = 0; i < m; ++i) { graph = new int [2]; [/code] однако в таком случае происходит m выделений памяти, а это долго и может привести к фрагментации. Хотелось бы справиться за одно, а потом раскидать указатели, как тут [code] int graph = new int [m]; graph[0] = new int[2m]; for(int i = 0; i < m; ++i) { graph = graph + i(sizeof(int)*2); } [/code] однако этот код не работает
>>719673 Выделение памяти под пару интов – операция на 0,5 мс даже на слабой пеке, получить фрагментацию памяти при такой хуйне можно разве что если одновременно идут какие-то массовые аллокации и то на древней ос (все современные с дефрагментирующими аллокатарами из коробки).
Если так хочется сделать максимально быстро – выделяй постранично системным апи (увеличивая m до размера, который можно выделить таким образом) и раскидывай указатели руками для удобной работы "как с двойным массивом".
Анончики, я наверное всех заебал со своими классами только начал их изучать и опять один петушок начнет кукарекать ВОПРОСЫ С СИНТАКСАМИ ИДУТ НАХУЙ такие пидары отбивают все желание учить язык однако прошу совета адекватных анонов:
У меня есть класс, где в паблике я инициализирую матрицу (int data, size) и в этом классе всякие функции для работы с матрицей (заполнение, транспонирование и тд)
В main у меня есть функция, куда нужно передать этот КЛАСС. Не по отдельности ( класс Matrix Data, передаю Data.data, Data.size) а просто передать в нее класс, а в функции работать уже с data, size. Как это сделать? Гуглил и нихуя подобного не нашел, везде инфа про то как передавать функции из классов, а как передать полностью класс?
>>720104 >и опять один петушок начнет кукарекать ВОПРОСЫ С СИНТАКСАМИ ИДУТ НАХУЙ такие пидары отбивают все желание учить язык Это ты петушок и пидар, раз не можешь открыть нормальную литературу и прочитать ее. Вот для кого страуструп писал книгу? Для таких, как ты. Так что пошел нахуй, чернь.
>>720148 Я уже был тут, моя пидорская егэ параша. Я вроде сделал, вроде все работает. Но я думаю были пути сделать проще и быстрее, и гибче, и красивее ну и так далее http://pastebin.com/ftu7irpx
>>720147 вот про него я и говорил. Чувак, я месяц в плюсах, до этого не работал с языками, какой нахуй страуструп? Этот мудень излагает таким образом, что пошел он в пизду со своей книгой. Покажи мне хоть одного человека, который учился по страуструпу не зная языков? Моя задача понять азы программирования и вот один из них который я не понял, но ты же сука знаешь, однако подсказать тебе влом, вроде хуй убавится тебе от этого, зато поможешь начинающему анону. Пошел нахуй мудак
>>720158 я начал с шилтда, ибо он излагает понятным и доступным языком. Это не значит, что до страуструпа не дойдет, я обязательно и его изучу, но не все сразу. Тут бля вопрос элементарный, для знающего анона, но хуй кто поможет
>>720160 Знающий анон в треде: съеби нахуй с плюсов, это язык не для нюфагов. Ты только замедлишь своё развитие как программиста. Можешь поучить Си если хочется прям основ, но не надо начинать с плюсов. Тред и без тебя забит такими муделями.
>>720165 >Можешь поучить Си если хочется прям основ Лучше взять что-то скриптовое типа питона или руби, а потом навернуть Таненбаума с его "Архитектурой компьютера".
>>720184 >ну коли уж начал, нет пути назад. Ты дурак? Тебе предстоит путь, длиной больше 500 рабочих часов из которых ты прошел максимум 40. Не страдай хуйней и иди наворачивай python.
>>720203 >соске не хватает фундаментальных знаний, чтобы осилить документацию >соска жалуется на то, что отправляют учить основы, вместо того, чтобы давать ситуативные макако-ответы Мда...
>>720160 > Тут бля вопрос элементарный Ты хуйню какую-то спросил. Я не думаю что кто-то вообще понял твой вопрос. В плюсах нельзя манипулировать классами как самостоятельными сущностями. Поэтому ты не можешь передать в функцию класс. Есть языки где это действительно возможно, но не в плюсах.
>>720226 Думаю он пытался спросить про передачу экземпляра класса, но отсылка к питону, все же лучшее решение, чем здесь сидеть и превозмогать шилтда вместе с ним.
>>720226 у меня в классе есть матрица и переменные - ее размер. Мне надо передать в функцию не отдельно матрицу и переменные, а полностью класс. Это невозможно?
>>720257 Например, при сохранении твоей структуры программы, ты можешь договориться что одно из двух чисел где ты хранишь минимумы должно быть всегда больше. Тогда в первом сравнении проверяешь четность, во втором сравнении сравниваешь с большим числом, если меньше то перезаписываешь большее число, а потом третим сравнением восстанавливаешь инвариант - проверяешь два числа (которые хранишь), и если нужно меняешь местами, чтобы большее число всегда было большим. Или можно как-то так сделать https://ideone.com/5KiTT8
Правильно ли я дополняю вектор нулями, если, например, из вектора (2, 1) в результате дополнения надо получить (2, 1, 0, 0)? Результат свёртки верный, но при вычислениях в конечных полях могут получаться совпадения.
>>720397 Всё, что по размеру больше указателя, желательно передавать по ссылке, желательно константной. Ну или использовать move семантику, опять же, при возможности и если это соответствует ситуации.
>>720802 > плюсы Материализованные генетики, отсутствие зависимости фич языка от версии рантайма на проде. > минусы Плюсы нужны только вместе со специфическими знаниями из области применения разрабатываемого софта. Можно выстрелить себе в ногу в абсолютно пустой, круглой комнате.
>>720973 ru.wikipedia.org/wiki/Ссылка_(программирование) Ссылка в программировании — это объект, указывающий на определенные данные, но не хранящий их. передача в функцию массива например. зачем елозить весь? или скинуть как параметр функции класс и как-то его менять там как захочешь, а не копировать и обратно скинуть aноны.. я тоже умею гуглить за анона-школьника, прощайте уже за /dev/videoХ
>>721028 Ты наверное имеешь в виду, передача аргументов функции по значению и по ссылке. Если значение передается по значению, то копируется его значение, откуда и такое название. Следовательно, внутри функции своя копия данной переменной и если ты изменяешь ее внутри функции, наружу изменения не попадают. Передача по ссылке передает в функцию не копию, а саму переменную, размещенную по определенному адресу в памяти. Следовательно ты сможешь менять значение этой переменной прямо в функции и изменения вылезут наружу.
>>720973 Сначала размудим терминологию: есть указатели, и есть ссылки. (разницу сам гугли, шкальник) Ссылки нужны там же, где и указатели, просто они безопаснее. /t
>>720791 По сути сейчас мод этим заведует. Но раньше мы всегда принимали нормальные предложения по модификации шапки кроме Дейтелов агагагагаг, так что вряд ли ты встретишь копротивление.
>>720991 Тю, она и так бесплатная по Dreamspark же. Алсо, если кто из анонов трогал pluralsight, поделитесь впечатлениями, будьте няшами. Я не уверен, стоит ли тратить время на них.
>>721354 Опишу простой случай, когда у тебя один файл с исходным кодом и функцией main в ней: g++ <имя файла с исходным кодом> -o <имя запускаемого файла>
>>721465 >make <имя файла с исходным кодом, без расширения> Вводить конечно проще, но не понятно, что за этим стоит, если не знаешь как работают implicit rules
>>721491 #Copyright (c) 2016, /dev/videoX простите меня уже #All rights reserved. # #Redistribution and use in source and binary forms, with or without #modification, are permitted provided that the following conditions are met: # # Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution.
#* Neither the name of oilwater nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
CXX = clang gcc-48 или что там у тебя OBJS = main.o etc..
Я понимаю, что вопрос охуительный конечно, но у меня проблема -- не могу послать EOF встроенной консольке в CLion. Есть вот такой код: http://ideone.com/bWCnHZ При компиляции через g++ руками все работает нормально, на ideone тоже, а вот во встроенном окошке в иде нихуя, пикрелейтед. Ctrl-D просто останавливает программу и все.
Может им в багтрекер написать? Я искал подобное у них там, вроде нет. Но я тащемта действительно тупой и не смогу нормально описать, в чем проблема, если кто-нибудь сделает это за меня-ленивого, буду благодарен. Пока буду из файла читать, раз уж так.
>>721889 Нет. Нейросеть (в современном воплощении) это алгоритм который просчитывается на процессоре. Нейросеть может быть реализована апаратно (как и любой другой алгоритм) - но тут профит в эффективности (процессор универсальное устройство менее эффективен чем специализированая схема), а не в кардинальных отличиях коих нет.
>>722071 Двачую этого. Точнее, valgrind - это куча утилит. В том числе memcheck для поиска утечек. Ещё там же есть helgrind, для поиска race condition. Крутая, в общем, штука, рекомендую.
>>722068 С того момента, как ты начнешь учить плюсы, до того момента, когда ты сможешь сделать что-то адекватное в опенгл, пройдет очень много времени, поверь.
>>722086 Там еще профайлер есть callgrind, обожаю его. Вообще я пользуюсь valgrind чаще, чем отладчиком - для мелких проблем логи помогают, для крупных отладчик уже дает слишком мало информации.
>>722086 Чем больше учишь программирование - тем больше понимаешь, насколько много еще неизвестной информации и сколько жопочасов нужно, для того чтобы изучить хотя бы то, что в пределах видимости до горизонта.
>>722568 const указывает что переменная не может быть изменена после инициализации. Само значение переменной может вычисляться в любое время, в том числе в рантайме, в том числе исключительно в рантайме (тоесть ов время компиляции его вычислить невозможно). constexpr указывает что значение переменной можно вычислить во время компиляции, и оно будет вычислено если где-то побтребуется компилятору (а может и всегда, хуй знает). В рантайме разницы между ними нет, кроме того что значение constexpr будет с большой вероятностью заинлайнено, а если нет то будет храниться (скорее всего) в статической памяти, а const может быть где угодно.
>>722568 const - постоянная в рантайме, constexpr - во время компиляции. То есть, constexpr выражения могут быть параметром шаблона, размером массива и т.д.
Грубо говоря, вот когда ты пытаешься вкатиться в функциональную парадигму с рекурсивными схемами вместо циклов, то тебе как минимум какое-то время некомфортно, потому что это совершенно чуждый традиционному подход. А в то же время понять эту ебалу, принципиально понимая суть рекурсии, гораздо проще, чем разобраться в указателях, стеке и прочих кажущихся очевидными идеях тому, кто вообще про это не слышал.
>>722768 Разноименных - никак. Точнее, можно сделать костыль на макросах, но тогда ты получишь уже не инстанс шаблона, а макрогенерируемый класс, в котором как будто вручную вбиты все эти имена членов. Еще можно сделать как в std::tuple, когда у тебя есть одна копия параметра и еще один Yoba с COUNT-1 внутри. Одноименных - элементарно через std::array <TYPE, COUNT> my_mommas; или аналогично через TYPE my_mommas [COUNT]; если любишь сишные массивы.
>>722795 А как это сделать для лямбда-выражений? Ну, то есть я передаю лямбда-функцию в конструктор, и она должна удовлетворять шаблону класса. Например, у неё должно быть 3 элемента с типом double.
>>722825 Да, так я хотел сделать, но потом вспомнил, что мне нужно передавать функцию именно в конструктор. А для конструктора шаблон сделать нельзя.Или можно?
>>722779 Глобально в функциональном программировании использование явной рекурсии считается зашкваром. А не использование (например, in-place quicksort через runST) не считается до тех пор, пока твоя функция чистая с внешней стороны.
Подскажите такую вещь: Надо сделать перебор чисел до заданного значения, и в реализации использовать наследование и полиформизм. Не могу понять, где тут надо использовать классы?
Господа, мне предлагают хуячить новый проект на 2008 студии с помощью MFC. Мне соглашаться? И, так как я пишу на linux и не в теме о MS VS, скажите, на старые студии выпускают обновления компилятора? А то мне страшно.
>>722971 Поясняю за положняк. MSVS 2015 - OCHE HOROSHY IDE MSVS 2013 - HOROSHY IDE MSVS 2010 - NORMALNY IDE MSVS 2008 - PLOHOY STARY IDE MFC - SOVSE MERTVO GOVNO >на старые студии выпускают обновления компилятора? NIET
>>722864 Может способ перебора должен быть разным? Типа от 0 до N, от N до 0, рандомный выбор, и т. п.? Тогда можно запихнуть наследование и полиморфизм.
>>722864 Бля, ну поучись у джавистов, как они делают. Например, делаешь mixin-класс для синглтонов, через CRTP от него наследуешь шаблон объектного пула. Делаешь конкретную фабрику переборщиков, ее наследуешь от абстрактной фабрики переборщиков. В абстрактном интерфейсе фабрики делаешь метод, возвращающий умный указатель на абстрактный интерфейс переборщика. От этого интерфейса наследуешь конкретный класс переборщика и реализуешь в нем метод перебора. Создаешь инстанс шаблона объектного пула, который содержит умные указатели на абстрактные интерфейсы твоих фабрик, при старте программы создаешь и добавляешь в пул конкретную фабрику. Покрываешь все классы тестами, профилируешь, генеришь документацию к каждому методу и классу из комментариев.
>>722998 >Может способ перебора должен быть разным? Типа от 0 до N, от N до 0, рандомный выбор, и т. п.? Тогда можно запихнуть наследование и полиморфизм ХЗ. Вообще задание звучит так: написать брут для мыла. Использовать наследование и полиформизм, stl, raii. Я нацарапал реализацию циклами для 6, 7 и 8 знаков, а как сделать перебор классами с наследованием не имею понятия. Можно еще кодировку в base64 запихнуть в отдельный класс, но опять же не понимаю зачем - тем более, что наследовать там нечего и некому.
Знаю , что получу пиздюлей за доебавший вас вопрос возможно , но не знаю где спросить кроме родного двоща. смотрите пикрл При компилировании х86 , все норм. При компилировании х64 , хуева туча ошибок. SDK все стоят , гуглоебил ошибку не помогло что посоветуете? Я НЬЮФАГ В СИШКЕ И НЕ ХОЧУ ЗАБРАСЫВАТЬ , ПРОШУ ПОМОЩИ , РОДНЫЕ.
>>723050 Не слушай его, он херню несет. Скорее всего, у тебя для компиляции под x86 прописаны пути, а под x64 - нет. Полазь по настройкам, погугли, как подключать библиотеки, проверь, чтобы всё ок было.
хело посаны, продолжаю читать страуса жопой. У всех конструкторов возвращается неявно this? Читаю сейчас про копирующий конструктор, немного не понял этой ситуации.
>>723436 И в догонку, почему нельзя было сделать так же с присваиванием? Ну чтобы можно было не делать так: Class& operator=(const Class& c) { // copy return this; } Или меня это ебать не должно?
>>723450 Ну в конструкторах она неявно возвращается, так? Просто смутило то, что в присвоении это сделано явно, хотя операции похожи. (Создание объекта и присвоение)
>>723436 Конструктор ничего не возвращает. Он инициализирует объект. Когда ты пишешь Yoba y = Yoba(). Вызываются и конструктор и оператор присваивания (что потом оптимизируется конпелятором).
>>723468 Тихо, погоди, я запутался, смотри: 1. Class obj1 = new Class(3); Class obj2 = obj1;
Class(const Class& c) :param(c.param) { // copy }
2. Class obj1 = new Class(1), obj2 = new Class(2); obj1 = obj2;
Class& operator=(const Class& c) { // copy return this; }
Вот 2 ситуации, первая это копирование при инициализации, а вторая при присваивании одного объекта другому. Я все правильно написал? Может я изначально что-то не понимаю.
>>723437 В операторе присваивания крайне желательно возвращать ссылку на объект, так как это поведение оператора присваивания для встроеных типов. Так то ты что хочешь можешь возвращать https://ideone.com/33SCsj
>>723471 Да. Поэтому было бы хорошо перейти на синтакс инициализации отличный от синтаксиса присваивания. Тоесть твою вторую строчку было бы прикольно писать как Class obj2 {obj1}; А так получается что '=' может вызвать как конструктор, так и operator= что конечно немного путает.
Где этот грамотей, который мне доказывал какая убунта LTS годная и небаженная. Вон, можно наглядно посмотреть, как страдают аналогичные хомячки: https://habrahabr.ru/post/282197/
>>723471 >Вот 2 ситуации, первая это копирование при инициализации, а вторая при присваивании одного объекта другому У тебя везде присваивание. Копирующий конструктор вызывается при Class c( other_c ) или new( other_c ). Перемещающий конструктор, соответственно при Class c( move( other_c ) ).
ЫАААААААААААААААААААААААААА БЛДЯЯЯЯЯЯЯЯЯЯДЬ!!! Ебаные шаблоны! Сука, как горит моя жопа, пиздец! Дело в том, что мне нужно запилить метод, который будет принимать только N переменных определённого типа. Без костылей в виде is_any как тут: http://cpp.sh/6wie И как собрать лямбда-функцию по шаблону, если в шаблон я посылаю только тип параметра и его количество? Ну просто скоро крышей поеду, если не разберусь. Неужели для такого простого результата нужно городить тонны кода и прочих is_any? Или подключать boost? Хочу на чистом стандарте, без костылей и сторонних библиотек.
template <class T, unsigned int N> class Yoba { private: std::function<T(T...??????)> function; public: template<class... Args> Yoba(const std::function<T(Args...)> &function) : function(function) { static_assert(sizeof...(K) == N, "blyad, ty ohooel?"); } };
int main() { Yoba<double, 4> yoba([](int a, int b, int c, int d){ return a + b + c + d; }); return 0; }
>>723683 >Дело в том, что мне нужно запилить метод, который будет принимать только N переменных определённого типа. А ты можешь объяснить, зачем это нужно? Ну ок, представим (т.к. это невозможно), что ты шаблонами смог генерировать методы с конкретным числом аргументов.
Но для того, чтобы их вызывать, тебе всё равно надо руками писать вызов метода с определённым числом аргументов.
>>723683 is_any нужен только для проверки типа, можешь его убрать. И это не костыль, а обычное метапрограммирование. Если связался с шаблонами, то такого рода приключений будет очень много.
>>723734 > можешь его убрать. И это не костыль А что это тогда, если без него у меня компиляция будет проходить не так, как я хочу? Почему тут нет какого-нибудь std::generate_types(int, 10)?
>>723729 > В чём ты хочешь получить преимущество? Не преимущество, а возможность иметь член класса в виде лямбда-функции, которая принимала бы шаблонные аргументы.
>>723683 >Дело в том, что мне нужно запилить метод, который будет принимать только N переменных определённого типа. Походу тебе массив нужен. А вообще от копипасты ты не треснешь.
>>723683 Решение твоей проблемы есть, но там нужно ебаться с метапрограммированием по типу строения tuple. Я, в принципе, могу набросать, как оно выглядит, но не лучше ли юзать вместо кучи параметров один массив нужной длины? Для однотипных величин сам б-г велел - оверхеда даже меньше из-за отсутствия выравнивания, компилится быстрее.
>>723749 Не тресну, но мой код должен быть легкочитаемым, и чтобы я мог при желании легко его воспроизвести без копипасты.
>>723748 Хочу запилить класс, который будет максимизировать значение моей лямбда-функции. У неё N аргументов типа T, этого должно быть достаточно для её описания.
>>723754 Да, я уже решил делать через массивы. Но как-то неожиданно, что я столкнулся с такой масштабной проблемой, которую изначально даже не видел. Алсо, массивы немного неудобные. Вместо доступа к аргументам функции мне придётся обращаться к элементам массива, у которых вместо исчерпывающего названия будет только номер. Можно с enum'ами и map'ами поебаться, но это всё не то.
>>723769 Ты занимаешься какой-то хуйней. Намного проще заранее расписать все варианты с N, потому что их будет мало. А ты тратишь столько времени, чтобы решить это средствами метапрограммирования.
>>723735 >Почему тут нет какого-нибудь std::generate_types(int, 10) Возьми и сам напиши. Один раз помучаешься, зато потом в подобном коде будешь разбираться.
>>723789 А если у меня функция от 100 аргументов? Все 100 расписывать? Понимаю, что лучше такие объёмы в массивах перемещать, но хотелось бы универсальность.
>>723796 >Понимаю, что лучше такие объёмы в массивах перемещать, но хотелось бы универсальность.
Вот в этом твоя ошибка. Если ты передаешь больше 5 параметров одного типа, то где-то у тебя закралась логическая ошибка. Эта универсальность нахуй не сдалась.
>>723800 В конце концов, это можно написать на макросах. И поверь, в этом случае читабельность кода и ошибок будет гораздо выше, чем у решения на шаблонах.
>>723824 Это, кажется, старая фишка. Можно её запилить, но зачем? Они не помогут сделать лямбда-функцию с числом аргументов, зависящем от шаблона. Да и не нужно это, массивы действительно выручают.
>>723824 Ну нет, если уж нырять в мету, все должно быть ммаксимум обобщенным и идеальным, иначе весь смысл ебли теряется. А у тебя типы не чекаются на приводимость из T.
>>723824 Проблема в том, что надо не убирать параметры из списка на каждой итерации, а добавлять. Когда убираешь все просто - при нуле у тебя пустой список, а когда добавляешь, тебе надо хранить и тип и количество аргументов.
>>724136 Давайте запилим стартап с шаблонами и метапрограммированием же. Как минимум джва ценителя в треде есть. Хотя я бы таки вместо костыльного генератора сделал через тупл и index_sequence, как белый человек.
>>724477 Тоже борды. Даже эта борда написана на крестах. А проще всего начинать с написания мелких либ, которым не смог найти аналогов. Отличное отношение полезности к усилиям, можно дохуя звезд на гитхабе словить.
Есть vector <vector <pair<int, int> > > g1; где-то далеко в этот вектор мне нужно считать данные из файла (если число - пара (1, число), если ноль - пара (0,0)).
Как это сделать не особо поебав себе голову? через push_back, make_pair - ругается
>>724534 Что именно непонятно? Есть вектор векторов. Каждый элемент - пара чисел типа инт. Имеется файл, в котором всякие числа, нужно считать их в этот вектор с условием: если число не равно нулю, то считываем в пару 1, число если число равно нулю, то считываем 0, 0
>>724537 "Ой, мальчик, подойди сюда, у меня тут ошибка высветилась" - это для бухгалтеров, а не программистов. "через push_back, make_pair - ругается" - даун ебаный.
>>724859 Чувак, если ты хочешь написать проект, _чтобы выучить язык_ - то это подразумевает большой и сложный проект, который позволит тебе осознать не только синтаксис, но и особенности языка. Если тебе нужен не проект, а какая-то мелкая залупа, то этой мелкой залупы нужно в десятки раз больше. В таком случае пиздуй читать PPP от страуструпа. Там как раз практикуется подход куча заданий -> скилл.
В задании у Страуса сказано, чтобы я узнал о списках с пропуском и реализовать их. Прочитал что да как, сразу и не понятно все. Например, он должен быть (список) изначально отсортирован, а я и этого не умею. Это тонкий реквест от дяди Страуструпа, чтобы я пошел читать книгу по алгоритмам и вернулся через год выполнять эту задачу? (или это не все так сложно, как кажется на первый взгляд?)
>>725229 >Это тонкий реквест от дяди Страуструпа, чтобы я пошел читать книгу по алгоритмам и вернулся через год выполнять эту задачу Кокой ты догадливый. Пиздуй учить алгоритмы и структуры данных.
Есть корректно работающий в одном цппшнике код, с обьявлением и инициализацией глобальных переменных. Когда я пытаюсь забрать часть функций вместе с глобальными переменными которые они требуют в другой класс, компилятор начинает говорить: error LNK2005: "char * pBuf" (?pBuf@@3PADA) already defined in Class.obj
И такой текст на все переменные, несмотря на то что они в единственном экземпляре. Что с этим можно сделать?
>>725341 Смотри сюда. Хедер это только декларация чего-нибудь от переменной до интерфейса класса, и этого недостаточно чтобы определеить глобальную переменную. Сами же переменные ассоциируются с сорцами и поэтому их определение содержится как раз в сорцах, которые и компилируется в *.obj файлы. Чаще всего подобная ошибка возникает при множественной декларации в хедерах или множественном определениии в сорцах. Поэтому либо ты пиздишь, либо Ctrl+F по всем сорцам.
>>725345 >Иди читай про процесс компиляции и компоновки. А так же про формат исполняемых файлов А вкратце можно, что где обьявлять и где инициализировать чтоб работало? Я бы почитал, но времени 2 дня осталось, а мне надо весь проект под ооп успеть переделать.
>>725352 >Надо было раньше думать Но... я же написал проект. Осталось только разнести функции по классам и придумать что от кого наследовать, чтоб было красиво. >нужно в объявлении указать extern Спс, сейчас попробую
>>725356 Попробовал. опять на то-то ругается. Короче, использовать глобальные переменные в классах хреновая идея, да? Лучше создать еще один класс, в котором будут храниться все необходимые переменные?
>>725422 По умолчанию там сортирует по возрастанию. А мне надо, чтобы сортировалось по другому признаку. Если конкретно, то d[v1]<d[v2], где d -- глобальная переменная. При сортировке массива например свою функцию пихаешь третьим параметром. sort(&a[0], &a[n], sort_f). А как тут так же сделать?
>>725360 Это осталось со старых времен. В С (нормальные люди) используют широко. Публичный интерфейс (функции которые должны быть доступны в других частях программы, и задекларированы в хедере) объявлены нестатическими, все остальные функции считаются приватным интерфейсом, должны быть доступны только в пределах юнита (трансляции) и должны быть объявлены как статические. В плюсах, если держаться ООП подхода, в таком нет необходимости - функции раскиданы по классам и если нужно объявлены как private. Вообще на работу программы объявление функции статической никак не влияет, только на линковку. Тоесть прямой необходимости объявлять функции статическими нет, это вопрос стиля программирования.
Бля посоны какого хуя sizeof(float) == 4 и при этом возможно: float var = 1e37; ??? При этом 10^37 занимает 63 бита. При этом это число хранится в мантиссе, т.е. весь float занимает минимум 63+8 = 71 байт.
У меня есть подозрение, что обычный float - это тот самый 80-битный extended floating point из intel 8087. Но тогда какого хуя sizeof возвращает 32бита?
>>725626 Читай IEEE 754, дурачок. Давай рассуждать логически. у тебя есть отрезок от нуля до одного действительных чисел. Мощность этого множества чуть больше чем дохуя. Откуда можно сделать вывод, что действительные числа это один большой наёб. Где? В конечной точности типов с плавающей запятой.
>>725641 Сам дурак, плюс твое объяснение не очень-то и понятное. Но я уже вычитал, что в float запятая, разделяющая 0 и -1 разряды, не только плавает, но может и просто отсутствовать нахуй. В таком случае речь идет о потере точности уже в положительных разрядах. Ясненько.
>>725718 Если у тебя студия, то распихиваешь тот кривой код по трем файлам, в студии жмешь "создать проект из существующего кода" и выбираешь эти файлы. Качаешь уже скомпиленную версию pdcurses, подключаешь и должно по идее работать.
>>726020 Я не поэт, кресты я знаю слабо, Чтоб рифмовать баззворды через раз. Удел мой - ждать, покуда сын Баала, Наш легитимный ОП, войдя в эстаз, Извергнет лиру запоздало...
>>726048 >726020 >Я не поэт, кресты я знаю слабо, >Чтоб рифмовать баззворды через раз. >Удел мой - ждать, покуда сын Баала, >Наш легитимный ОП, войдя в эстаз, >Извергнет лиру запоздало... У "легитимного" ОПа не лучше. Все равно мочу дергать будем для правки шапки. Заодно и стихи для стихомразей вставит, когда оп-хуй созреет
Нужно нарисовать треугольник/кружок/етк и затем перенести его на другие координаты. Никакой анимации и т.п. Что использовать для графики? Есть ли что-то примитивнее и быстрее для раздупления, чем qt?
не могу доперетьАноним08/05/16 Вск 22:22:12#609№737855
В общем-то пресловутый рюкзак вводим кол-во предметов, вместимоть рюкзака, ценность предмета, вес предмета
И код вроде бы работает, но хреново. То есть при вводе кол-во предметов - 3, вместимость - 50, дальше ценность и веса предметов 60-20, 100-50, 120-30 код пашет, но если вбить например 1 предмет, вместимость 1000, и ценность с весом 500-30, то выдает нечто рюкзак превышающее, а если вбить так же 1 предмет, вместимость 10, стоимость-вес 500-30 выдает нуль, понять не могу где налажал
int main() { int n; int capacity; std::cin >> n >> capacity; vector<int> values(n); vector<int> weights(n); for (int i = 0; i < n; i++) { std::cin >> values >> weights; }
За пять лет не осилившие треды?
Да будь весь комитет мертвецки пьян,
Он протрезвел бы от такого бреда!
Нетворкинг! Модули! Разгулье корутин!
Пихаем все, фич не бывает много!
Вы намараете хэллоуворлд один,
А нам - линковщик редизайнить снова?
Как стая шелудивых псов, давно
Не знаете сомнений, сна, покоя,
Слепить мечтая из плюсов Goвно,
Чтоб впредь уж не пришлось скрипеть башкою.
Неужто мы под шелест перфокарт
И трескотню ЕС-ок вас зачали,
Чтоб вы, едва открывшие стандарт,
Влезали в пекло и права качали?
Зря тявкаете! Бьерн и мудр и строг,
Он дрянь в язык не пропустил ни разу.
Коль выждать не хотите нужный срок -
Ступайте мять удавов одноглазых.
Старший брат:
Предыдущий:
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-треды