Я синтаксис крестов постиг И прочитал все доки к boost, Стандарт запомнил наизусть И в метамагию проник, - Глупец! Я знать не знал о том, Что крестоблядка ждет потом.
Три дня на лаврах почивал, Но не успел войти во вкус, Как комитет по C++ Очередной стандарт принял, И новых правил в нем до ста! Я Бьерна новый том достал...
Зубрю, дрочу кресты - и вот Тому пошел десятый год. Считаю байты я всегда, Гоняю их туда-сюда, Лбом облысел, лицом зарос, Два года мучает понос, Хлебаю борщ и обнищал, Но так всех тайн и не познал.
Входи, ньюфаг! Быть может, ты Сумеешь обуздать кресты? Здесь рады тем, в ком страха нет, Кто не съебет в питонотред, Почуяв местный мрачный дух. Ты с нами, или ты петух.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
Q:Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q:Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q:Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q:Окей, я решил вкатиться. Какие же книги мне читать? A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Учимся не писать говнокод: Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все. Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Проектирование: Следует пролистать все перед переходом от лаб к написанию настоящего софта. Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать. Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Ахтунг! Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Тонкости языка (для гурманов): Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++: Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты: Читать по необходимости. Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q:Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q:Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей. A: Вот тебе блоги, факи, референсы и всякое такое:
Q:Я готов начать погроммировать! Куда мне писать код? A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q:Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A: Без проблем:
Q:Мне надоело писать велосипеды, какие у вас тут популярные либы? Q:Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература: Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении: libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se SFML - работа с графикой и аудио - http://www.sfml-dev.org FLTK - графические интерфейсы - http://fltk.org
Q:Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A: Дальше переходишь по ссылке http://cppquiz.org/ , пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>>653035 Потому что там исходники буквально все в одну строчку, и не получится по-быстрому изменить форматирование если ты об этом. А еще я хотел сделать все вместе как масштабный перепил шапки, чтобы и книжки новые были, и всякое разное. Поэтому пока ищу и структурирую материалы для впиливания, ну и смотрю реквесты в треде, так что пилите предложения сейчас, господа инб4 дейтелы/выкинуть половину шапки, лол.
>>653050 Так там фактически то же самое, но другими словами. Я не очень понимаю, зачем делать ссылку на вики, тем более, что там хуй тебе объяснят в деталях. Вроде в одном из тредов вбрасывали, как хейтеры периодически набигают на статьи и меняют формулировки на хейтерские. Там у них даже была здоровая паста типа методички ольгинцев.
>>653061 >хейтеры периодически набигают на статьи и меняют формулировки на хейтерские. Там у них даже была здоровая паста типа методички ольгинцев. хотеть видеть!
>>653146 Тащемта да, боль. Я хоть и не фанат этих ебанутых стихов, но похуй. Но шапка - это тот еще пиздец. И ладно бы если взял все хорошее от старой шапки и от новой, но нет, хуй! Как последний вахтер выкатил свое поделие с говноразметкой и орфографическими ошибками, которые не фиксит уже 4 тред(!!!).
>>653070 Где-то в районе десятого треда оно было, сделай на архиваче поиск по "ru.wikipedia" в треде. >>653144 Это временно же, я просто не успел перепилить разметку. Я во многом не согласен с твоей позицией по поводу шапки а от твоей пунктуации меня вообще трисет, но полностью разделяю мнение, что нужно брать все доступные хорошие идеи и пихать туда. Сожалею, если кому-то мои действия кажутся вахтерскими, я действительно здесь хочу исключительно процветания треда и комфорта для анона. Разметка будет перепилена уже скоро. >>653147 Мне показалось, что ты троллируешь так. Если ты заглянешь спойлер, твоя жизнь никогда не станет прежней: на самом деле "зделать", "джва" etc - это устойчивые на двачах обороты, пришедшие из известной пасты про корованы. Если ты видишь их, то ты с вероятностью ~1 видишь отсылки, а не проявления безграмотности. Такие дела.
Есть unique_ptr<Dungeon> dungeon(new Dungeon(x,y)); У класса Dungeon есть перегруженный оператор[] Как к нему обратиться? dungeon[x][y] выдает ошибку: 'std::unique_ptr<Dungeon>' does not provide a subscript operator
Хотеть такую переменую которая будет вычисляться при обращении к ней. Тип int. Функцию не хочу заводить. Думаю завести класс с оператор копирования в инт, но как выть со скоростью и получить доступ к элементам другого класса?
>>653689 >Хотеть такую переменую которая будет вычисляться при обращении к ней. Придумано 20 лет назад, называется lazy initialization. >Думаю завести класс с оператор копирования в инт, но как выть со скоростью и получить доступ к элементам другого класса? А теперь сформируй по-человечески. Или хотябы набрасай код, что ты там имел ввиду.
Почаны, а в энтерпрайзе на серверах юзают boost? Или ещё что-нибудь?
Выбирал что учить: Java или C++. Стал учить C++. Покурил по STL. Пиздатые контейнеры, итераторы, регэкспики и прочая тележка ништяков, которой я остался доволен, но не тут то было!
Разбился я об задачу сделать GET запрос, хоть куда-нибудь! Охуеть! даже на ссаной джаве в стандартных библиотеках нарыть можно network!
sys/socket.h Это для бородатого прпродителя всех современных языков. Хочется обмазываться ООП!
Короче охуев от происходящего и вмазавшись стопарём для верности я пошёл курить boost/asio.hpp
И да, анон, я сделал это!
Но это не паста об успехе. Это паста о БОЛИ! Неужели нет никакого адекватного способа сделать элементарный http запрос, как в JS? пирикотываюсь с WEB кодинга и интересует синтаксис подобный AJAX
Нет, надо открывать сокет, согздавать tcp соединение, писать туда >>GET / HTTP/1.0, заголовки и прочую http-магию!
Потом буфером читать всё приходящее!
Чому бы не сделать что-нибудь типа string data = http.get("http://2ch.hk"); синхронно, но похуй ?
Я подвыпивший, анон. И учить на нетрезвую голову буст... ОТЛИЧНАЯ ИДЕЯ!
На первом пике тот самый ГОВНОКОД. До сих пор не разобрался с namespace, но всё впереди.
Помогите найти репозиторий на плюсах, со средней по объемам кодобазой, который можно было бы раскурить за неделю, почерпнуть что-нибудь новое для себя, возможно даже отправить пару патчей. Охуенно было бы, если бы присутствовал Boost/Qt. Я регулярно отсылаю патчи в два проекта, которыми пользуюсь сам, но я более не нашел ничего нового. На том же гитхабе куча непонятно для чего хуйни вот именно непонятно для чего, а велосипеды писать уже наосточертело. Работы у меня нет, а руки как-то набивать надо. Я знаю, что сейчас обосрете, но войдите в ситуацию - я хочу и буду развиваться, но я сбился с пути и не знаю, как мне развиваться дальше.
Рейт сортировку кучей. Она работает скорее всего, но это не точно т.к. не нашёл задачу на которой её потестить не переделывая, но выглядит очень плохо. Что переделать?
>>653767 >Неужели нет никакого адекватного способа сделать элементарный http запрос, как в JS? >Нет, надо открывать сокет, согздавать tcp соединение, писать туда Напиши библиотеку. Имплементацией будет вот эта вся ебала с сокетами, а интерфейсом твой метод: >http.get Так-то везде сокеты используются, просто в некоторых яп есть библиотеки, которые представляют нормальный интерфейс.
>>653795 Нет, ну понятно, что за красивым http.get(); скрываются сокеты и прочая чёрная магия. Я к тому, что лепить велосипеды есть не самая привлекательная практика. С другой стороны, чому бы и нет
>>653773 >Помогите найти репозиторий на плюсах, со средней по объемам кодобазой, который можно было бы раскурить за неделю, почерпнуть что-нибудь новое для себя, возможно даже отправить пару патчей.
Зачем? Тебе делать нехуй, специально курить левый код? Хочешь найти йоба-архитектурные решения - читай книжки, пиши код в интересных тебе проектах.
>>653811 формошлепить - вряд ли. c#, java - это да, а вот qt не очень распространен. computer vision - возьмут, если найдешь. другие языки редко используются. геймдев - возьмут, если найдешь. другие языки почти не используются. научные вычисления - возьмут, если найдешь. тут, чаще всего, похуй, какой язык используется. разве если нужна скорость, тогда точно с++ .
>>653812 Какие такие книжки по йоба-архитектурным решениям? В книжках все охуительно просто, да, и примеры такие понятные, потому что оторвано от реальности, там не покажут, где можно использовать хуевый антипаттерн, а где можно сделать вот так уот. Нахуй эти ваши книжки, сколько можно уже их читать?
Аноны, на этой неделе нужно будет писать лабы на C++, а у меня даже компилятора нет. Какой выбрать? Codeblocks не вкатил, с Eclipse я обосрался, так как не шарю в каких-то там установках компилятора отдельно и вообще не понимаю разницы между minwg и cgwin. Есть что-то на уровне Flash Develop - чтобы установил и пишешь спокойно, без всякой мозгоебли?
>>653848 >Почему именно студия? Много умных дяденек из умной компании делают IDE вместе с компилятором. Простой и специально для винды. А ещё работает хорошо. Но я пользуюсь кодблоксом.
Кстати, аноны, а расскажите, нахуя нужны библиотеки? Ну не в смысле их содержимое, а сама идея библиотек? Почему нельзя, чтобы всё можно было использовать без десятка include'ов в начале программы? И не обсираться каждый раз, когда подсмотренная где-то фича в середине кода требует библиотеки, о которой ты даже понятия не имеешь?
>>653868 даже в рашке относительно нормальный интернет есть, если у тебя конечно не беспроводной YOBA-модем >>653860 >>653871 А там есть автозаполнение и справка? Автозаполнение на уровне того же Codeblocks или PascalABC - чтобы могла предложить разные варианты на введённую часть слова и указать параметры для функции/процедуры.
>>653881 ньюфаг же, наверняка для тру погромистов с двача это вопрос на уровне "почему небо синее" >>653878 >>653884 Получается, что подключенная библиотека банально позволяет экономить время и место, чтобы не приходилось самому писать все функции и процедуры?
>>653893 >Получается, что подключенная библиотека банально позволяет экономить время и место, чтобы не приходилось самому писать все функции и процедуры? Ага. А ещё если ты не будешь подключать лишнее, то у тебя имена не будут заняты и сможешь например свой класс set написать.
>>653895 Подозреваю что с этим. >A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
>>653902 Ну вот и подробный гайд по созданию проекта в студии пригодился. Передайте нелегитимному что он был не прав когда его из шапки выпилил. Представляете как долго пришлось бы ему всё объяснять без этого абзаца в шапке?
>>653805 Она тяжелая, зараза. Если подключить и один раз поебаться, то удобно, да, подсядешь почище, чем на хмурый, но весь вопрос в том, стоит ли начинать. Если проект мелкий, то она на порядок тяжелее всего твоего кода будет, по весу сравнима с бустом жи.
>>653953 Эээ, ну как (*dungeon)[42], например. Это справедливо для любых методов-операторов не с нормальным именем, а с operator[] или типа того - чтобы использовать, нужно разыменовать указатель. Еще можно написать dungeon->operator [] (42), будет то же самое, но не так красиво.
Короче говоря, работай с unique_ptr как с обычным указателем, в плане доступа они идентичны.
>>653958 Заебали бля, идите учить синтаксис - нет оператора [][] в C++. [][] - это два вызова метода "operator []" или (obj[])[] в случае встроенного выражения над указателями. Чтобы имитировать семантику без использования вложенных объектов хуярьте метод "get(row, col)"
Соглашусь, что мотивация выпилить этот гайд была неправильной, но я по-прежнему считаю, что этот гайд тут лишний. Этот тред - отправная точка для новичков и место перетереть для опытных господ. Не нужно делать из шапки книгу, в которой все написано. Так ты будешь повторять уже существующие 1001 статьи в интернете, в особенности если это офф. справка из IDE. Достаточно либо дать ссылку возле упоминания IDE в шапке, либо напомнить, что документацию не просто так пишут. Об этом многие почему-то забывают.
>>653982 Кстати да, я эту страницу не видел раньше, можно и заменить. Главное, чтобы была какая-нибудь инфа вообще, а то уже раза три вкатывались ньюфаги, у которых то студия не ставится, то проект не создается.
>>653993 Это дурной тон же. Получается не прокси, а такой недоадаптер. Прокси должен полностью имитировать интерфейс, е добавляя ничего лишнего. А адаптер ради переименования одного метода это признак плохой архитектуры.
>>654115 >Linux: Code::Blocks АААААААААААААААА БЛЯЯЯТЬ ГАЧАЛЬНИК ЭТОТ ПИДОР ОБОСРАЛСЯ ИДИ МОЦ ЕГО БЛЯДЬ! Замени хотя бы на QtCreator. Ещё dev-c++ замени.
>>654129 он у меня завис до того как я успел хэлоуворд скомпилировать и вообще не удобный интерфейс кнопочки нужные не могу найти. у других нуфагов будет также
>>654121 Ага. >>654123 >>654125 >>654126 Я думаю, оптимальным будет CodeLite. Он легкий, с дружелюбным для ньюфага интерфейсом, и автодополнение там самое лучшее среди швабодных IDE.
У меня очередной нубский вопрос. long long у на 64 битное. Но я могу этот тип использовать на 32 битных процах. Это число делится на 2 части(2 регистра)?
>>654327 > long long у на 64 битное Он может быть равен одному байту и это будет полностью соответствовать стандарту, если все остальные типы тоже по одному байту.
>>653872 пссс я тебе пальну оче хитрую технику по оптимизации компелирования... тебе не нужны инклуды, просто смотришь на объявление нужной тебе функции в заголовочники и копируешь его к себе в самое начало кода. и да, в зависимости тяни сразу все бинарники, что есть на системе. тогда компилятор сможет съоптимизировать всё это под капотом. и твой конечный бинарник буде тонинькем
>>653937 > 2017 > если я подключу эту библиотеку, то мой код станет весить больше на 100kb ОБОЖЕ-ИМПЕРАТОР > оптимизацию конечного бинарника линковщиком до сих пор все игнорили
>>654348 Что с ним? add поднимает элемент по куче, а del заменяет корень на 0 и топит его ну и возвращает его. sort пока есть элементы выводит корень и просеивает 0 который на его место ложит.
>>654396 Это простая функция которая просто возвращает адрес потомка. Понятно работает и по несколько раз её пересматривать не надо. Вот и сократил. Не мешает когда в одну. А функцию с одним ретурном на 6 строк это не компактно. Я же заблужусь в этом классе потом.
>>654136 Лол, ну я ведь тоже человек. Бывает, что времени нет читать весь тред, особенно с учетом активности анона. Похоже, бамплимит будет задолго до конца этой недели.
>>654370 Вспомнил статью, которую недавно читал. Там хаскеллист добивался, чтобы его формочка на wxHaskell компилировалась меньше, чем в 20 мегабайт. Это, конечно, не так критично в 2016 году, да, но все равно возможность фонового необременяющего байтоебства это одна из привлекательных фич крестов.
>>654490 > окажется что в long long 32 бита В несоответсвующем стандарту компиляторе, разве что.
>В какой строчке стандарт противоречит тому что я написал? http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf#35 — minimum value for an object of type `long long int' LLONG_MIN -9223372036854775807 // −(2^63 − 1) — maximum value for an object of type `long long int' LLONG_MAX +9223372036854775807 // 2^63 − 1 — maximum value for an object of type `unsigned long long int' ULLONG_MAX 18446744073709551615 // 2^64 − 1
inb4 "эта стандарт си, а я пра сиплюсплюс гаварю, ты саснул!!!": std::numeric_limits<long long>::lowest() = LLONG_MIN std::numeric_limits<long long>::max() = LLONG_MAX
Аноны, нужна ваша помощь. mysql_real_query(conn,"SELECT * FROM clients.client",200000); res = mysql_store_result(&conn); while((row = mysql_fetch_row(res))) { for (int i=0 ; i < mysql_num_fields(res); i++) dataGridView1->Rows->Add(); как теперь в Rows положить строку из вывода запроса?
>>655840 Делаешь пандорический захват, лифтишь запрос в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически записываешь строку. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
>>655931 Последнее время один чел вбрасывает тезисы из Дизайна и эволюции, а мы их обсуждаем. Новичков не помню даже. Заходи и задавай вопросы, если тебе формат этого треда не устраивает.
посоны, а давайте анонимную имиджборду запилим на плюсах по типу биткоина? суть такова: можно майнить посты, делать мудерацию, а также запускать сайдчеины
>>656126 Инди разработчикам стоит брать Java (Minecraft) или C# (Unity, XNA и т. п.). C++ для движкописателей игр ЫЫЫ класса, с таких вещей не начинают мамкины гейдевелоперы (а если начинают, то заканчивается это быстро с потерей интереса).
>>656127 Я, как раз, читаю книгу. Кстати, я уже 3 книги скачал - страуструп, с++ с шапки для продвинутых, и с++ для программирования игр.
>>656129 Я, как-то, запустил юнити и мало что там понял. Там надо эту программу изучать, а не язык.
>>656135 Ну, я хотел для начала создать простенькую змейку. Как на мобильниках, не думаю что это сложно, так? А потом усовершенствовать, написать физику етц.
>>656138 >Я, как-то, запустил юнити и мало что там понял. Там надо эту программу изучать, а не язык. То что реализовано в юнити, самостоятельно ты не напишешь за всю свою жизнь. Ты даже примитивное подобие 3д рендера не запилишь раньше чем через полгода на плюсах
>>656142 А как инди разрабы делают игры с 0? Я вижу некоторые вообще делают с 0 такое, что волосы дыбом встают - overgrowth вообще 1 человек с 0 написал.
>>656138 Ну вот бери python и делай свою змейку. Для начала тебе нужно научиться программировать, похуй на чем, а потом взять наиболее удобный язык для своих задач. И это не С++, который дяди используют для бескомпромиссной производительности и для изучения которого нужно одних книг прочитать штук 10.
Кто знает куда хром дел мою картинку ------WebKitFormBoundaryfAjvaUXbrUBQlmR0 Content-Disposition: form-data; name="photo"; filename="Снимок экрана от 2015-06-26 15:24:11.png" Content-Type: image/png
>>656615 Хоть одно его достоинство назови, кроме конченной оверархитектурности (которую самые отбитки из илитки считают чем-то хорошим). На нём даже блять нет ни 1 нормального http сервера (кроме pion который по первормансу на уровне нодыжс), который либо быстро работал бы, либо не падал где-то в недрах буста и не обсирался с чем нибудь вроде алгоритма Нейгла и кучи аналогичной хуйни имеющейся по дефолту.
Есть куча реально актуальной для текущих тенденций хуйни вроде акторов, корутин, транзакционной памяти и кучи прочего - в стандарт пропихивают ёбаный буст, код на котором в 5 раз больше кода на обычных сокетах (и причём имеет свою изголённую экосистему понятий и паттернов - нормальный код с сокетами куда легче читать).
>>656649 > Хоть одно его достоинство назови Кросплатформенные, headers-only, без дополнительных внешних зависимостей (кроме STL), асинхронные сокеты. Если ты знаешь что-то такое, но лучше - с удовольсвием буду использовать.
>>656663 >Кросплатформенные Все современные сокетные библиотеки. >headers-only, В чём плюс-то? В том что хэловорд 10 минут компилируется? Разве что под спермой без репозиториев и нормальной структуры фс проблемно это говно руками тащить. >асинхронные сокеты. См пункт 1. >Если ты знаешь что-то такое, но лучше - с удовольсвием буду использовать Да даже сгнивший libevent был лучше, лол. Сейчас самая адекватная - libuv.
>>656680 > Все современные сокетные библиотеки. Из более-менее живых я и выбрал асио лол, их там всего штук 5 будет, а живо-то хорошо если 3.
> В чём плюс-то? В том что хэловорд 10 минут компилируется? Разве что под спермой без репозиториев и нормальной структуры фс проблемно это говно руками тащить. Ну, собственно мне как раз и нужна возможность ёбнуть либу сразу в build tree и получить в итоге бинарь с минимум внешних линков.
> Сейчас самая адекватная - libuv. Спасибо, посмотрю.
Хотет pdf-ридер со встроенным переводчиком на лету. Вот думаю, накидать с нуля, или взять рабочий вроде evince/Okular и мутить с ними дальше? Хотя там зависимостей - я ебал.
>>657325 #include <iostream> #include <fstream> using namespace std;
int main() { const int n = 5;
int a[n][n]; ifstream fin("text.txt"); // открыли файл для чтения for (int i =0; i < n; i++){ for (int j =0; j<n; j++){ { fin >> a[j]; cout << a[j]; } } } cin.get(); }>>657325
Анон, как в qt5 правильно подключаться к бд? #include <QtSql/qsql.h> #include <QtSql/QSqlDatabase> #include <QMessageBox> #include <QCoreApplication> #include <QApplication> #include <QtSql/QSql> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlDriver> #include <QtSql/QSqlQuery>
вот инклюды, на клик я делаю : QSqlDatabase db = QsqlDatabase::addDatabase("QMYSQL"); и потом работа с переменной дб, а после bool ok = db.open что я делаю не так?
Посоны нужен алгоритм для покрытия одинаковыми элипсами прямоугольной и\или элиптической области. На выходе нужно иметь кординаты центров этих элипсов. Можно покрывать с перекрытиями или не полностью, но не ниже определенного предела (90-95%). Есть у кого-нибудь ссылка на реализацию этого алгоритма (не пейпер с Ellipse Packing алгоритмами и матешей) или библиотека в которой есть это?
void Main::on_connect_clicked() { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb"); db.setHostName("localhost"); db.setDatabaseName("clients"); db.setUserName("manager"); db.setPassword("I_think_y0u_lie"); bool ok = db.open(); if (ok) QMessageBox::information(NULL,QObject::tr("Информация"),tr("Не все так плохо...")); }
сама функция, и ошибка main.obj:-1: ошибка: LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QSqlDatabase::~QSqlDatabase(void)" (__imp_??1QSqlDatabase@@QAE@XZ) referenced in function "private: void __thiscall Main::on_connect_clicked(void)" (?on_connect_clicked@Main@@AAEXXZ)
в pro файле прописано QT += core gui sql
Вручную подключил Qt5Sql и ничего не вышло, помогите с ошибкой, в гугле ничего внятного нет.
>>657447 ох лол, я одну букву неправильно написал. Теперь осталась одна ошибка: qtmain.lib(qtmain_win.obj):-1: ошибка: LNK2019: unresolved external symbol _main referenced in function _WinMain@16
>>657456 Тут 2 варианта: ты либо запоганил объявление main(), либо куда более вероятно - пытакшься компилировать гуй приложение с настройками линкера для консольного (или наоборот).
>>657484 Эээ, вась, это не он. Это конструктор говна которое овнится в мэйне. Открой main.cpp Погугли как устанавливать флаги линкера в qmake. Для вс компилера это /SYBSYSTEM: если я правильно помню. >>657480 >гнумобилдер гумнобилдер Нет, этот-то хороший текстовый редактор, я про цэпэпэбилдер.
void Main::on_connect_clicked() { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb"); db.setHostName("localhost"); db.setDatabaseName("clients"); db.setUserName("manager"); db.setPassword("I_think_y0u_lie"); bool ok = db.open(); if (ok) QMessageBox::information(NULL,QObject::tr("Информация"),tr("Не все так плохо...")); }
вот что в main.cpp Я что-то после эмбаркадеро что-то не догоняю.
>>657513 >Мультиплатформа Относительно Qt - хуйня. Если смотреть простую переносимость - любой открытый компилятор обоссыт ебало (у них какое-то говно на основе шланга). >кастомный гуй на изичах Он, блять, даже в ёбаном gtk уже на изичах делается. >работа с бд. ну это вообще кек.
Собственно, вот на этот вопрос обсыкивали на билдер: >>634056
Пишу свободную функцию которая принимает концепт SinglePassRange, разумеется по значению. Но всякие пидоры, которые будут звать, могут засунуть туда не iterator_range, а например boost::small_vector. Хочу внутри поставить static_assert в духе has_advance_begin<SinglePassRange>::value. Как быть?
https://ideone.com/FkFj0T >метод, принимающий в качестве аргумента тип данных без указания имени Аноны, поясните, что это такое? Как это возможно? Зачем это нужно?
Предположим я захотел создать класс, который хранит(в конструкторе все парсится) http сообщение(то есть заголовки, статусную строку и тело). Я хочу сделать так, чтобы в объекте изначально, при создании, уже хранились некоторые нужные для парсинга значения. А именно имена заголовков http сообщения(accept, date и прочие). Так как мне предстоит вычленять из запроса имена заголовков, мне придется воспользоваться поиском подстроки. Искать я буду с помощью тех значений которые храняться в классе изначально. Хранить придется в QHash<int, QString>. Чтобы потом получить число соответствующее найденному заголовку. Так вот, QHash придется сделать статическим, дабы он не создавался в каждом объекте класса. Но мне же надо запретить его изменять, то есть сделать константным. Но при этом потребуется инициализация. Как ее выполнить?
Конечно можно не создавать новых объектов, но как сделать чтобы QHash был ВНУТРИ класса, был статичным с нужными значениями. Или может его возможно определить за пределами класса, о так чтобы он был доступен только определенному классу
>>658423 Зависит от принятой идеологии разработки. Некоторые используют, некоторые нет. Использование исключений в языках без GC может привести к проблемам и требует увереного понимания что механизма их работы. Но в свою очередь они могут упростить код.
>А именно имена заголовков http сообщения(accept, date и прочие). зачем?
>Так как мне предстоит вычленять из запроса имена заголовков, мне придется воспользоваться поиском подстроки. ЩИТО? парсь все, складывай в QMap
>Искать я буду с помощью тех значений которые храняться в классе изначально QLatin1String
>Хранить придется в QHash<int, QString>. Чтобы потом получить число соответствующее найденному заголовку почитай матчасть по протоколу, тебе это не нужно
>Так вот, QHash придется сделать статическим, дабы он не создавался в каждом объекте класса. Но мне же надо запретить его изменять, то есть сделать константным. Но при этом потребуется инициализация. Как ее выполнить? // функция которая набивает значения QHash makeData() { ... }
// переменная которая будет хранить данные static const QHash myHash;
// инициализация статического члена QHash QHttpServer::myHash(makeData());
Аноны, помогите с такой интересной ошибкой на qt void Widget::on_pushButton_clicked() { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "my_sql_db"); db.setHostName("localhost"); db.setDatabaseName("clients"); db.setUserName("manager"); db.setPassword("I_think_y0u_lie"); bool ok = db.open(); if (ok) QMessageBox::information(NULL,QObject::tr("Test"),tr("Tesr"));
}
вот код, а сообщение при нажатии на кнопку таково: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
Я даже в .pro файле написал QTPLUGIN += sqldrivers
>>658516 Ну у меня на ноуте сперма, но сечас я работаю на виртуалке c xubuntu, я хочу нативную иде + терминал до виртуалки без гуев с минимальным centos'oм.
Пробую разобраться со sql на qt QSqlQueryModel model = new QSqlQueryModel; QSqlQuery query(db); query.exec("SELECT FROM clients"); model->setQuery(query); ui->tableView->setModel(model); сделал вот так, но tableView пустой, что я делаю не так?
>>657846 Есть два... стула Нет, есть метод/функция/конструктор/етц, вызов работу которого ты хочешь каким-то образом модифицировать/параметризовать/повлиять на работу снаружи. Тогда делаешь перегрузку этой функции. Так как параметр чисто формальный и внутри не нужен, то его можно опустить, чтобы компилятор не ругался на unreferenced/unused argument. https://ideone.com/FgZ4fX пример с логгингом немного надуманный, обычно условное логгированние закатывают под ifdef'ы. Но общую идею должно дать.
>>658914 >>упростить код >Как? Не нужно в каждой функции делать проверки возвращаемого значения вызываемых функций. Если в какой-то из них возникнет исключение, оно уйдёт вверх по иерархии вызывающих функций и его поймают те, кому надо.
>>658942 Resource Acquisition Is Initialization (RAII) is a programming idiom used in several object-oriented languages, most prominently C++, where it originated, but also D, Ada, Vala, and Rust. The technique was developed for exception-safe resource management in C++
>>658941 > Для этого вот всякие Ну так имелось ввиду не то что исключения (в языках без GC) это ГРОБ ГРОБ КЛАДБИЩЕ ПИДОР а что для безопасного их использования нужен определенный багаж знаний. Поэтому некоторые предпочитают вообще не ебаться с ними.
>>658959 Чумазый пиздёныш с громкой отрыжкой и отчаянным воплём ввалился в комнату, где крестогоспода обсуждали преимущества деструкторов. Джаваблядок ошарашенно вылупился на удивлённых сэров, за пазухой у него явно было что-то запрятано. Ну, что у тебя там, зассыха? - снисходительно промолвил самый молодой из господ. А-а-фоть - заикаясь промямлила замарашка и трясущейся рукой вывалила на дорогой персидский ковёр кучу так и не выполнившихся финализаторов. Лица элитариев побагровели от такого неслыханного безобразия. Камёрдинера сюда, живо! - воскликнул опять же самый молодой и самый вспыльчивый из них. Оказия сия окончилась, как можно безошибочно предугадать который раз не в пользу плебса, оно и к лучшему, не место черни среди высшего общества.
>>658970 От твоей нумерации можно легко перейти к нумерации от корня вниз, где корень имеет номер 1: n_new = root_old - n_old + 1 Эта операция обратима: n_old = root_old - n_new + 1 и делается за константу В обычной нумерации потомки узла n есть узлы n•2k..n•2k+1-1 где k - разница между уровнями ноды и её потомков. Т.е. если узел имеет номер 0b00101, то её потомки двумя уровнями ниже имеют номера 0b10100..0b10111
Самое сложное - узнать на каком уровне находится твой узел. Это можно подсчитать также кол-вом бинарных сдвигов(делений на два), чтобы номер узла стал равным единице или другим, более хитрым подсчётом двоичного логарифма, к которому надо прибавить 1.
Если твой root_old достаточно мал, то можно наоборот - сдвигать влево пока полученный номер меньше либо равен root_old + 1. Причём сдвигать два числа - оба в начале равны n_new, но один сдвигается с добавлением нуля в конец, а другой с добавлением единицы: low_bound•=2 high_bound=(high_bound•2)+1 Тогда в конце у тебя будут сразу концы отрезков или overflow и бесконечный цикл
>>658716 Помню с этой ошибкой ебался дня полтора. Фишка в том, скорее всего, что мускл у тебя с 64битными либами стоит он же у тебя в PATH прописан, так?, а Qt распространяется 32битный, вот и не линкуется. В общем надо 32битный MySQL поставить
char *str = "stroka" Как вообще устроено создание значений, задаваемых вручную? Я так понимаю, значение "stroka" - это константа и хранится в статической памяти?
>>659653 > Можешь описать как это работает? Идея как у анона >>659129 только немного другой подход. Длина отрезка (segment_size) обратно пропорциональна уровню на котором находится узел - корню соотвествует полный отрезок, следующему уровню половина, следующему четверть и т.д. Положение отрезка зависит от положения узла на своем уровне (position) - если узел на своем уровне крайний слева то ему соотвествует крайний левый отрезок, крайний справа - ему соотвествует крайний справа и т.д. Через положение узла на своем уровне высчитывается начало отрезка, оттуда из длины отрезка высчитывается конец.
Аноны, решил сделать свой первый серьёзный проект на qt, почитываю доки, но вот вопрос: как из TableView, который заполнен через sql, как достать оттуда выделенную переменную?
Аноны, как прочитать текст из файла при помощи IStream? Гуглить честно пытался, но при существовании istream найти что то по IStream невозможно.
В частности меня интересует пример PreviewHandler'a от MS
При инициализации через стрим [code]IFACEMETHODIMP RecipePreviewHandler::Initialize(IStream *pStream, DWORD grfMode)[/code] мы получаем указатель на IStream.
Затем происходит загрузка XML как на пике. Каким образом прочитать просто текст?
>>661103 Я ньюфаг но предположу. По идее можно создать класс B, похожий на A, только с открытыми полями и при помощи приведения типов преобразовать A в B и инкапсуляции уже не будет. Если не прав, то поправьте.
>>661118 Лал? Как этот факт выделяет C++? В других языках можно либо сделать то же самое, либо там есть рефлексия и можно сделать вообще что угодно. У питона, например, мало того, что есть способы работать с методами и полями объекта, так там просто нет private полей
>>661743 >Аноны, какой минимум нужно знать по плюсам, чтобы взяли стажером за еду? конструкторы, деструкторы, операторы, raii, shared_ptr, qt, boost::asio думаю, этого на джуна хватит
>IDE Microsoft™ Visual Studio®. Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
>clang++ helloworld.cpp
>g++ helloworld.cpp
Я просто не верю, что есть в мире долбоебы, рекомендующие новичку IDE (тем более VS) вместо любой наипростейшей консольной команды.
В "Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014)" прямо об этом и говорится.
>>662122 Ну выполнит ньюфаг команду, а она ему по его ньюфажности выплюнет километр ошибок, большая часть которых на самом деле следствие одной ошибки в самом верху списка. Он посмотрит на эту хуйню и плюнет на всё. А в ide существенные ошибки распарсятся и подсветятся в самом редакторе – исправляй не хочу.
>>653023 (OP) Мне нужно сделать говно-курсач, хотелось бы под Linux его запилить а не Builder 6, все что смущает это выбор графической билиотеки. Из возможных: SFML, FLTK, GTK+. Нужно всего навсего создать окно с кнопками и по нажатию одной из них открыть еще одно либо перерисовать текущее, а там простой ввод-вывод. Вообще я нюфаг в графических интерфейсах, на плюсах только пару лаб делал на говнобилдере 6. Мою задумку можно будет осуществить, или лучше не выебыватся и быстро наделать все на билдере и продолжить учить свой JS?
>>662844 Минусы GTK+: - Плохая технологическая инфраструктура - GUI(а значит и ООП) на ебаном C это тот еще пиздец. - Плохая поддержка не linux платформ.
>>662854 Потому что нормальную инфраструктуру без него построить довольно сложно, и это будет так себе пахнуть. >>662836 >Что нет? >В FLTK сложно все эти кнопочки будет организовать?
>>662854 >Почему считается что GUI = ООП? Кто-то не понимает сути ООП, а пытается кукарекать. GUI - это самое что ни на есть чистое ООП, которое вообще можно себе представить. А все потому, что создано по подобию оперирования объектами в реальной жизни по средствам манипуляторов.
>>662855 >А что писал Страуструп по поводу ГУИ? До туда Я не дочитал. >>662857 Спасибо. >>662856 Вроде нормальная библиотека, ровно то что нужно, надеюсь документация удобная. Спасибо.
>>662846 > RVO Уже по названию же ясно. RVO ограничено как по области (ситуациях в которых оно применимо), так и функционалу - RVO только переиспользует объект, тогда как в случаях покрывемых move-семантикой вызывается специальный кастомный конструктор. Алсо я них там даже функционал разный, насколько я понимаю, временный объект создаваемый и возвращаемый из функции благодаря RVO может сразу создаваться так образом чтобы не удаляться при сдвигании стека (при выходе из функции), тоесть никакого копирования (даже неглубокого) и вообще никаких действий в принципе не происходит. Следовательно это вообще разные концепции, move-семантика не покрывает полностью функционал RVO.
>>662810 Если не собираешся потом плюсами заниматься то делай на билдере (если приймут). Если дальше в плюсы хочешь пойти то конечно билдер нахуй. Бери Qt (в общем лучше, но возможно дольше разбираться и сложнее будет со сборкой на институтских компах, так как там сложнее тулчейн) или FLTK. SFML это графическая библиотека. GTK+ это для каких-то специфических случаев когда все остальное уже не вставляет подходит, если у тебя свободный выбор то нахуй.
Подскажите, есть простенькая программа (я недавно изучаю), такой вопрос, как сделать так, чтобы если если на ответ - какой пол вашего друга, я ввёл не f or m, то мне выводило бы его ввод заново с предупреждением?
>>663325 Всё работает, только, поясни вот что: while (friend_sex != 'f' && friend_sex != 'm') Почему если поставить или || - программа не работает, а если И && - то работает? Ведь по сути должно быть наоборот. Т.е. до тех пор пока френд_секс != ф ИЛИ френд_секс != м, то... А тут как-то странно. Я не понял.
>>663451 Я как-то пытался поднять, но эти петушки слишком ленивые. однако, в слаке есть канал программача, и там раздел с++, тусуются три с половиной анона
>>663454 >>663464 Нет, я имел ввиду что ты имел ввиду под ленивыми петушками - обучающихся С++ с нуля? Просто, я сейчас изучаю С++ и прогресс идёт очень медленно и я бы себя ленивым петушком со стороны назвал бы. Что очень печально.
И прочитал все доки к boost,
Стандарт запомнил наизусть
И в метамагию проник, -
Глупец! Я знать не знал о том,
Что крестоблядка ждет потом.
Три дня на лаврах почивал,
Но не успел войти во вкус,
Как комитет по C++
Очередной стандарт принял,
И новых правил в нем до ста!
Я Бьерна новый том достал...
Зубрю, дрочу кресты - и вот
Тому пошел десятый год.
Считаю байты я всегда,
Гоняю их туда-сюда,
Лбом облысел, лицом зарос,
Два года мучает понос,
Хлебаю борщ и обнищал,
Но так всех тайн и не познал.
Входи, ньюфаг! Быть может, ты
Сумеешь обуздать кресты?
Здесь рады тем, в ком страха нет,
Кто не съебет в питонотред,
Почуяв местный мрачный дух.
Ты с нами, или ты петух.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий:
FAQ:
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
+ C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь).
+ C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи.
+ C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl
Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Проектирование:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать.
Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp
Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Ахтунг! Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4567.pdf
Тонкости языка (для гурманов):
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG
Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q: Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей.
A: Вот тебе блоги, факи, референсы и всякое такое:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru
Блог с хорошо расписанными фичами новых стандартов - http://scrutator.me
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/ или более подробно на ангельском http://en.cppreference.com/w
Блог Герба Саттера (на ангельском) - http://herbsutter.com
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru
Блог еще одной тянки, много о Qt и оптимизации (на ангельском) - https://katecpp.wordpress.com
Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс:
Видеокурс на тытрубе - https://www.youtube.com/watch?v=atVgLRzl3rI
Еще один - https://youtube.com/watch?v=MOpF5lk3cLY
Среди прочих есть несколько курсов по C++ - https://stepic.org
И еще есть вот такое, если проникся:
Видео с CppCon (на ангельском) - https://youtube.com/user/CppCon/videos
Q: Я готов начать погроммировать! Куда мне писать код?
A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
http://www.boost.org - скачать бесплатно без смс.
http://www.solarix.ru/for_developers/cpp/boost/boost-library-list.shtml - краткие аннотации к большинству компонентов.
http://sindicollo.blogspot.ru/2008/09/boost.html - документация к некоторым компонентам.
http://www.boost.org/doc - документация (на ангельском).
Литература:
Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
http://www.qt.io/ru - скачать бесплатно без смс.
http://doc.crossplatform.ru - документация к 4.8.
http://doc.qt.io - более полная документация к обеим версиям (на ангельском).
Литература:
Макс Шлее - Qt 5.3. Профессиональное программирование на C++ (2015) - https://goo.gl/aZ66gK
Макс Шлее - Qt 4.8. Профессиональное программирование на C++ (2012) - https://goo.gl/Slb1In (книга) + https://goo.gl/toUDWc (исходники примеров)
Марк Саммерфилд - Qt. Профессиональное программирование (только Qt 4.х) (2011) - https://goo.gl/qpkZFm (книга) + https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки:
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se
SFML - работа с графикой и аудио - http://www.sfml-dev.org
FLTK - графические интерфейсы - http://fltk.org
И еще куча библиотек на любой вкус - http://en.cppreference.com/w/cpp/links/libs
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке http://cppquiz.org/ , пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.