Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать? Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли? A:
Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Вопросы по синтаксису идут на хуй
Лабы идут на хуй
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй
Все идут на хуй
Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешниесервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++? A:
Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.
Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A:
Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A:
Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполневозможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A:
Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Этифичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать? A:
Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Автор(ы)
Название
Год
Ссылка
Ален Голуб
Веревка достаточной длины, чтобы выстрелить себе в ногу
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Q: Я готов начать погроммировать! Куда мне писать код? A:
На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа
Название
Описание
Ссылка
Windows
Microsoft™ Visual Studio®
Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда
Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM
http://codelite.org/, "sudo aptitude install codelite codelite-plugins"
для установки под *nix
Все
CLion
IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использоватьтекстовыйредактор в связке с каким-нибудькомпилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A:
Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio
Гугловский фреймворк для автоматизации тестирования
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы? Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A:
Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году)
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>>688822 У листа нет рандом итератора, в нем нет смысла искать бинарным поиском. Точнее лист (с небольшими изменениями в структуре) для бинарного поиска называется красно-черное дерево.
>>688852 introsort'у не нужен индекс же. На quicksort-этапе он берет в качестве образца первый элемент списка и в любом случае проходит последовательно по всем элементам, сравнивая с ним. На heapsort-этапе вообще все хуярится в кучу в дополнительной памяти, поэтому несущественно, опять же.
>>688969 Когда я им заинтересовался у меня был сраный Вектор-06Ц со встроенным бейсиком, магнитофон Маяк и старый телевизор. Так что у тебя еще дохуя выбора было, лол.
>>688946 Я начинал программировать с варкрафта 3, там был скриптовый язык jass. По мере развития картостроительства, энтузиасты сделали настройку над джассом называемый cJass с си подобным синтаксисом.
>>688982 >Вы давно программируете, но решили перекатится Что это меняет? Прокрастинацию никто не отменял. Моя идея со скайпом как раз в том, что не важно какой у нас с вами уровень, мы можем заниматься совершенно разными вещами на плюсах, просто будем говорить друг другу что сделали за неделю и все. Так можно попробовать одержать победу над прокрастинацией. Лично мне, сказать: "Я нихуя не сделал, ничего не прочел, смотрел всю неделю аниму" будет не приятно.
Если вас интересует тематическое общение вместо скайпа можно юзать слак, там скоро звонки запилят. Если вас интересует борьба с прокрастинацией то вам сюда https://2ch.hk/se/res/8791.html
>>688981 Эккель это джавист ебаный, пытающийся накормить читателя жабой под видом "философии C++". Духу крестов его книги нихуя не соответствуют, да и сам он, прям скажем, не специализируется конкретно на крестах. Можно рекомендовать это читать только джаваблядкам, желающим ознакомиться с крестами для общего развития.
>>689000 Да ну, такие вещи с аноном никогда не взлетают. Осенью вон пилили борду-убийцу и дальше гуглодока с 3.5 анонами дело не зашло. А разгадка одна - все только пиздеть горазды и командовать, реальная долговременная работа в команде невозможна без начальства.
>>689074 Ну смотри, всегда все идет по одинаковому сценарию. Находятся энтузиасты вроде тебя я и сам такой, начинают что-то пилить. В начале активнейший обсуждач, все интересно и охуенно. Потом начинаются проблемы - Вася проебался, а исправлять другим; мнения анонов по какому-то вопросу принципиально различаются, а высшей инстанции нет; половина людей переключились на что-то другое и испарились из проекта... Ну ты понел. В таких условиях всего джва варианта: либо есть какой-то мощный стимул бабло в конце, анальные кары от начальства, который принудит большинство участников серьезно въебывать, либо кто-то один фактически вытягивает на себе весь проект, и коллективным его уже сложно назвать. Такие дела.
>>689083 Блять, но на западе же эта хуйня работает?
Давеча в дишный ирц-канал отписался с вопросом и охуел - сука сразу куча ответов нормальных и по существу, а тут или на каком-нибудь лоре бы хуями и говном в 3 слоя обложили...
>>689088 Ответить в irc или, скажем, ITT это минутное дело. Ты зашел в тред в подходящем настроении и помог ньюфагу, а иной раз хуями обложишь. А коллективная работа - совсем другой уровень, там энивей надо превозмогать. Превозмогать анон не любит, что у нас, что у них.
>>689095 Ну и что? Существует огромное количество профитов, которые мы игнорируем, потому что они вне зоны комфорта. Сычевик даже тян не может найти, хотя желание тян у большинства гораздо сильнее, чем желание получить фан от разработки.
>>689110 В бэ даже программу для этого писал, а какой-то анон мне указывал на ошибки. Сошлись на версии где её создавали с помощью new и вызова конструктора.
>>689115 И такой вариант в бэ писал. Там целая оценочная функция была где пользователь мог сам параметры задать. Её писали т.к. при поиске по обязательным требованиям цикл мог быть очень долгим и не завершиться вовремя. Ещё какую-то рекурсивную функцию писал которая стек рвала если такой тян нет.
>>688646 (OP) Какие проекты, вероятнее всего, среднестатистический некриворукий анон будет делать, если выучит C++ на уровне приличного новичка? Какие проекты чаще всего попадаются? Какие проекты интересные? Какие проекты в 2016 году делаются на Qt? На голом C++? Под какие платформы? Бывалые, опишите, интересно же. На моей прошлой работе был крохотный проект на плюсах с нормальным ООП, но он был скорее огромным таким биндингом для использования другого проекта.
>>689455 >зачем переписывать под qmake qmake - прошлый век. Юзай qbs, он не генерит промежуточный файл, а дергает инструменты напрямую. Реально быстрее собирает.
>>689459 Интересненько, отстал я от qt но не решает проблемы лишнекодописания >>689460 >Код блок пик? не юзал но пробну. >>689461 в этом и беда анон на оверлокался сжег писюк продал озу с него, купил олд битую железку появился таск на спасение моей жизни рендер написать с парой 3д анимаций на апараты 2003-5ых годов рождения браузер имой любимый эклипс сьедают 210процентов озу это не удобно капец >>689462 ну надо знать грань между жиром и легкостью на крестах даже в qt относительно легкие проги выходят. только мелкие смогли придать крестам веса
>>689595 Код плохо читаем: - Не понятна мотивация кода. Напиши, нахуя вообще нужен класс - Красиво оформи интерфейс класса, чтобы не приходилось его искать. - Используй smart pointers
>>689601 Он нужен для работы с файлами экселя. Выполняет подключение к файлу, и выборку+обработку некоторого диапазона.
Оформлю.
С умными указателями пока не имел дело, но при работе с классом не хило кушается память, примерно по 3Мб на 1 обработанный файл. Подскажите хотя бы что гуглить, чтобы отвобождать память корректно? Вроде деструктор сделал, вроде даже и вектора чищу clear'ом. Но все равно память жрется стабильно.
Навскидку не скажу, что там у тебя течет. Да и не интересно мне в говне копаться. Да, кстати, >вроде даже и вектора чищу clear'ом память не освобождает, читай внимательно доки к вектору.
>>689606 При вызове метода, к примеру, XlsHelper::MakeSqrtSum у тебя создается новый экземпляр XlsApp, а указатель на старый (если был) проебывается. Тоесть последовательные вызовы XlsHelper::MakeSqrtSum будут давать утечку. если после каждого вызова XlsHelper::MakeSqrtSum (или подобной функции) ты будешь удалять экземпляр XlsHelper от которого был вызван XlsHelper::MakeSqrtSum то память будет очищаться, деструктор ты действительно создал. Если ты не хочешь использовать умные указатели, то перед каждым вызом new ты должен проверять не находится ли по тому указателю уже готовый (старый) объект и если он есть (указатель не nullptr) то удалять его. Алсо, возможно я ошибаюсь (код не сильно внимательно просмотрел), но как мне кажется корень твоих проблем в идеологических ошибках. Какой объект из твоей предметной области представляют инстансы твой класса? Никакого. Твой код построен в стиле обычного структурного программирования, на которое ты какого-то хуя навернул ООП - но оно нихуя тебе не дает, твои переменные класса, так как в них нет никакого смысла, фактически работают как глобальные переменные вследствие чего ты и обсираешся. Тебе можно превратить твой класс в неймспейс, удалить глобальные переменные (подразумеваются все переменные-члены твоего класса), соответсвено подправить код - и все утечки волшебным образом исчезнут.
Пишу односвязный список, каждая ячейка - структура, в которой два поля: данные шаблонного типа и указатель на следующую ячейку. Также есть указатели на первый и последний элемент. Надо написать его перепаковку, чтобы из 1-2-3-4-5-6-7-8-9-0 мы получали 1-0-2-9-3-8-4-7-5-6. Для этого в цикле мне нужно обращаться к предпоследнему элементу. Пока придумал только перебирать все элементы в цикле, пока не найдём тот в котором указатель на следующую ячейку указывает на последний элемент, но это пиздец корявый костыль. Можно ли это делать по нормальному?
>>689665 Попробуй лучше написать что-то свое. Реализацию вектора или хэшмэп. Чтобы там rule of 5 и остальные плюшки были. Это тебе даст гораздо больше и за меньшее время.
>>689626 Вот ещё один момент, не дает мне покоя. В прошлый раз, да и во все другие разы, замечал что программки, вроде бы небольшие не хило едят память, но ничего, созданного через new в них нет. ведь я уже создавал проектик на подобие, где не было "ооп", а были только события на кнопках, а массивы из экселья грузились в стандартные компоненты среды, и после каждого просчета естественно все обнулялось. кроме памяти, лол Чому так? Видимо не только через new может выделяться динамическая память? Или я создавал всё в стеке и он может расти до бесконечности?
>>689702 Вместо создания второго списка создаешь его на стеке - рекурсивно посылаешь элементы в функцию, пока они не закончатся, плюс передаешь голову списка. На нижнем уровне у функции будут одновременно последний и первый элементы, который ты объединяешь в новый список и возвращаешь наверх.
>>689716 Ну, эмбаркадера всегда славилась анальностью своих продуктов. Вообще, это самый главный минус их "плюсов" – дэльфевый рантайм живёт по своим правилам.
>>689716 >же все должно быть четко В смысле без выделения памяти? Как ты себе это представляешь? У Qt, например, почти все классы сделаны как pimpl, то есть при создании класса он всегда в куче выделяет память, а в самом экземпляре хранится только указатель.
>>689724 Я имел ввиду, что если библиотечный компонент, то он должен правильно все делать, раз попал в библиотеку. но скорее всего тут все же моя вина. что-то где то не доглядел. и не дописал как надо. как с vector.clear(), который память не освобождает на самом деле. вот же ебатория
>>689732 Если у тебя 10 (и мб 12) студия - вымазывайся. На следующих релизах студии убивает нахуй всю систему лагами, хз что там такое. Алсо, visual assistor в 10 раз лучше.
Посоны, не могу совладать с паттерном "Мост". Вот мотивация прямо из книги: есть gui-приложение, которое работает на разных платформах. И клиентский код, который должен работать с gui частью, нужно изолировать от непосредственных платформо-специфических деталей.
И значитсо они берут и хуяк: делают pimpl, перенаправляя все все вызовы в WindowImpl. И у меня вопрос: что в этом хорошего, если WindowImpl превратился в god-object, который содержит реализацию всех наследников интерфейса Window? Я не понимаю, блядь!
Ведь здесь должно быть несколько параллельных иерархий(что-то вроде пикрил4), где каждый конкретный класс наследуется от соответствующего интерфейса. Да, я понимаю, что возникнет проблема с виртуальными функциями, но можно наследование реализаций замутить через шаблоны, будет не очень удобно, но работать будет.
Скажите мне, прав ли я, или в глаза ебусь и не понимаю смысла паттерна?
>>689807 Ну вообще паттерны это не серебряные пули же, у них есть и отрицательные стороны. Мост хорошо применять в случаях, когда, грубо говоря, есть возможность выразить всю функциональность класса через небольшое количество базисных функций. Ну там, скажем, функции отрисовки любых объектов через функцию отрисовки точки, которая обращается к графической библиотеке. Тогда ты выносишь реализацию этого базиса в параллельную иерархию и все заебись, вместо произведения количества библиотек на количество клиентских классов ты получаешь сумму, в этом весь профит. Емнип у банды про это разжевано. Ну вот, а в общем случае не факт, что тебе нужен мост. Бывает, что библиотеки имеют разные интерфейсы, а реализовывать все через их пересечение неоптимально по производительности. Тогда про мост нужно забыть и сделать как-то иначе.
Ребзя. В общем, мне послезавтра идти на работу, где я напиздел, что могу немного в С++. От меня многого не ждут, но тем не менее нужно вкатиться максимально быстро и чуть-чуть глубже чем "Hello World". Помогите ресурсом или советом как можно за сутки достичь того уровня, что я описал.
>>689878 В джава написал одну прогу ищущую "вилки" у футбольных букмекерах. тут объяснение, что такое вилка http://probukmeker.ru/25-vilka.html Но прога жрала 5 Гб оперативной памяти, так что о её качестве можно промолчать. Очень давно написал пару лаб по С++.
>>689891 Если останется время, читни чутка Рефакторинг Фаулера. Мне знакомый программист-сеньор как-то сказал, что он считает, что каждый программист должен прочитать эту книгу.
>>689891 Я так инглиш изучал. Читая всё нормально. Фильмы книги всё могу. Пишу и долго думаю как правильно. Я говорить предложениями больше 5 слов вообще не могу.
>>689920 Нет. Это не то. Говорю же нужно вниз и в верх но куче ходить.
>>689923 Спасибо. Слышал что она на куче сделана. Совсем забыл про эту штуку. Только я не умею её пользоваться и не знаю как вверх и вниз по нему ходить.
>>689927 > вверх и вниз по нему ходить Лигитимного способа нет. Инкапсуляция же. Если тебе нужно ходить то это массив и функции которые ты упоминал раньше. Только если тебе задали написать пирамидальную сортировку то скорее всего мечтают что ты те функции сам напишешь. А для дререва отрезков куча не подходит, идея там похожая но отличия большие. В куче находятся только элементы которые ты туда поместил, а в дереве отрезков помещенные элементы находятся только на самом нижме уровне - все что над ними специально высчитаные служебные элементы. Обычные алгоритмы работы с кучей там не помогут.
>>690117 Я изрядно там наговнокодил, но в принципе работает. Могу скинуть если хочешь. Правда там уровня лабы, я тогда только начинал с c++11 знакомиться, накуралесил со многими вещами Лучше свой код покажи, вдруг кто-то из антонов поможет найти ошибочку.
>>690120 да у меня не то, что ошибочка, просто не допирает как это сделать, яж тоже еще тот ньюфаг. сделал вот вектор из объектов класса нод, в котором содержатся координаты и f, а дальше как-то в башке не прет, скинь свой плес.
>>690169 current - экземпляр класса Ptr. std::min_element возвращает итератор на минимальный элемент в ma_openedList. Функия принимает функтор (лямбда выражение), который сравнивает 2 элемента в списке. Советую почитать литературу в шапке.
>>690097 >как переаести её в нормальное пространство без матрицы то? Без матрицы - никак. Поэтому и считают два вектора - tangent и bitangent. Вместе с нормалью они как раз и составляют матрицу 3х3.
>>690213 у тебя лист с доступными узлами это обычный массив? разве можно так? я вот вектор делаю, чтоб туда пушбекать узлы, чтоб не было ограничений никаких на расстояния. с вектором min_element не хочет работать. и последний вопрос, что такое [&]?
Очередной вопрос от неосилятора. Вот у нас есть множественное наследование (да, я понимаю, что это плохо). Наследуемый класс у нас будет иметь два vptr на две vtable. А если у на виртуальное наследование? К какой таблице виртуальных функций мы обращаемся?
>>690380 Множественное наследование это плохо, когда его используют для быстрого грязного объединения различных реализаций, в каком-нибудь адаптере, скажем. А наследование от нескольких ортогональных стратегий с целью base class optimization это вполне себе годная и уважаемая практика. Почитай того же Александреску, там на каждом шагу оно.
>>690380 При виртуальном наследовании - к таблице "самого производного" класса. Собственно говоря, из-за этого виртуальное наследование и критикуют, тому що результаты не совсем очевидно меняются при добавлении еще одного наследника.
Поставил устанавливаться visual studio. Вот в таком виде уже третий час установщик загружает "Дополнительный элемент". Так и должно быть или это зашквар? чувствую, что зашквар
>>690453 >Множественное наследование это плохо, когда его используют для быстрого грязного объединения различных реализаций, в каком-нибудь адаптере, скажем Щито? И чем же плохо использовать адаптеры?
Если кто силён в Жабе, расскажите что она умеет делать по-настоящему крутого, что в перспективе сможет полностью убить плюсы. Знаю, что одно из последних достижений - это сбор статистики вызова методов и их автоматический инлайнинг в рантайме. Нужно провести исследование и составить заявку в комитет, чтобы в плюсы добавили реальные фичи, а не уродских клонов буст::асио и буст::файлсистэм. Иначе в скором будущем, после смерти нашей крестопараши, придётся перекатиться в Жабу на значительно меньшую зарплату, т.к. конкуренция там велика.
>>690574 Жаба с крестами пересекаются только на десктопе. В девятке добавят модульность, значит можно будет делать компактные приложения для десктопа (сейчас жре занимает около 150 метров). В десятке сделают структуры, жаба будет жрать меньше памяти при умелом использовании. Но сильной конкуренции все равно не будет - через год массово появляется webasm, который изначально заточен под плюсы.
>>690580 Кроссплатформенность и у плюсов есть, причем скомпилировать плюсовый код под другую платформу часто проще, чем ебаться с нативными либами у жабы. Менеджмент памяти у джавы достаточно спорная вещь, чтобы считать его откровенным плюсом. Для десктопа джава откровенно сосет, и будет продолжать это делать в будущем.
>>690582 Я думаю, тут большинство ее прочло так или иначе. Я понимаю там не осилить стандарт или страуса из-за большого объема, но она-то тоненькая и написана понятно.
>>690560 Ну смотри, это фактически тот же вопрос превосходства композиции над наследованием реализации. Бывают адаптеры, которые наследуют adaptee приватно и target публично, с целью писать поменьше кода. Это не очень хороший вариант во многих случаях, из-за негибкости механизма наследования и вообще хотя иногда так сделать действительно лучше, например, когда тебе зачем-то понадобился двусторонний адаптер, лол. А адаптер, который агрегирует объект адаптируемого класса отлично применим гораздо более часто.
>>690597 Говорю абсолютно серьезно. Другое дело, что "теормин джуна" это не то же самое, что "ньюфажные книги для сдачи семестрового курса", даже джуну в крестах нужно сильно больше знаний, чем в универе дают. Не обязательно городить мозговыебанные конструкции из Александреску в продакшене, но знать их должен любой уважающий себя крестовик.
>>690582 >Если серьезно: есть ли здесь кто-нибудь, кто прочитал её? Я пролистал, ничего нового не открыл. В 98 году она может и была интересна, сейчас - не очень.
>>690602 Все хуйня. В процессе работы ты набираешься всяких деталей о построении архитектуры и промышленном программировании(читай: тестирование+распределение задач в команде+VCS). Прочитай GoF, какую-нибудь книжку о TDD и git/vcs + проработай месяц, чтобы освоиться с внутренней кухней и ты уже того же уровня, что и человек, который проработал год и осваивал все на своем опыте.
>>690606 Все средства и идиомы языка. Не так много, вообще-то. Часто даже достаточно знать о наличии их, но не использовать ни разу. Я, например, за 3 года ни разу не юзал виртуальное наследование или аллокаторы. Но я о них знаю и этого хватает.
>>690607 >ни разу не меньше Я имел в виду, что многие делают это из-за небольшой экономии на method () вместо base_.method () при вызовах адаптируемых методах. Еще иногда из-за того, что нагородили хуйни с защищенными членами и прямым доступом к ним тоже уменьшают количество кода.
>>690584 >>690576 Дэсктоп уже почти умер, что там есть кроме игор, в которых по сей день текстурки размытые? Скайп в любом телевизоре и мобилке есть. Фильмы смотрятся онлайн через браузер в том же телевизоре. Электронные книги с монитора на десктопе читать тяжело. С планшета удобней. В имеющихся на сегодняшний день планшетно-мобильных платформах рулят жаба/обжси/дотшарп. Думаю, те же 3Д экшоны можно делать на Жабе, существовал бы движок и тулзы. 99% памяти занимают текстуры, для которых можно сделать ручную выгрузку, с остальным сборщик мусора справится.
Вот поясните мне хардкору, в какой сфере плюсы реально уделают Жабу, как по эффективности, так и по трудозатратам.
Как бэ остутсвие сети и файловой системы в стандартной библиотеке 2016 года намекает на то, что кресты безнадёжно отстали. Тут ни лямбды, ни вариадики, ни мультитрединг без средств верификации не спасут.
>>690638 Только вчера думал об этой хуйне. Теперь думаю о том, что я тупо зря время проебал. Крестопараша мне очень нравится, но в >2016 крайне узкий сегмент ее использования, да и перескочить хуй куда получится годы крестоёбства и написания костыликов ничем не помогут в перекоте на другой язык, не надо тут
>>690638 > плюсы реально уделают Конечно нигде они не уделают. Если есть жаба то понятно что в плюсах смысла нет. Это заметно даже по тому что в плюсы добавляют интерфейсы для вызова джаба кода, а не наоборот.
>>690638 >те же 3Д экшоны можно делать на Жабе, существовал бы движок и тулзы. Вот именно, существовал бы. А на чем его напишут? Ну подумай головой, я тебе дам время.
>>690683 >Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам
>>690638 >в какой сфере плюсы реально уделают Жабу, как по эффективности, так и по трудозатратам Гейдев, эмбеддед вместе с Си, хайлоад. >намекает на то, что кресты безнадёжно отстали Намекает на то, что надо использовать boost, которая де-факто стандарт. Ну серьезно, мог бы найти что-нибудь посерьезнее, чтобы доебаться.
>>690655 >Если есть жаба то понятно что в плюсах смысла нет Ну вот пишут JetBrains свои IDE на жабе. Пишут отлично, стараются, оптимизируют. Но вот открываешь в CLion какой-нибудь llvm, и все, пизда, зависло нахуй. Сидишь такой на машине с ssd, а оно зависло. Ну йобана, говоришь ты и смотришь в сторону QtCreator, который хоть и кастрированный и крэшится, но не виснет на анализе.
>>690684 Ну сначала сделают враппер для ДиректаИкса, хуле и там и там интерфейсы. Тогда станет возможно заменить плосовой код конкретной игоры на Жабу.
Потом для каждого ЗДмакса, редактора карт и прочих тулзов сделают прокси плугин, который сможет использовать Жаба плугины.
Закон капитализма гласит, что фирма, которая не расширяется - погибает. Поэтому тот же Орокол в погоне за баблом и необходимости расширения вложит кучу бабла в появляющуюся нишу и сделает всё возможное чтобы выбить плюсы с рынка 3Д экшонов.
>>690705 >Поэтому тот же Орокол в погоне за баблом и необходимости расширения вложит кучу бабла в появляющуюся нишу и сделает всё возможное чтобы выбить плюсы с рынка 3Д экшонов.
С учетом того, что Google и Apple взялись за написание нормального компилятора C++, да еще и у Microsoft подгорело и они начали гнаться за clang, а также того, что комитет по стандартизации планирует релизить TS чуть ли не каждый год, то еще посмотри кто кого.
>>690724 >А перекатываться с плюсов некуда. На web, например. Но не всем нравится макакинг, если говорить о frontend. А если говорить о backend, то подозреваю с появлением REST-фреймверков на C++, остальные языки будут тихо насасывать по производительности.
>>690696 >>690696 В гейдеве уже и так 90% кода это скрипты и триггеры в картах. От плюсов почти ничего не осталось.
Эмбеддет уже почти десять лет нормально переваривает жабу. Успел поработать, знаю что менеджеры частенько норовили слямзить Одроид и впихнуть на весьма специфичные устройства.
Си - это прыщи и только прыщи, вместе с торвалсом. Писать драйвера уже давно не нужно, т.к. сетевухи/звуковухи это риалтек и только риалтек. Любое юсб устройство может работать через либу, нетрудно сделать враппер на Жабе.
Хайлоад - скорее хуйлоад, посмотрел запись конфы https://www.youtube.com/watch?v=eTk9Zu6rLTY. Атомики с мемори барьерами дали, средств проверки не дали. Чтобы найти ошибку в очереди, которая из трёх операций CAS состоит, опытный дадька неделю потратил. Некий студент, пишущий диссертацию якобы написал реализацию конкурентного RB дерева - это блеать 15 страниц псевдокода, и денег он с этого наверняка не поимеет. Кто за этот хуйлоад платить будет, легче Жабу и сотку гигов оперативки использовать.
За незнание буста и нелюбовь к нему надо расстреливать без суда из следствия. Кто будет платить за асинковую лапшу с вонючими портянками которые де-факто boos::asio::sockets::ip::tcp::address::v4? make_context скажешь? не пробовал, но чуется что дебаггер твою сопрограмму даже не увидит. Нахуй такой стандарт если для обхода папок нужно ездить на велосипедах типа бууст::фаелсистем::рекурсив_директори_итератор_т, особо забавляет это ваше _t в конце, ещё хвостик ему в конце пририсуйте. Это воистину засвидетельствует ваши знания в бусте. Чесслово, рассчитано на идиотов которые не знают что перед именем переменной имя типа идёт.
И вообще, сколько вы будете зарабатывать, если зазубрите весь буст целиком? Все его нюансы и тонкости. Сколько лет у вас на это уйдёт? В Жабе нет такого геморроя.
>>690696 Да в любой. Джава - очень хуевый язык, который предлагает по сравнению с крестами одно: nullpointerexception вместо сегфолта. И все. REPL не завезли, система типов хуевая, библиотеки так себе. Если бы там про питон спросил, или про жс, то там есть четкие ниши, в которых они лучше крестов - быстрое прототипирование и т. п., а в жабе нет нихуя, кроме фобий менеджеров по поводу того, что индусы не сумеют написать на крестах код. И это правда. Но вот от таких проектов и надо держаться подальше. Нравится тебе лепить круд для банка в галере - ну удачи, хули.
>>690712 Рефакторинг днищенский, поиск по коду (find usages, например, не позволяет удалять результаты), call hierarchy нет как такового, интеграция с git хуевая(окошко с log тупо показывает текстовый вывод консольного git'а). Это только то, что сразу в голову пришло.
Во время дебага бывает крэшится. Особенно если дебагер - lldb.
>>690696 >хайлоад Часто ищу на hh.ru такую работу. Любо там надо 6 лет опыта, либо там не нужен С++, а только желателен т.к. совсем другая сфера. Нормальных вроде только пару штук за несколько месяцев находил. Но так чтобы ещё и зарплата была указанна ни разу. Так где же будет работать только вкатившейся джун?
>>690753 >Писать драйвера уже давно не нужно, т.к. сетевухи/звуковухи это риалтек и только риалтек.
Охуительные истории ITT. Месье не смущает тот факт, что в половина кода для linux 4.5 - это драйверы. А это, на минуточку 500к строк кода, блядь!
>В гейдеве уже и так 90% кода это скрипты и триггеры в картах. От плюсов почти ничего не осталось. А кто же эти скрипты обрабатывает? Не C++ ли код?
>Эмбеддет уже почти десять лет нормально переваривает жабу. И толку, что java-код запускается на embedded? Я уверен, что GTA 5 тоже можно запустить на Raspberri PI, если постараться. Но толку от этого?
>Кто за этот хуйлоад платить будет, легче Жабу и сотку гигов оперативки использоват Слишком толсто. Даже комментировать не буду.
>boos::asio::sockets::ip::tcp::address::v4 Ну не позорься, осиль уже namespace aliases.
>>690800 >Охуительные истории ITT. Месье не смущает тот факт, что в половина кода для linux 4.5 - это драйверы. А это, на минуточку 500к строк кода, блядь! Я кстати так и не нашёл драйвер для моей стевой карты для дэбиана. Пришлось минт ставить.
>>690387 прочитаю я их, и что? все не запомню явно. я вот инторнеткурс усваиваю помалёху, пилю свой рогулайк, решаю проблемы по мере их поступления и так учусь. алгоритм вот что пишет.
algorithm(1734): error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "node" (или приемлемое преобразование отсутствует)
>>690808 Ты какой-то тупой дегенерат. Твой уровень - Лафоре. Ты же блядь пытаешься с наскоку осилить йобу, не надо так. Пиздуй азы читать про указатели, перегрузку, функторы, полиморфизм, вот это вот всё.
>>690800 >минуточку 500к строк Подумать только, пятьсот тысяч строк кода. Только вот четыреста тысяч из них - это для железок, которые сняты с производства ещё в прошлом тысячелетии. И что там с дровишками для видюх, игр для прыщей нет и не будет.
>Не C++ ли код? Ты сможешь заработать себе на квартиру и на красную икру патчами для этого С++ кода или патчами для фаерфокса? Нет, ты будешь жрать сосиски с глутаматом.
>Слишком толсто Окее, тот же мап на слим локах будет не сильно отставать от недоатомик мапа на касах если таковой вообще сделают труъ лок-фри cо вставкой/удалением/траверсингом... И то, блять, это миф про лок-фри, если мы не засыпаем, то долбимся в цикле, вызывая кас на каждой итерации и увеличивая выбросы СО2 на электростанциях.
>namespace aliases оукеее, первый экран при открытии файла будут занимать не только хэдеры, но и неемспеес олиосы, у твоей жены длинный указательный палец, если нет, то твои детишки вырастут неконкуретноспособными, скроллить ведь придётся больше чем кодить.
>>690802 Мне пока это не нужно, в 15 лет не особо интересуюсь алгоритмами. Хотя нужно было бы, учусь дизассемблировать. Читаю сейчас Криса, вот как-то так. Посоветуй какую книгу по алгоритмам, буду читать параллельно.
>>690638 >Дэсктоп уже почти умер, что там есть кроме игор, в которых по сей день текстурки размытые? Например, тулзы чтобы делать игры. Любые другие программы для работы с картинками/видео/звуком. Жабка текстовые редакторы с трудом тянет, о графике и говорить нечего. >Думаю, те же 3Д экшоны можно делать на Жабе Можно, конечно, только будет оче тормозить. Майнкрафт, например, на кресты обратно переписывают. У них ебли с памятью в джаве получилось гораздо больше, чем при ручном управлении (такое, кстати, почти во всех нагруженных программах на джаве).
>>690638 >Дэсктоп уже почти умер, что там есть кроме игор, в которых по сей день текстурки размытые? Сразу видно нешкольника. CAD, софт для творчества (видеоредакторы, аудиоредакторы, maya), различные IDE и т. п. Хотя откуда тебе это знать, если для тебя мир - это игры и потребление контента. А движок на "жабе" есть, Unity называется, только он на C# (потому что жаба говно даже в своей жабонише), и у Unreal Engine он посасывает.
Есть ли тут ананчики, которые пишут/писали драйвера под винду? Подскажите годного мануала как писать драйвера для совсем зелёного воробушкаиз знаний только базовые знания плюсов. Всё, что находил нихуя не понятно или делается не в VS. Писать буду в VS2015, запускать и дебажить на виртуалке
>>690638 Тридээкшоны ты вряд ли сделаешь на жабе. Потому что на каждый чих в жабе выделяется память, а в экшонах нужна вся скорость, которая есть, иначе у тебя начинается задержка обработки ввода (input lag) и лаги, когда вдруг сборщик мусора соизволил вмещаться. Я не говорю, что плюсы невозможно переплюнуть, но управление памятью в джаве это пиздец для разработки экшонов
>>690866 >Unity называется, только он на C# Он тоже написан на C++, лол. На C# там только интерфейс для сторонних разработчиков. Можно заплатить и получить исходники на C++ и ебашить как надо.
>>690985 Затем, что будет нативная производительность и маленький размер кода. С сишечкой на вебасм это возможно, а для той же скалы надо будет десяток метров стандартной либы тащить.
Котоны, вопрос. Задал в нуботреде, продублирую тут. Как проинициализировать QSqlDatabase? Нужен статический экземпляр, но вот хер знает как заставить его таким стать. Всякие QSqlDatabase db = NULL не катят, тип не тот.
>>691190 Скрин, вот такая хуйня. На stackoverflow первый же пример с другой переменной - говорят, мол, инициализировать ннада.
>>691188 я там пролазил поверхностно, но ничего про инициализацию _без_ задания сразу адреса БД не нашел. Сейчас на второй круг повдумчивей попробую тогда, раз ты настаиваешь
>>691193 >>691188 Запамятовал, сорян. В доках еще указано что можно взять дефолтное подключение, типа QSqlDatabase database = QSqlDatabase::database();
Но со static это дает: a function call cannot appear in a constant-expression.
>>691199 До этого у меня была эта же переменная без static. Заводилась через init_db(QString addr) (addr - там из диалога открытия файла адрес передавался).
Сейчас я понял, что обосрался, т.к. мне к БД надо обращаться больше, чем в одном окне, а плодить подключения, я так понял, нецелесобразно и начал искать пути решения. Пока свелся к тому, чтобы бд внутри контроллера держать статическим, а контроллеры таки плодить. Не знаю, насколько это лучше, но, надеюсь сработает. Если я конечно разгребусь с этим всем.
>>691203 Хотя вот прямо сейчас смотрю ветку на форуме где рассказывают какой ТС мудак о том, что глобальные подключения вредны и лучше делать маленькие, но сразу их выпиливать потом.
>>691195 Ну вот чего ты лезешь в qt, когда C++ не знаешь? static переменные нужно инициализировать вне определения класса. А ты этого не сделал. Во-вторых, нахрена тебе нужен static? Передавай объект базы данных в конструктор и храни внутри класса сылку на БД. В-третьих, хуле ты используешь библиотеку и не читаешь доки блчдь??? ПЕРЕД ИСПОЛЬЗОВАНИЕМ ПОЛНОСТЬЮ ПРОЧТИ ДОКИ К КЛАССУ
>>691202 В отличии от GC-петухов у нас есть выбор. GC-поведение легко достигается с помощью shared_ptr. Не хочешь ебаться с памятью - везде ебашь shared. Не нравится полученная производительность - оптимизируй, хуле. Только мы можем стандартными средствами оптимизировать, а шлюхи вроде тебя будут бесконечно настраивать GC и писать костыльный unsafe-код.
>>691209 Всмысле "свое"? Я просто не знаю, как корректней сделать - подключить базу один раз и использовать это или же делать несколько подключений. Выше (>>691206) мне вкратце пояснили мои ошибки, буду разбираться на свежую голову.
>>690574 Java - это крутая HotSpot JVM, фичи шестилетней давности вместо языка, и целый ворох радостей, если у тебя jvm другого вендора.
А как сходишь к жава разработчикам на этаж, а у них до сих пор древний oc4j 10g, который боятся торгать, и шестая джава – то есть уже не такая крутая жвм и говно 12летней давности вместо языка.
>>691210 Ну просто ЛОЛЛИРОВАЛ с тебя, маня. Стандартными средствами - это ебля с памятью? А хуле не сразу через MOV AX, CX, уж это-то стандартнее некуда.
Весеннее обострение что ли, какого хуя за день уже третий пидор с манями лезет в С++-тред развести холивар? Делать больше нехуй? Кресты существуют, чтобы у тебя, неосилятора, был батхерт, и ты заливал им крестотред. На этом съеби.
>>691254 Не приходит в голову эффективного решения. А удобного решения не приходить в голову без рефлексии. Так что если таки надо, то надо делать самому под свою задачу.
InfoWorld: Can you answer the same question about modules and co-routines, which also won't make it in?
Stroustrup: I would have liked to get modules for better protection against changes in some components context (such as protection against macros) and better compiler speed, but that proposal isn't ready for C++17, so it goes into a TS. I think that eventually, modules will become massively important. They address long-standing problems in C and C++. An early version currently ships as part of Microsoft's C++. A different variant, more friendly to macros, is available in some versions of Clang. I am disappointed that stackless co-routines are being put into a TS rather than directly into the standard itself. I think they are ready and important for a few critical use cases (pipelines and generators). An early version currently ships as part of Microsoft C++.
>>691210 Справедливости ради замечу, что функциональность shared_ptr не идентична GC. В случае умных указателей возможна ситуация, когда утекает кусок памяти со взаимными указаниями друг на друга, с которой GC борется путем "универсального суперкласса" или еще как-то.
>>691342 Ну поэтому кроме shared ещё есть weak_ptr и unique_ptr. Для циклических ссылок и в жяве точно так же используется WeakReference.
Сборщик выигрывает у смартпоинтеров когда есть много объектов с небольшим временем жизни – из-за фрагментации памяти плюсы в таком крде могут хоть у питона соснуть. Но ясен хуй, что на смартпоинтерах такие куски писать никто не будет.
>>691240 Бля. Этот ёбыч судя по "бинчмаркам и сравнинийам с си сиплюсплюс" даже не в курсе, что это не аллокация в жяве супербыстрая, это аллоцированная память не освобождается.
>>691285 И правильно. Совместное владение, по-хорошему, лучше использовать как можно меньше. Комбинация unique ptr и обычных указателей - тот контекст, в утром unique_ptr объявлен владеет указателем, а тот контекст, который его использует из вне, получает прямой указатель если нужно. Это при условии, что владелец живёт дольше, чем все пользователи.
>>691368 >Для циклических ссылок и в жяве точно так же используется WeakReference Очень редко, потому что GC и так умеет работать с циклическими ссылками.
>>691542 По поводу устаревания синтакиса: верно ли, что нюфане надо знать и старый и новый синтаксис, так как вдруг на работе придется поддерживать проект, который был написан до С++11?
>>691589 Новый не исключает старого, а только дополняет. И там не такие ниебические изменения, которые нельзя за недельку от корки до корки вызуприть и поиспользовать.
>>691634 Мы ж не ебанутые. Новые фичи начинают использоваться, как только все используемые компиляторы начинают их поддерживать. Тут обычно в VS проблема. То дорого обновлять лицензии, то самая новая студия не стабильна, то самая новая студия еще не умеет во все фичи.
Активно изменяемые модули часто переписываются для использования новых фич. С лямбдами так было.
Единственное, что не используется на кроссплатформе, это стандартная библиотека. С этим до сих пор проблемы. В итоге используется boost.
А вообще ломающих фич не так много, переписывать обычно ничего не надо.
>>691649 Ты упомянул студию, значит вы ее используете на работе в какой-то мере. Ради чего вы ее используете? Неужели только из-за продвинутого автодополнения и крутого отладчика как написано в шапке?
>>691686 Емнип у студии самый быстрый рантайм из всех компиляторов под венду. Ну и стабильнее она. Вот я осенью внезапно наткнулся на баг в clang, который проявлялся при использовании unordered_map вместе с многопоточностью. Вроде не страшно, в следующей версии его пофиксили, но для продакшена ждать месяц никак нельзя из-за подобной хуйни.
>>691689 Стандартным образом - никак. Можно использовать прямое обращение к функциям консоли, но это будет не кроссплатформенно. Еще можешь поискать какую-нибудь библиотеку для продвинутого ввода-вывода.
>>691778 Потому что пекарни 32-битные, 32/8=4. Процессор работает сразу с двойными словами в 4 байта, из-за этого могут быть тормоза без выравнивания. Например, чтобы считать байт из выровненной позиции, ты читаешь 4 байта в EAX и дальше забираешь байт из AL. А без выравнивания ты не можешь считать ровно с этой позиции 4 байта, тебе придется считывать с предыдущей выровненной, байт окажется не в AL, а в одном из старших байтов EAX, тебе придется делать сдвиги, ну ты понел. Но если тебе скорость не так важна, а память дорога (на микроконтроллерах, например), то можно выключить выравнивание.
>>691778 У любого процессора задан размер машинного слова. У 32-битных - 32 бита, у 64 битных - 64 и т.д. Регистры ЦПУ имеют именно такой размер (если не считать сопроцессора). Все операции производятся над данными разбитыми под размер машинного слова. Обращение к памяти тоже происходит по словам. Соответственно, если данные не выровнены по границам машинного слова, то операция чтения или потребует больше времени, или вообще не будет произведена (как у АРМов).
Кроме этого есть еще кэш, чтение в который происходит блоками по 64 байта, и страницы виртуальной памяти (обычно 4к), которые дают нехилый оверхед, если данные лежат на их границе.
>>691784 Выравнивается. По 1 байту. Однобайтные данные выравниваются по 1 байту, двухбайтные по двум, четырех по четырем. Те что больше машинного слова - по машинному слову.
А ещё вопрос. У нас есть абстрактный класс. По сути для него vtable не нужна (объект создать не можем). Так вот, будет ли выделятся память для vtable абстрактного класса или компилятор что-то делает для этого?
>>691649 Есть одна очень большая компания, которая упорно использует vs6. И мы вынуждены поддерживать код в sdk для этой версии. Хотя сами сидим на свежих clang и gcc5
>>691812 >Вот я осенью внезапно наткнулся на баг в clang, который проявлялся при использовании unordered_map вместе с многопоточностью. Вроде не страшно, в следующей версии его пофиксили, но для продакшена ждать месяц никак нельзя из-за подобной хуйни.
Что думаешь насчет этого? Из-за этого вы и делаете сборки разными компиляторами?
>>691795 1) Виртуальные деструкторы - зло. Ни в коем случае не используй их. 2) К черту методы. Переопределяй операторы. Зачем придумывать названия методам, когда умные люди дали тебе операторы. 3) Умные указатели для идиотов, которые незнают как писать nwe и delte. (Их тоже перегружай, а то вдруг стандартная реализвация изменится, и программа полетит) 4) rvalue? lvalue? Ничего старых добрых сишных указателей не придумали. Передача по указателю - наше все. Продолжай, анон
>>691796 Создание объекта не причем. Абстрактный класс может реализовать виртуальный метод с телом. Тогда все равно нужно как-то вызвать его. А это значит что для абстрактного класса должен быть vtable.
>>691827 Мне кажется ты не понял сути vtable. Он не для создания экзепляров класса нужен, а для поиска нужной реализации виртуального метода в рантайме.
>>691825 Используй goto вместо while. Его оставили для лучшей оптимизации и компилируется он всего в одну ассемблерную команду jmp поэтому он очень быстрый.
>>691838 Еще раз - причем тут создание объектов? Позднее связывание реализуется при помощи vtable. Допустим есть float Shape::area() = 0 И Square наследует Shape и переопределяет Shape::area(). И есть например метод заливки площади определнным цветом - void fill(Shape* ptr) В методе fill и будет использоваться vtable для определения реализации Shape::area() конкретного класса, в данном случае будет использоваться Square::area()
>>691649 > Единственное, что не используется на кроссплатформе, это стандартная библиотека. С этим до сих пор проблемы. В итоге используется boost.
Не понял. Ты про то, что стандартная библиотека бедна (ни filesystem, ни networking, etc) или про то, что stl, алгоритмы и прочее по-разному реализовано и ломает код на разных платформах? Поясни крч пжл
>>691841 НАПИСАЛ ВСЮ ПРОГРАММУ ОДНОЙ ФУНКЦИЕЙ ИЗ 100К СТРОК С GOTO ВМЕСТО ПОДПРОГРАММ @ КОД НЕ УМЕСТИЛСЯ В ОДИН СЕГМЕНТ @ GOTO ТРАНСЛИРУЕТСЯ В LONGJMP ИЗ ТРЕХ КОМАНД
>>691855 Мне кстати очень не хватало раньше бинпоиска. Такого что ищет элемент и возвращает итератор указывающий на него, а если такого элемента нет, то итератор на элемент перед которым должен стоять искомый.
>>691795 >Накидайте список вредных советов. Лямбды для мудаков, юзай шаблонные функторы и мультинаследование по максимуму. А также пиши код с упором возможности запуска на бабушкином телевизоре и папином ноутбуке простой переборкой. >А ещё лучше статью где придумывают правдоподобные причины почему эти советы полезные. В оппосте: Современное проектирование на C++. Таки да, юзай, но C++ тебе не D, и такой код на код-ревью не поймут, так что знай меру.
>>691906 > Win32-консоль вообще не поддерживает управляющие последовательности ANSI. Программное обеспечение может управлять консолью посредством ioctl[en]-подобных системных вызовов консольных API, чередующимся с текстовым выводом. Мда. Чому у винды все не как у людей?
>>691925 Была проблема с бустовым ренжем, когда пустой ренж схлопывался в нечего на одной версии гцц, а на другой был пустой объект. Из-за ошибки в коде очень весело падало. В сланге была проблема с очень закрученным шаблоном полное имя инстанцированного шаблона около 4Ксимволов, 7 гигов оперативки компилятору нужно чтобы раскурииь, пофиксили у себя, потом и сланг сам пофиксился.
>>691941 >полное имя инстанцированного шаблона около 4Ксимволов Это тоже что и имя переменой или функции? Тогда почему не сделать поменьше? Хотя компилятор и с функциями имена которых 10к символов нормально работает.
>>691948 Каждый раз когда ты компилируешь что-то вроде Хуй<Пизда<Джигурда>> компилятору приходится для каждого инстанцированного шаблона создавать новое внутреннее имя. Если злоупотреблять метапрограммированием на темплейтах, эти имена могут быть ОЧЕНЬ длинными.
>>692044 Потому что время жизни возвращаемого объекта только на первый взгляд нулевое. Например, в деструкторе возвращаемого значения может быть перебор галактики, поэтому оптимизация здесь это нарушение семантики кода.
>>691825 1. Называй перменные и функции транслитом mamku_ebal, perdoli. 2. Используй c-type cast operator на классах, но не чаще, чем reinterpret_cast. 3. Помни! Препроцессор лучше шаблнов. 4. Оставляй две пустые строчки между строками кода, но после каждой четырнадцатой оставляй четырнадцать пустых, а после восемьдесят восьмой - восемдесят восем пустых.
>>691846 Я хотел сказать, что новые библиотечные фичи не используем. Потому что до сих пор сидим на stlport. Честно скажу, лично я не знаю какие проблемы возникали при использовании разных стандартных библиотек на разных платформах. Но ходят легенды, что раньше возникали, поэтому сидим и ждем новую кроссплатформенную либу. Вроде как libstdc++ к этому стремится, но пока еще не оче.
>>692091 Фишка в том, что <const Class&> и даже с виду безобидный <const char*> таит в себе неиссякаемый источник приключений. Попробуй как-нибудь на своем шаблонном коде, который ты считаешь bullet proof
>>692105 Попробуй написать коллекцию, которая будет корректно работать с ссылками и константными типами в темплейте такое под силу только суперчеловекам из комитета, никогда не пытайся использовать такие типы в сторонних библиотеках.
>>692113 С ними все в порядке, пока ты не пытаешься их использовать в параметрах темплейтов. Можно, например, сделать vector<const Myclass&>. И он может быть будет работать. Но заранее не скажешь.
>>692118 Почитай требования к типу вектора. Там все четко описано. Если твой константный тип выполняет их, все работает. Короче, иди читай cppreference до просветления. пока серьёзные дядьки творят мета магию на шаблонах
>>692074 > кроссплатформенную это под разные компиляторы?
Сам недавно вынужден был на msvc2015 портировать код, потомучто внезапно в mingw словил дикий баг обработки исключений под шиндошс сервер 2012. Проект на C++11.
>>692123 не, легаси нет. Компиляторы и boost регулярно обновляем. Просто так исторически сложилось с stlport. Пару раз поднимали вопрос, в ответ - какие-то проблемы, если использовать разные либы. Ну и похуй в общем-то. Только строки по факту юзаем
>>692128 >ты с выводом типа не дружишь Чтобы дружить с выводом типа, надо для каждого темплейтного класса писать потроха на 2к строк как в STL. А с C++11 уже на 20к.
>>692124 Достаточно писал. Еще раз - к элементу вектора предъявляются строгие требования. must meet the requirements of CopyAssignable and CopyConstructible.. Если твой const T& может в копирование и присваивание - все будет работать. Вся stl написана по строгим правилам. Все контейнеры, итераторы и алгоритмы определяют требования к типам.
>>692135 Ты же понимаешь, что эти требования применяются ко всем включенным типам. Если ты где-то слажал, и не сделал rule of 5, все рассыпается, и приходится исследовать все <<<<<<<<<<<
>>692144 Кроме rule of 5 надо еще прописать все ::intricate_mostly_unknown_trait и прочую хуйню, и телепатически угадать, что от тебя хотел автор либы в данном конкретном случае. >>692160 >умение читать вывод компилятора об ошибках в шаблонах приходит с опытом Опыт говорит: не использовать сторонние либы, не использовать STL и boost, держаться ближе к няшной.
>>692173 Короче, окончательная инфа: вектор начинается на строке 7900 и заканчивается на 8839. (это без специализации под bool). Итого, контейнер в C++14, в противоречие стонам истерички про 20к строк, можно написать менее чем в 1000 строк. А если учесть, что там дофига пикрелейтед, то реальных строк там 500 и менее.
>>692182 >не в 20к строк, а в 500 500 строк - это наивная реализация (у меня свой вектор - 400, из которых 250 - обертка над сишной либой). В GCC - около 3000.
>>692191 >692182 >20к и даже 100к у тебя будет, если ты для каждого типа будешь выписывать всю бюрократию. Ты ошибаешься. Нет там никакой бюрократии относительно const/не const. Короче, ты не шаришь, как выводится тип. Там ничего сложного нет. Тебе нужно прочитать из нового маерса всего 2 главы: собственно "вывод типа" и move-семантика
>>692199 комментагии не особо стоит считать. В clang libc++ там вообще rилейтед куски стандагта копипастятся в комментагии пегед геализацией каждого контейнера.
Блять! Захожу на сайт из шапки http://www.qt.io/ru/, чтобы скачать Qt Creator, с которым работал год назад и обнаруживаю, что он сука платный. Я не ошибся или моя голова с похмелья не дает мне видеть истину сквозь "Free trial only 30 days"?
>>692260 В двоичном файле записана сплошняком информация, мне нужно удалить отдельные элементы из файла, отвечающие условиям которые вас ебать не должны. Яснее?
>В частности, люди, утверждающие, что их интересуют только компьютеры и программирование, обычно просто не в состоянии общаться с коллегами-не программистами. Такие люди не только лишены роскоши человеческого общения (собственно, самой жизни), но и, как правило, разрабатывают плохое программное обеспечение.
>>691795 >Накидайте список вредных советов. Лямбды для мудаков, юзай шаблонные функторы и мультинаследование по максимуму. А также пиши код с упором возможности запуска на бабушкином телевизоре и папином ноутбуке простой переборкой. >А ещё лучше статью где придумывают правдоподобные причины почему эти советы полезные. В оппосте: Современное проектирование на C++. Таки да, юзай, но C++ тебе не D, и такой код на код-ревью не поймут, так что знай меру.
Вопрос по Qt. Как можно уменьшить вес ехе'шника? Есть какие-нибудь хаки? Сразу говорю динамическая линковка идет нахуй. Что угодно, что сделало бы вес проги меньше чем если юзать статик линковку+кучу флагов+upx. Спасибо.
Тот, кто в познаньи от невежд отвык,
Окрест уж не отыщет места гаже.
"Сап, двачик, посоветуй годных книг";
"Тред не читал, какую выбрать либу?";
"Завел гитхаб. Здесь будет мой дневник"... -
Галдят сыны овец, хотя могли бы
Поднять на шапку праздные глаза.
О боги! Предложи мне кто-то выбор:
Толпе арапов подставлять туза
Иль видеть этих грязных мракобесов -
Я встал бы раком, видят небеса!
Любой осел средь крестухов - профессор,
Но скудна эта скверна на ослов -
Здесь каждый безбородый байтослесарь
Считает, что senior'ом быть готов.
Старший брат:
Предыдущий:
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-треды