Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать? Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли? A:
Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Вопросы по синтаксису идут на хуй
Лабы идут на хуй
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй
Все идут на хуй
Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешниесервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++? A:
Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искусственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.
Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A:
Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A:
Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполневозможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A:
Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Этифичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать? A:
Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы)
Название
Год
Ссылка
Бьерн Страуструп
Программирование. Принципы и практика использования C++
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Автор(ы)
Название
Год
Ссылка
Ален Голуб
Веревка достаточной длины, чтобы выстрелить себе в ногу
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Q: Я готов начать погроммировать! Куда мне писать код? A:
На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа
Название
Описание
Ссылка
Windows
Microsoft™ Visual Studio®
Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда
Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM
http://codelite.org/, "sudo aptitude install codelite codelite-plugins"
для установки под *nix
Все
CLion
IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использоватьтекстовыйредактор в связке с каким-нибудькомпилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A:
Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio
Гугловский фреймворк для автоматизации тестирования
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы? Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A:
Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году)
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Есть убунта и я хочу вкатиться в с++. На чем писать код и чем помпилировать? Слышал про gcc и g++: они нормальные? Скачал вторую из шапки книгу: Стэнли Липпман, Жози Лажойе и Барбара... - она подойдет для новичка, если я собираюсь программировать на линуксе. Могу я из-под прыщей кодить программы для виндоуса?
Точно, первый опыт хелоувордов был на в10 с вс, поэтому я не понимаю, как писать в блокноте, чтобы потом в отдельном компиляторе скомпилировать программу.
>>866503 (OP) Плюсы - говно. Куча ненужной хуиты типа шаблонов и множественного наследования, нет делегатов, объектники от разных компиляторов бинарно несовместимы, уродский раздутый стандарт на тысячу страниц. Если бы плюсы не взяли за базу Си, то это говно давно бы померло.
Господа, помогите. Пишу в Qt 5.6, использую библиотеку для отображения оффлайн карты https://github.com/raptorswing/MapGraphics Подскажите, как реализовать в ней геолокацию ?
>>866558 >Есть убунта и я хочу вкатиться в с++. На чем писать код и чем помпилировать? Слышал про gcc и g++: они нормальные? Значит Убунту тебе мозгов поставить хватило, а найти в чем код писать нет. Ставь студию в вайне тогда, пердолик
>Могу я из-под прыщей кодить программы для виндоуса? С этого окончательно проиграл. Ты С++ изучать собираешься или тебе надо просто заебаться? Каждый блядский тред одно и тоже, каждый тред. Ньюфажики лезут изучать С/С++, но студия видимо слишком мейнстрим для них, нужно обязательно пердолиться с мейкфайлами и компиляцией из блокнотика.
>>866592 > Ну и почему же это единственный выстреливший наследник си Зафорсили. А реально язык - кусок говна. Если откинуть божественное наследие Си, то останется один вонючий кал, вроде шаблонов, перегрузки операторов, изуверские способы функционирования конструкторов/деструкторов, отсутствие бинарного стандарта на типы, строковый тип с костылями, и.т.д..
>>866603 Ну так из-за наследия си всё говно и льётся. Ты пока что перечислил только нужные фичи. Кстати, что не так с конструкторами/деструкторами? Не понял насчёт бинарного стандарта типов. Одинаковые размеры на всех платформах? Хуиток вроде cstddef как говна, и опять же — это из няшной проблема. >>866612 g++ hui1.cxx hui2.cxx hui3.cxx hui4.cxx инб4: вводить всё каждый раз тоже не надо, да.
>>866612 >4 файла >хэловорды >мэйкфайлы ловите поехавшего блять алсо один хуй придётся разбираться с мейкфайлами, сборкой под разными системами и конфигурацией билдов, так что это райт вей
>>866615 Пнятно, значит компилировать в g++, тогда где писать. Есть что поудобнее, чем стандартный убунтовский блокнот? К слову свободная ось стоит скорее для обработки фотографий моего члена в рав, но снова появилось желание вкатиться в дев и поэтому пишу. Еще в каком-то гайде слышал, что для вкатывания в код желательно сидеть на прыщах и все пилить вручную. Еще мне нравится юнити, благо стоит не совсем некроговно и на все хватает ресурсов компьютера, а винда для игрушек.
>>866606 > Насчет шаблонов ты зря Шаблоны - это такая же залупа, как и макросы. И претензия к ним точно такая же, как к макросам - не видно кода, который реально выполняется. Даже в отладчике > Лучше уж такие чем никакие. Страуструпа можно было простить в начале, когда он выдумывал множественные наследования. Но когда появилась и успешно стрельнула java, которая реально в продакшене показала, что нужно только одиночное наследование, а для остального вполне достаточно интерфейсов - уже не было никакого смысла поддерживать этот ебаный цирк с конями >>866609 > Сделанной через жопу, правда Тип int должен быть равен размеру регистра целевой платформы. Из этого всё и вышло. Никогда нельзя сказать наверняка, сколько у тебя будет в short int >>866613 > поддерживать какой-то специфичный "паттерн проектирования" Делегаты действительно позволяют использовать объект без знания его структуры. Не нужно, блеать, быть родственником, чтобы скоммуницироваться. Все это поняли, кроме долбонавтов из С++-комитета >>866615 > Ну так из-за наследия си всё говно и льётся Стандарт K&R Си - это 100 страниц с примерами. В отличии от стандарта крестов, которые уже в первой редакции весили 450 страниц > Кстати, что не так с конструкторами/деструкторами? Неявные. Это - проблема в сопровождении. Object t и Object t() инициализируются по-разному, нельзя заранее сказать, какие деструкторы сработают, не заглянув в код > Не понял насчёт бинарного стандарта типов. Одинаковые размеры на всех платформах? Все портируемые проекты начинаются с собственных велосипедов, описывающих элементарные типы. Второй, очень важный момент. Объекты, скомпилированные одним плюсовым компилятором, не получится использовать в проекте с другим компилятором. Из-за манглинга имен и отсутствия стандарта на бинарный объект внутри obj-файлов. Экспорт почти всегда си-подобный. И это не будет решаться никогда
>>866630 Как минимум, тебе нужен хидер класса, чтобы его использовать. А делегат - это указатель на объект + указатель на метод. Т.е. тебе даже его хидер не нужен, чтобы вызвать. Например, если объект живет в какой-то закрытой либе. Это удобно
>И претензия к ним точно такая же, как к макросам - не видно кода, который реально выполняется. Почему тогда я могу дебажить начинку STL? Сдается мне ты пиздишь. >Страуструпа можно было простить в начале, когда он выдумывал множественные наследования. Хорошо так говорить в 2016 году. Посмотрел бы я на тебя в 95 в время хайпа на ООП. >Тип int должен быть равен размеру регистра целевой платформы. А вот за это пожалуй я тебя обоссу, уж извини. Наиуебанская из возможных идей. Только переписали древнюю дристню, которая падала при переходе на х64, теперь ты предлагаешь какой-либо реюз кода между архитектурами вообще по пизде пустить. Лучше уж наоборот отменить int как нечистое наследие сишки и оставить всякие int8_t и т.п. >Стандарт K&R Си - это 100 страниц с примерами. Драфт С11 занимает ~600 страниц. Возможно в 80-х это было действительно так. Ну так первые стандарты крестов тоже меньше были. Такой дешевой демагогией нас не проведешь. >Object t и Object t() инициализируются по-разному, нельзя заранее сказать, какие деструкторы сработают, не заглянув в код Не понимаю чего тебе не нравится, все очень логично и понятно. >Все портируемые проекты начинаются с собственных велосипедов, описывающих элементарные типы. В стандарте есть переносимые типы. Скорее всего всем просто на них похуй. Как что-то плохое. >Делегаты действительно позволяют использовать объект без знания его структуры. Охуительные истории. std::function для кого в стандарт добавили? Это без учета бустовых и самописных. Доступных наверное года с 1998, если не раньше.
>>866628 Шаблоны хороши, когда используются как простые генерики, но в остальных случаях ты прав хотя хорошие аст макросы — очень хорошая вещь.
Жява показала что лучше вообще нахуй выпилить наследование из языка, если не хочется оверинжинирить, страдать раком вроде object slicing-а и тормозить, вот что она показала. Но опять же, подобные избыточные вещи регулируются конвеншеном "чо и как используем" для конкретного проекта.
Про неявность конструкторов — в твоём примере во втором случае конструктор вообще не вызывается кстати, вопрос знатокам - а чо вообще вызывается?, а так если знать какие вообще существуют конструкторы проблем нет.
На бинарное несоответствие компиляторов, мягко говоря, насрать.
>>866649 >Шаблоны хороши, когда используются как простые генерики А что, есть дебилы которые используют для чего-то еще? >2ch.mail.ru Хотя о чем я, мда.
>>866646 > Почему тогда я могу дебажить начинку STL? Давай, сходи подебажь её после gcc, сынок. Даже студия научилась показывать экземпляры коллекции примерно в 2012 году > А вот за это пожалуй я тебя обоссу, уж извини. Себя обоссы, ладно? Я нигде не писал, что это хорошо > Не понимаю чего тебе не нравится Неоднозначность создания объекта. Это хуево со всех сторон > Охуительные истории. std::function для кого в стандарт добавили? Нахуй он кому нужен, этот ебаный костыль? Во-первых, указатели на функции итак есть в стандарте, во-вторых, std::function для объектов специфицируется от определенного класса, а это - кусок говна, а не делегат. Делегат здорового языка не требует имени класса, если ты вдруг не знал. Только сигнатуру метода.
>>866649 > а так если знать какие вообще существуют конструкторы проблем нет Ты, надеюсь, понимаешь, что идея о существовании нескольких конструкторов сама по себе наркоманская? > На бинарное несоответствие компиляторов, мягко говоря, насрать Если писать хелловорлды или собирать всё из сорцов, то конечно, насрать можно на многое. >>866654 Потомучто адовая хуита. Особенно, если вдруг кто-то захочет сделать наследование от двух классов, у которых в свою очередь, где-то был общий предок.
>>866721 >Ты, надеюсь, понимаешь, что идея о существовании нескольких конструкторов сама по себе наркоманская? Да нет, не вижу ничего наркоманского. >Если писать хелловорлды или собирать всё из сорцов, то конечно, насрать можно на многое Если к хуйне придираться — то тем более. Приведи реальный юзкейс проблемы, как с этим ирл столкнуться можно. Все сторонние библиотеки поставляются либо исходниками, либо бинарниками под все компиляторы как тот же Qt. А тащить левую хуиту без поддержки и исходников — нужно быть конченым уебаном.
>>866723 Потому что приоритет операторов. pz++ дереференс указателя (pz + 1). (pz)++ — инкремент значения, на которое указывает pz. http://ideone.com/kFBawX
>>866758 Да, обосрался я с порядком. Дереференс старого и затем инкремент, лишь последующие обращения будут указывать на (изначальный_pz + 1). Так, как написано в том посте, будет работать •++pz.
>>866759 >И вообще ты там за границу выделенной памяти вывалился. Ты про pz[1] после инкремента? Так это специально, чтобы показать, что произошло. (Можно было, конечно, сделать массив из трёх элементов, но выводишь лишь первые два, но не похуй ли, если вся суть в pz[0].)
Как работать с типом char для массивов? Повсюду гайды как этот тип использовать для строкового массива, но мне хочется поэкономить память (в учебных целях по крайней мере) и использовать char для символьного массива, но у меня вместо цифр одни ascii символы появляются, можете подсказать что делать? Или хотя-бы руководство какое скинуть на такую вроде-бы простую тему.
>>866725 > Да нет, не вижу ничего наркоманского Возможностью создать разные конструкторы для присваивания, копирования и создания обязательно воспользуется какой-нибудь фрик, обчитавшийся Александреску. А потом на сопровождении этого говна обязательно обдерут жопу сотни людей > Приведи реальный юзкейс проблемы, как с этим ирл столкнуться можно. Есть охуенная либа, собранная, допустим, интеловским компилятором. Допустим, это очень оптимизированный видеокодек, купленный за деньги. Никто, блеать, тебе не даст ни сорцов и не будет делать версии для разных компиляторов. Просто сделают обертки на Си и выдадут с хидер с extern "C". Это настолько типично для коммерческих библиотек, что я удивлен, нахуя ты это спрашиваешь > либо бинарниками под все компиляторы как тот же Qt. Видимо, ты кроме Qt ничего не подключал >>866737 Учи свой любимый язык. Если деструктор не объявлен виртуальным, то потомки его не вызовут. Но если он объявлен, то будет вызываться обязательно. А бывает так, что деструкторы нужно вызывать избирательно. Явного вызова деструктора с варнингом о его отсутствии хватило бы для всего. Но нет, Страуструп пошёл своим путем
>>866811 >Это настолько типично для коммерческих библиотек, что я удивлен, нахуя ты это спрашиваешь Потому что в их случае проблемы и нет. Дали сишный апи — тем лучше, откуда угодно вызвать смогу. >обчитавшийся Александреску Так что наркоманского-то, шарпофрик? Единственное но тут — генерируемые компилятором, но у тебя всегда есть explicit которого требуют вообще все гайдлайны контор вроде гугла и мозиллы.
И да — Александерску, он про другое. ро ту самую хуёвую часть плюсов которой ты не видел, если считаешь вот это проблемами.
Нужно вызывать деструкторы избирательно — сделай отдельный метод как clear() в векторе и не еби мозга.
>>866839 > Дали сишный апи — тем лучше, откуда угодно вызвать смогу Т.е. экспорт класса - невозможен. Об этом я и пишу. В плюсах его не было, нет и не будет. Долбонавты из комитета лучше какой-нибудь буст-хуюст засунут, чем абсолютно необходимую для продуктового софта фичу (т.е. кросс-компиляторный экспорт классов) > но у тебя всегда есть explicit > сделай отдельный метод как clear() в векторе и не еби мозга Вся суть плюсовых фич - сначала их запилить, немного подрочить, написать книгу, а потом запилить способы их обхода.
>>866853 >Об этом я и пишу Написал бы нинужна, но напишу так: это именно что говёное наследие си, которое будет исправлено только модулями стандарте так в 20-м, но вы там как нибудь держитесь, лол Просто взять и запилить эту фичу они не могут из-за легаси, притянуть какую-то хуитку из буста которую один хуй никто юзать не будет понятно что легче.
А способ обхода был таки изначально. И если хочешь чего-то что изначально не задумывалось хуй знает сколько лет назад — не удивляйся что язык такими фишками не располагает в отличие от шарпов, сделанных с опытом плюсовых шишек.
>>866853 Ты себе объем этой фичи представляешь? Она очень объемная в реализации и не очень полезная по сути. Потому что автору твоего видеокодека намного выгоднее сделать сишный интерфейс и продавать свою либу не только тем, кто пишет на С++, но и на Java, питоне и прочем говне. И, если ему так охота, то можно сделать открытый hpp враппер (точно такой же, какой потребуется для Java, питона и прочего говна). C++ в этом плане ничем не отличается от любого другого языка, наименьшим общим кратным между всеми языками является C ABI, только и всего. То ли дело некоторые другие языки, в которых ровно один компилятор, лол. Вот там-то такой проблемы точно нет.
>Object t и Object t() инициализируются по-разному Вообще-то второе - это объявление функции с именем t, возвращающей Object.
>>866873 > притянуть какую-то хуитку из буста которую один хуй никто юзать не будет понятно что легче. А вот это намного удобнее. Сейчас лично мне буст уже не нужен, последнее, что держалось, было filesystem. И это круто.
>>866873 > это именно что говёное наследие си Отсутствие экспорта классов не может быть наследием Си. Потомучто в Си нету классов
>>866879 > Ты себе объем этой фичи представляешь? Она очень объемная в реализации Она очень мала. Сейчас поясню. Например extern "C" говорит, что аргументы функции надо класть в стек задом наперед . Результат работы функции тоже будет на стеке. И этого хватает уже 30 лет для экспорта. Точно также надо поступить с классами. Например заявить, что у методов класса extern "СPP_PROGRAMMACH" все аргументы кладутся на стек, первый аргумент - указатель на экземпляр класса, и ещё вот так должна быть сделана VMT, на неё указывает ещё какой-нибудь аргумент на стеке. Этого хватит ещё на 30 лет, люди наконец-то бросят писать сишные обертки. > Вообще-то второе - это объявление функции с именем t, возвращающей Object. В треде неосилятор. Все в Страуструп
>>866896 >Отсутствие экспорта классов не может быть наследием Си. Потомучто в Си нету классов Х И Д Е Р Ы И Д Е Р Ы
Суть в том, что при попытке такого вот жопошного экспорта ты делаешь это со всеми кишками. В языке хватает корявого говна, не надо ещё больше необдуманно плодить. >неосилятор Тебе об этой хуйне пишет уже 3-й анон, что как бы намекает.
>>866891 Открой для себя какой нибудь Qt и перестань использовать оверинжинирнутые буст и стл корявый. он кроме более широких возможностей как минимум гарантирует нормальную имплементацию, без подводных камней и хуиток конкретной импоементации
>>866903 > Х И Д Е Р Ы Что с хидерами не так? Почему при сишном экспорте хватает только хидеров, а для плюсового нужны сорцы целиком, даже если поменялась только версия компилятора? > экспорта ты делаешь это со всеми кишками. Для такого экспорта хватить только хидера, чтобы можно было вызывать какие угодно методы, собранные каким угодно компилятором какой угодно версии. Это - как раз именно то, что нужно.
>>866811 >Если деструктор не объявлен виртуальным, то потомки его не вызовут. А, вот ты о чём. Не думал, что для кого-то это до сих пор проблема. > А бывает так, что деструкторы нужно вызывать избирательно. Например.
И, возвращаясь к >>866628 >Object t и Object t() инициализируются по-разному Object t(); вообще не инициализирует никакого объекта, это декларация функции.
>>866811 >А бывает так, что деструкторы нужно вызывать избирательно. Нет не бывает. Мне вообще сложно вообразить зачем это может в понадобиться, кроме случаем какого-то кромешного говнокода.
>>866961 >Object t(); вообще не инициализирует никакого объекта, это декларация функции. Типичный уровень "критиков крестов", еще и синтаксис учить рекомендует, лул.
>>866718 >std::function для объектов специфицируется от определенного класса, а это - кусок говна, а не делегат Ты всегда можешь забиндить this. Странно что я тебе это объясняю.
Сап, програмач. Учу с++ 2 месяца, сейчас есть задачка в которой нужно будет работать с аргументами командной строки (всего 5 штук). Погуглив узнал как это можно сделать, в связи с чем пришел за советом. Стоит ли самому все ручками разбирать или лучше сразу просто юзать парсер, типа gengetopt?
>>866995 > Нет не бывает. Мне вообще сложно вообразить Нет, бывает. В том то и дело, что ты воображаешь о том, что я сам видел и поддерживал > Ты всегда можешь забиндить this. Ты наверное не понимаешь, что речь идет не о том, как вызвать метод у потомка от какого-нибудь класса, а чтобы вообще уметь вызывать метод класса, не имея даже его(класса) описания, а только указатель на экземпляр, да? Посмотри на кишки Qt, на которое тут дрочат вприсядку - там есть собственный урод, имитирующий делегатов, но всеравно требующий, чтобы метод вызываемого класса был потомком какого-то там базового класса Qt. То, что я хочу получать события от Qt в классы, которые никак не связаны с Qt и не наследуются от него - авторам Qt в голову не приходит.
>>866995 >Типичный уровень "критиков крестов" Где ты увидел "критика крестов", крестодаун? Это была критика "критиков крестов". >>867008 >я сам видел и поддерживал
> кто-то написал говнокод > ЭТО ЯЗЫК ВИНОВАТ!11 Ну ясно.
>>867008 >Ты наверное не понимаешь, что речь идет не о том, как вызвать метод у потомка от какого-нибудь класса, а чтобы вообще уметь вызывать метод класса, не имея даже его(класса) описания, а только указатель на экземпляр, да? Шарподаун думает, что шарп умеет вызывать методы у неизвестных ему классов через libastral. Шарподаун, просто у .NET CLR есть описание твоего класса, поэтому "вызов без описания" работает.
>>867027 > кто-то написал говнокод > Ну ясно, выбрось все и перепиши Ну охуеть просто. Ты наверное участвовал в проектах, где всё написал сам? Делал что-нибудь, кроме своих лабораторок? Были люди, которые согласились тебе за твое говно заплатить? >>867029 > Шарподаун думает, что Причем тут шарп, дятел? Почему это умеют делать любые компилируемые языки с классами, кроме плюсов? Например, тот же древний Delphi?
>>867008 >В том то и дело, что ты воображаешь о том, что я сам видел и поддерживал Мои соболезнования, скорее всго ты работаешь с кодом дебилов.
>чтобы вообще уметь вызывать метод класса, не имея даже его(класса) описания, а только указатель на экземпляр, да? Именно для этого и сделан std::function. Делаешь function от метода, биндишь this, передаешь третьим лицам которые об изначальном классе ничего не знают.
Понимаю что это спермопроблемы, но всё же памагити: есть проект с dx9, который на десятку не ставится, и его нужно собрать. Гуглинг и сайт мс выдают только статеички как с него слезать, а рефакторить 7клок не вариант, что делать?
>>867035 > скорее всго ты работаешь с кодом дебилов. Скорее всего, ты не видел проектов размером более, чем 9к строк и которым более, чем 2 года. Тебе ещё предстоит многое увидеть, если останешься в профессии > Именно для этого и сделан std::function. Делаешь function от метода, биндишь this Теперь всю эту залупу передай в либу, написанную на другом компиляторе. А, у тебя ж все шаблонные чудеса происходят на этапе компиляции? Ах, какая жалость.
>>867032 > Почему это умеют делать любые компилируемые языки с классами, кроме плюсов? > Причем тут шарп, дятел? Т.е. ты спрашиваешь меня, "при чём тут шарп", хотя сам не понимаешь, что он не при чём? Шарп я для простоты упомянул.
Теперь отвечу на вопрос "почему умеют": да потому же, что и шарп. Имеют жирный RTTI и жирный рантайм, умеющий лазать по RTTI. Чудес не бывает, бесплатно ничего не даётся.
> Например, тот же древний Delphi? Понимаешь ли. Ситуация, когда язык пилит одна контора для одной платформы, как то Delphi для wintel, C# для .NET CLR или Java для JVM кардинально отличается от ситуации, когда язык делается независимым от платформы и вендора.
В первом случае хоть блядский цирк с конями в язык запиливай. Во втором случае — это не всегда возможно и желательно.
>>867059 > Имеют жирный RTTI и жирный рантайм, умеющий лазать по RTTI Вот давно пора вставить хоть какой-нибудь RTTI в стандарт. Пусть не все будут его использовать, пусть не всё можно будет экспортировать, но чтобы он был, чтобы язык можно было назвать портируемым. До сих пор пользуются экспортом 30-летней давности, пиля безобразные обертки. Это нужно было сделать ещё 15 лет назад. Но мудаки вместо 2-3 страниц описания способа экспорта, предпочитают в стандарты засовывать бусты, которые вообще будет невозможно собрать и использовать на половине плюсовых компиляторов.
>>867081 >Вот давно пора вставить хоть какой-нибудь RTTI в стандарт Хоть какой-нибудь там есть. > чтобы язык можно было назвать портируемым Портируемо пиши — будет портируемым.
>>867083 > Хоть какой-нибудь там есть. Никто им не пользуется. Потомучто в нем нету существенного > Портируемо пиши — будет портируемым java-господа тут могли бы тебе опорожниться прямо в рот. Почему, чтобы код, написанный на языке, который считается универсальным, был портируемым, нужно специально по особенному приседать? Может, что-то пора добавить? Что ты об этом думаешь?
>>867045 >Теперь всю эту залупу передай в либу, написанную на другом компиляторе. Пошли виляния жопой. Как делегат работает? Работает. О изначальном классе знать надо? Не надо. При чем здесь передача в либу? Ты б еще поплакался что по сети их нельзя гонять. >Скорее всего, ты не видел проектов размером более, чем 9к строк и которым более, чем 2 года. Да, да все студенты, один ты порох нюхал. Давай ты лучше приведешь пример когда нужно избирательно деструкторы вызывать, вместе посмеемся.
>>867084 >Никто им не пользуется. Рантайм пользуется. > который считается универсальным Кем считается? Универсальных языков нет и быть не может. > Может, что-то пора добавить? Пора. И пропозалы есть, работа идёт. > Что ты об этом думаешь? Думаю, бессмысленно эти проблемы обсуждать со школьниками, которые думают, что еда производится из холодильника, деньги из мамки а методы можно вызывать не имея определения класса.
>>867086 > При чем здесь передача в либу? При том, что более менее сложный проект состоит из компонентов, написанными другими людьми в другое время и может быть вообще закрытым > Да, да все студенты, один ты порох нюхал. Ещё раз: у тебя реально идиотские представления о чужом коде. В проекте, допустим, размером на 1,5млн строк, которому лет так 12-15 можно увидеть просто всё. Это - типичный С++-проект, который внедрен и продается. Там нет и не будет времени переписать даже 10%. >>867087 > И пропозалы есть, работа идёт Единственное, что порадовало за кучу лет - это std::thread. Но в половине моих рабочих компиляторов оно не появится никогда. > методы можно вызывать не имея определения класса. Делегаты в языках здорового человека -вызывают. Что с ними не так? Типичный use case: есть какая-нибудь охуенная апликуха, которая что-то считает. Сложная, богатая. К ней надо запилить графический интерфейс. От GUI нужно несколько финальных событий и пусть его напишут отдельно. Уместно к выходам гуя прикрутить делегаты и здорово, если гуй ничего не будет знать про классы мощной аппликухи, а классы аппликухи не будут наследоваться от какого-нибудь ебанутого CQtSuperMegaAnscestorOfAllObject.
>>867093 Я тебе ещё раз говорю. Неявно описания всех классов загружаются в рантайм. В .NET VM или в JVM или ещё куда.
> классы аппликухи не будут наследоваться от какого-нибудь ебанутого CQtSuperMegaAnscestorOfAllObject. > The object type is an alias for Object in the .NET Framework. In the unified type system of C#, all types, predefined and user-defined, reference types and value types, inherit directly or indirectly from Object. То, что все классы наследуются от не менее ебанутого Object тебя, почему-то, устраивает.
Я заметил что на этом сайте много годных статей которые гораздо проще, понятнее и конкретнее всё объясняют чем в любых книгах которые я читал, есть ли переведённые статьи с этого сайта на русский язык? Уж сколько десятилетий ведь прошло, неужели нету?
>>867145 Ну во первых это был вопрос, есть или нету перевод этих статей, мне слабо верится что это до сих пор не перевели. Даже если не перевели и этим займусь я, то куда я это выкладывать буду?
>>867374 Игровые движки, исключительно редкий случай, когда специфика предметной области более-менее укладывается в ОО-парадигму. >>867382 Бля, причем здесь кресты и производительность? Кресты - неудачная ОО-надстройка над СИ, плюс шаблончики и исключения.
>>867394 >Игровые движки, исключительно редкий случай, когда специфика предметной области более-менее укладывается в ОО-парадигму. Не укладывается. Современные движки data-oriented, и пишутся на С++ чуть выше сишки.
>>867413 >ты на си ебанешься писать хоть что-то сложное Ядро ОС - достаточно сложный проект? >Оно очень быстро превращается в нечитаемый пиздец С крестами абсолютно та же фигня может быть. Только с С++ еще можно с десяток несовместимых языков наизобретать и запихать в проект, а с си сложно что-то замудрить.
>>867374 Кресты не хрень, шаблоны и static time duck tymping - это гениальнейшее изобретение, которого нет практически нигде. Под ту же CUDA ни на каком другом языке писать не удобно.
>>867416 Твои швабодные ядра пишут на сишке всем миром десятки лет, и то постоянно что-то ломается в них. А коллектив из десятка хорошо организованных крестоблядков напишет в недрах корпорации проект такого же уровня за несколько месяцев.
>>867410 >За счет шаблонов >>867395 >Пруфы Ну вот например шаблоны - низкоэффективная переусложненная недофункциональщиность на препроцессоре от СИ. Наверни Template Haskell и охуей. >>867413 >на си ебанешься писать хоть что-то сложное. Все сложное как раз на СИ и написано.
>>867421 >Наверни Template Haskell и охуей. Ты откуда вылез, из 2010? Хаскель он блядь рекламирует в С++-треде. Нахуй никому твой хаскель не нужен, и не нужен будет, потому что говнище это ебаное. TH так тем более, он не нужен самим борщеедам.
>>867419 >А коллектив из десятка хорошо организованных крестоблядков напишет А потом десяток других дополнит, а потом придет кто-то еще и поправит, а потом туда придешь ты, и поймешь, что проще повеситься, чем это говно ковырять.
>>867432 >Ну охуеть, че вы так возбудились-то? Ты пришел в крестокред, а не я пришел в хаскель-тред. Хаскель-тролинг устарел еще до того, как ты начал программировать. И тут ты удивляешься, а хули тебя хуйцами кормят. Ты быть хоть придумал что-то нормальное.
>>867460 >Сказал хаскель >@ >Иди нахуй Понятно короч, местные коестовыблядки ничем не отличаются от местных же хаселофорсеров. Ебанутые неадвекваты, исходящие на визг при отсутствии аргументов.
>>867473 Это называется парадокс Блаба. Где-то была статья про этот парадокс и раст, от одного из разработчиков тайпскрипта, там основная часть в том, как он пытался доносить людям новые вещи, очень рекомендую.
>>867473 Внимательно прочитай 5-й пункт памятки ньюфагу. Думаешь, для кого он был написан? Для таких идиотов, как ты, которые заходят в тематический тред просто покормиться.
>>867485 Парадокс блаба - это про лисп, из статьи 2001 года. Только, внезапно, лисп как не был нахуй нужен в 2001, так и не нужен в 2016, а кресты как были нужны в 2001, так и нужны в 2016. Вот такой вот парадокс.
>>867491 Она основана на ложных предпосылках, что языки ранжируется по фичастости, программист на более фичастом языке круче. Из которой следует, что лисперы - боги программирования (ведь фич в лиспе жопой жуй), а не-лисперы, нихуя вообще в этом мире понять не могут, ведь они не знают всех фич лиспа. Только, дело-то какое, языки не ранжируются по фичам. У С++ фич больше, чем у С, но это не значит, что С++ лучше всегда и везде. Это разные языки с разными нишами. Второй момент, что не все фичи одинаково полезны, а некоторые и вовсе взаимоисключащие. Поэтому никакого ранжирования и нет. Лисповые макросы, например, - это мечта аутиста, желающего замкнуть всю разработку на себя. Они - говно. И лисп - говно. Поэтому творение автора было переписано яху на С++. И сейчас никто лисп не использует, хотя казалось бы, в корпорациях могут позволить себе отделы яйцеголовых, но даже tensorflow написан почему-то на питоне. Примерно то же относится к хаскельной изоляции IO. Говнофича, Scala это доказывает.
Вот эти два момента перечеркивают эту статью нахуй. Если в 2001 это было не так очевидно, то сейчас-то хули, пора бы уж поумнеть.
Да чего вы бугуртете-то, заебись же. Крестотред оживает на глазах, скоро шапку перепилим, выкатим новые книжки, нарисуем мемесы про Святую Троицу - заживем! Какая жизнь-то настанет, братцы! Можно будет каждый день заходить в крестотред и читать сотню новых постов срача, ощущая приятный холодок на кончиках пальцев, которые уже рвутся печатать проклятия в адрес хачкелепидоров и залетных байтокрестьян из сишного треда. А потом D-кун ворвется с очередной охуительной историей, и подгорит у всех.
т.е. мне нужно наследоваться от базового класса находясь внутри него, выставлять классы Female и Male наружу не вариант т.к. очевидно что их там будет много одинаковых.
>>867535 лолшто код больше похож на некую смесь сижки с пускулем, классы как минимум объявляются так:
// объявление классов в С++ class /имя класса/ { private: / список свойств и методов для использования внутри класса / public: / список методов доступных другим функциям и объектам программы / protected: /список средств, доступных при наследовании/ };
>>867485 >статья про этот парадокс и раст, от одного из разработчиков тайпскрипта Смешно там - он глядит на раст с перспективы С++, а Александреску - со стороны D. Александреску верно замечает, что раст "skipped the leg day", поскольку кроме борроу чекера в расте все очень куцее по сравнению с ди, а автор пытается в ответ сравнивать раст с крестами. Становится ясно, что у него тот самый blub paradox, поскольку ди он не видел, и с его перспективы на раст взглянуть не может.
>>867645 На ди и не надо смотреть — это просто красивые плюсы со всякими хуишечками. Там вообще нихуя отличий кроме синтаксического сахара. ну да, а ещё олександерску работает над О-нотацией в, блядь, языке, когда сам язык до сих пор сырое говно. Как бы намекает, кто же тренеровки ног пропускал-то
>>867648 >На ди и не надо смотреть — это просто красивые плюсы со всякими хуишечками Про раст можно так же сказать. Но им реально неудобно пользоваться без миксинов, нормального метапрограммирования и с ебущим мозг чекером. Он скорее ближе к сишке, чем к ди и крестам.
>>867656 Единственный минус ди — отношение к нему его же авторов. Один не хочет выбрасывать свой хуёвенький бэкэнд любимую игрушку, второй работает над О-нотацией в языке и тд. >>867653 Я же говорю — просто сахар над костылями из плюсов, миксины всё те же корявые шаблоны с красивой записью.
Посмотри например на какой нибудь libdparse, из dcd там сплошь и рядом миксины — и просто сравни это с парсером на любом языке с адт, макросами и паттернматчингом, тем же парсером компилятора раста на расте. %%не настолько кошерно как в окамле с полноценным хиндли-минлером, но всё равно другой уровень.
Попытки оставаться с плюсами даже таким образом — это и есть парадокс Блаба.
>>867662 >парсером на любом языке с адт, макросами и паттернматчингом Да, все любят использовать функциональщину для компиляторов. Но это нишевая задача, поэтому кроме компиляторов на функциональных языках мало что пишут. На той же скале в реальных задачах полиморфизм используется гораздо более широко, чем паттерн матчинг.
>>867669 Парсеры — нихуя не нишевая задача, и ими применение всех этих фич не ограничивается. Как можно связать паттерн матчинг с полиморфизмом? Это вообще нонсенс.
>>867691 >Парсеры — нихуя не нишевая задача Ты в какой-то совсем другой сфере крутишься видимо. >и ими применение всех этих фич не ограничивается Конечно, нет. АДТ и матчинг - удобная штука, не спорю. >Как можно связать паттерн матчинг с полиморфизмом? Выполняется разный код в зависимости от типа и там и там.
Господа, помогите. Пишу в Qt 5.6, использую библиотеку для отображения оффлайн карты https://github.com/raptorswing/MapGraphics Подскажите, как отметить на ней точки? Нужно рисовать при помощи QPainter поверх карты, а потом менять тайлы ? Или что? Картинка для привлечения внимания
>>867648 Ди - это не плюсы, это хуита со сборщиком мусора. Раст в этом плане хотя бы пытается, ди же метит в нишу удобного для С++-программиста сишарпа. Но С++-программистам не нужен шарп.
>>867691 Парсеры - нишевая задача для крудошлепов. У нормальных людей парсеры всего, чего можно, уже написаны. Вот обработка AST, да, часто встречается, и без паттерн-матчинга не очень.
Приветствую, анонимные пользователи анонимного форума двощ. Я пару лет назад брался за плюсы, прочитал в качестве базы Прату читал некоторые "продвинутые" книги из шапки, но потом забил. Вот пересматриваю свои заметки-конспекты по тем книгам, хочу вкатится назад. Нужна практика. Посоветуйте с чего начать. Инбифо: не спрашивать советы на двоще сделать бочку@соснуть хуйцов@свичнуться на хаскле
Как правильно называется "операция взятия адреса"? Т.е. амперсанд перед переменной, что-то я погуглил и не нашёл этого. Я хоть и вчера узнал что такое программирование, но говорить как сеньор хочется уже.
>>866721 > Наркоманские конструкторы. Не используй. > Множ. наследование - хуита Не используй. Ведь в крестах "не платишь за то, что не юзаешь". Как вообще можно критиковать излишиства в виду этой пафосной фразы.
В книге уильямса есть такой код — http://ideone.com/F6SywS Собственно, вопрос по 24-ой строчке, почему место вставки в указано end()? new_lower_chunk.data — это пустой список, .begin() == .end(), так что разницы, собственно, нет, но ведь в точно такой же ситуации на 17-ой строке, вставляя элемент в пустой result, было написано result.begin(), так что это не просто его стиль такой. Чем же он руководствовался, в чём семантика использования new_lower_chunk.data.end() в той ситуации? Или я зря вообще думаю над этим?
>>868805 >Просто ты туповатый, это бывает Ставлю очко Страуструпа, что ты обосрёшься на чём угодно сложнее hello world-ов. Небось даже что такое ADL не знаешь.
>>868806 Это чё, способ определять какую из перегруженных функций вызвать? Пиздец, понапридумывали ненужных терминов, вместо того, чтобы убрать всякое гавно.
>>868805 > Разрабатывай очко крестомышление велосипедами на шаблонах шаблонов. Сложности программирования на темплейтах говорят только об их слабой выразительности: для тривиальных действий нужно написать десяток темплейтов. И гордиться умением кодить на них это как гордиться умением писать нетривиальные программы на brainfuck.
Почему при сложении float а=50,25 и float б=11,17 вместо 61,42 получается 61,419998? Для типа double все норм (Пример из С. Пратта - "Лекции и упражнения по С++. Издание 4, Platinum Edition, стр. 111").
В книге поясняется, что мол потому, что float гарантирует точность лишь шести значащих цифр. Но блядь там же всего 4? Получается, что типа float должно хватать. В чем подвох? [code] #include <iostream> using namespace std; int main() { float a,b; cout.setf(ios_base::fixed,ios_base::floatfield);
cout<<"a: "; cin>>a; cout<<"b: "; cin>>b;
cout<<"a + b = "<<a+b<<endl; cin.get(); return 0; } [/code]
>>869251 Autodesk Maya, Unity (которая оболочка убунты), всё KDE со всем софтом, UI смарттелеков LG (которые на webOS, весь интеловский тулкит для разработки и профайлинга (которые Intel Studio, Advisor, Profiler и тд), все AMD-шные софтины: от настройщика GPU для пользователя до CodeXL и ещё буквально тыщи свободных и коммерческих софтин, которые как гуглятся по спискам вроде https://wiki.manjaro.org/index.php?title=List_of_Qt_Applications .
Привет, пацаны. Тут такая штука, работаю в эрикссоне, я понимаю, что меня легко можно обоссать. Но я работал на решении трабл репортов от операторов и суть такова, что скоро сменю проект и буду делать апликации для оператора, вроде oss/bss. И тут дело в том, что нужно подготовиться.
Всё очень сильно изменилось, я работал со старыми плюсами. старой разработкой, и со специфической штукой, RSARTE, где плюсы просто пара строчек кода, и мне надо было разбираться в продукте, а не кодить.
Я сделал небольшой фичер и понял как я дико сосу. Ибо реквайрмент к коду далеко не тот, который был даже в 2013, когда был только свой фреймворк для теста, задебажил, хуяк, хуяк и в продакшн.
Теперь блядь, надо написать современно на с++11, прогнать clang static code analysys, прогнать lint, purify, purecov, все заюниттестить gtest, valgrind и я тут понял что соснул. Я не умею писать качественный софтвар и не умею все это делать. Есть у кого может какие книжки или гайды для быстрой пробежки по этим всем технологиям, ибо та же документация по том, как писать фильтр для линта или валгринда, это блядь сотни тонн инфы, есть путь более краткий, нежели курить мануалы лет 5?
>>869944 Да, жаль, он не умеет в C++11. А других таких настраиваемых инструментов нет. clang-format не умеет нихуя, astyle умеет ещё меньше чем clang-format.
>>869944 Можешь попробовать тот же astyle. У него есть набор пресетов. Типа --style=kr и ещё какую-то опцию, чтобы он табы вместо пробелов использовал.
Но максимум что он сделает — расставит фигурные скобки с сделает отступы. Никаких изысков типа переноса аргументов функций или выравнивания по бинарным операторам.
>>869609 чувак, ты работаешь в эриксоне блядь, да ты бог по сравнению с местными уебками, что bsort на крестах осваивают кого ты собрался здесь спрашивать, лол
Гуру разработки на плюсах (в макосе) ответьте мне на вопрос, пожалуйста. У меня сейчас стоит CLion, который использует встроенный эппловский компиллер (xcode) со всеми его вытекающими. Он сейчас как я понял довольно сильно отличается от обычного g++ линуксового. Как мне разрабатывать клевый кроссплатформенный с++ код на макосе? Есть идея даже просто докер юзать для компилленга.
Или просто забить и писать под эппловский компиллер? Конечно с расчетом что с моим кодом будут работать ребята с линукса и т.д.
>>870328 Ты долбоёб или что? У тебя из коробки последний clang с поддержкой последнего стандарта, с автоматическим автообновлением и поддержкой вендора, но нет блядьь, хочу писать хуйню и жрать говно.
>>870346 В OS X компилятор из коробки - Clang. cc и c++ - это clang и clang++, которые идут в стандартной поставке. Это не GCC. >>870349 Он полностью соответствует стандарту, да. Хотя зависит в первую очередь от используемых средств, а не языка.
>>870471 gnu nano - консольный текстовый редактор с подсветкой синтаксиса mc - midnight commander - консольный файловый менеджер, который удобно юзать Гуя у меня нет и монитора тоже - сижу удаленно через ssh сам на windows 7
Сап, господа. Нужно запилить аналог консольной Dir в винде, чтобы так же выводило дерево файлов и папок, но соответствующих маске. Dir выводит по маске . т.е. все файлы Как я понял мне нужно разобраться что такое классы и запилить рекурсивный поиск с итератором. В плюсах шарю на уровне циклов и ввода/вывода массивов, что делать и читать? Желательно подача инфы для мммаксимум тупых вроде меня.
>>870480 Как же непривычен gcc на арче по сравнению с g++ бунты. Еще я опробовал gnu nano с подключенным синтаксисом. Синтаксис включен, но все руками вводить заебывает, неужели там нет автозполнений? Например я открываю скобку и у меня открывается вторая, а курсор между ними? Может я чего не так включил или что-то упустил?
Аноны, расскажите пожалуйста, почему вы так сильно бомбите от шаблонов? Я сам эмбеддер, работаю сейчас с довольно большими проектами, но написанными на чистых сях. Ради интереса параллельно почитываю про плюсы, и для диванного теоретика вроде меня шаблоны выглядят очень привлекательно. А потом я захожу в тред и вижу тонну хейта и ненависти к этим внешне безобидным темплейтам. Также реквестирую примеры кода, чтобы наглядно убедиться в их уебищности.
Хочу изучить как бинарный код переменных записывается в ячейки памяти и как он там хранится, я хоть теорию по этому делу просмотрел, но хотелось бы на практике глянуть как и что устроено. Подскажет кто?
Хочу написать json либу. Возникла проблема хранения данных. Вижу следующее (не очень элегантное) решение http://ideone.com/dejXeQ . Очевидный минусы - жирный интерфейс Value (с другой стороны лучше чем простыня из dynamic_cast'ов) и работа с вложенными структурами будет просто адски сложной. Пример: auto name = json["strings"]->object()["name"]->string(); Вместо auto name = json["strings"]["name"] как хотелось бы. %%Пока писал пришла идея сунуть operator[]() в Value). Есть идеи как это все получше сделать или это нормально для языка со статической типизацией? Алсо будет ебля с указателями *Value в контейнерах которые надо будет кому-то уничтожать. Если я, скажем, наследюсь от вектора и пишу самоуничтожающийся контейнер и запрещаю операции копирования (только move, только хардкор), нормально будет?
Что я делаю не так? gcc единственный компилятор для шарпа и крестов на арче, во всяком случае им можно компилировать, а у меня нет. Проверил онлайн компилятором - все нормально, а этот не работает. ЧЯДНТ?
Хочу изучать программирование. Долго смотрел треды и читал про направление, в конечном итоге пришел к выбору С или С++ И вот тут я начал теряться. Вроде как Си это чуть ли не основа всего сущего, альфа и омега, но с другой стороны он как я понял устарел, а вот кресты вроде живее всех живых. А потом аноны, плиз хелп. Есть ли смысл сейчас вообще изучать Си (не кресты), а если и есть, то стоит начать с С++ или Си? С меня как обычно, тонны благодарности и нихуя.
>>870802 Правильно ли я понимаю, что кресты это офигенный язык кучей возможностей и немного сложноват для мимокрока, но зато откроет огромные перспективы для него (с учётом, что web меня не интересует )
>>870809 >офигенный язык Нет. >немного сложноват для мимокрока Сложен он не столько в обычном смысле, сколько в том что вкатится не сложно — сложно написать что-то рабочее без триллиардов багов. >кучей возможностей Да. >но зато откроет огромные перспективы для него ( Откроет возможность найти работу именно в этой области и участвовать в проектах на нём, ни больше ни меньше, как и остальные мэйнстримные языки.
>>870791 Это плохой язык для обучения программированию. Это хорошая лошадка для зарабатывания денег, так как инфраструктура меняется медленно, а работы много. Начни с чего-нибудь другого.
>>870905 Нет, преимущества в следующем: 1. Обучает важности текстовых представлений и пониманию независимости редактора и IDE от языка. 2. Интерпретатор есть на любом компе, ничего не нужно ставить, особенно по сравнению с питоном, который на винде не очень. 3. Это взрослая технология с плавным порогом вхождения.
>>870933 С - это прежде всего кроссплатформенная виртуальная машина, его нужно знать вообще всем программистам. А С++ - это довольно конкретный язык, в котором С-подмножество только мешает и нужно знать, чем они отличаются и никогда их не мешать. Ну и еще так проще, и после изучения С можно передумать и уйти в Java, например.
>>870947 Я посоветовал вкатывальщику в 30 лет делать игры на HTML5, его дичайше проперло и на такой мотивации он быстро вырос. SICP по-моему скукотища для яйцеголовых, удовольствие я от этой книги получил уже с неколькими годами опыта программирования, для начинающего важнее всего, чтобы было интересно.
>>870954 Вроде слышал, что вкатываться просто в рандомный язык и не иметь никакого базового представления о программировании плохая идея, если хочешь действительно вкатится.
>>870957 JS далеко не рандомный язык. Он не самый хороший, конечно, но хотя бы всяко лучше бейсика, на котором начинали поколения американцев старше 40 лет (у нас больше паскаль был в цене).
Почему в chrono всё так усложним? Теперь чтобы узнать текущее время надо строчку из 120 символов писать. А чтобы засечь время работы программы, то эту строчку надо повторять дважды. С ctime такой ебли не было. http://ideone.com/FoZoBQ
>>870791 Не выучишь как первый язык, почти все плюсеры начинали с универов, где до того и так знали либо лиспы и алгоритмы(швеция, напрмер) и им остальось лишь выучить обосцанный язык. Другое дело ты, который нихуя не учил. Тебя сольют на проектах, если устроишься в более-менее норм контору, проэкты очень сложные в большинстве, потому индусов вообще не зовут, в крайнем случае поляков, ты соснешь как математик.
Возьми чего проще, иди в модные фронт-енды, джаваскрипты, питоны, тебе будет легче.
Напомните книгу. В одном из прошлых тредов кидали ссылку на блог человека который эти книги залпом читает. Там была книга про с++ и половина этой книги была про дэбажинг. Забыл сохранить. Помнит кто название или блог?
>>871249 >Два аргумента для обозначения промежутка вместо одного. ты же понимаешь, что это сделано для того, чтобы безболезнено заменить один итерабельный контейнер на другой? >>871250 Ну почему нельзя его просто юзать его в еще одном треде асинхронно?
>>871248 >с stl то что не так лол? Аллокатор — параметр шаблона. Вектор, который выделяет память одним аллокатором, не можно скопировать в вектор, который выделяет память другим аллокатором.
>>871256 >ты же понимаешь, что это сделано для того, чтобы безболезнено заменить один итерабельный контейнер на другой? Чтобы можно было взять begin от одного контейнера, а end от другого?
>>871260 Нет. Ну вот был у тебя вектор, а ты хуяк такой и заменил его на list и все норм дальше работает. >>871259 Тут я обосрался, не так понял вопрос
>>871257 Ну копировать вектора такое вообще. В крайнем случаем можно скопировать вектор в еще один вектор с таким же алокатором, а потом переместить в вектор с другим алакатором. хотя говорить, что это хорошо не стоит
>>871262 Ну если тебе нужно от одного элемента списка до другого пройти, в своем каком то велосипедном списке, как бы ты эти границы задал? При том, что ты не знаешь количество элементов между ними.
>>871277 Это всё говорит о "качестве" советского образования. Степанов учился в МГУ и разработал STL. Учился бы в Кэмбрижде, тёрся бы рядом с Саймоном Питоном-Джонсом и был бы знаком с ФП — спроектировал бы STL получше.
>>871248 >с stl то что не так лол? У каждого она своя, и в одного std::move или оператор = с ним работающий через std::swap, у другого list.lenght() через sts::distance работает, у третьего до сих пор не всё реализовано, тормозит и выделяет память втихую. И это только из того, что как работает, если говорить об архитектуре, кривоте и оверинжиниренге можно ещё 20 таких простынок накатать сходу. >Да и кроме буста альтернативы работе с сетью, кроме сокетов, просто нет лол. Их тыщи — даже в том же Qt всё удобно и красиво, с тредпулами и шлюхами, а не чудовищные неотлаживаемые портянки из asio.
Алсо, помню как-то ковырялся в гитхабе фейсбука — все проекты со своей стандартной библиотекой. EA пару лет назад тоже выложила в опенсорс свою. В гайдлайнах мозиллы запрещается юзать STL — тоже своё добро. И так можно ещё долго продолжать — так или иначе это тот ещё показатель.
>>871253 А в чём проблема и что ему ещё возвращать? B? рантайм еггог? Возвращается же всё равно либо по значению, либо константа. В питоне, например, тоже A возвращается (ссылка на переданный же аргумент).
>>871323 Но почему B-то? Самый примитивный и распространённый алгоритм (луп с if el > tmp_max: tmp_max = el) вернёт A. Конечно, можно заменить > на ≥, тогда B. Но почему одно считается "правльнее" другого? Разве для этого не должно быть просто договорённости?
>>871353 Для консистентности. Пусть A < B. Тогда min возвращает ссылку на A, max — на B. А вот если A == B, то min по-прежнему возвращает ссылку на A, а max... тоже на A. Выгледит как говно.
>>871353 Ну или так: возьмём упорядоченную последовательность (массив, список) A1 ≤ A2 ≤ A3 ≤ ... Если бы max в случае равенства возвращал ссылку на B, то при проходе по этой последовательности по парам соседних величин min бы всегда возвращал левый аргумент, а max — правый. А так возвращаемую max ссылку колбасит в зависимости от того, больше ли последующий элемент последовательности или равен текущему.
В общем, "удовлетворительно" Степанову за STL можно поставить. Какая-то работа сделана, но до ума не доведена. Как дипломная работа, которую начали писать за две недели до защиты.
>>871354 >А вот если A == B, то min по-прежнему возвращает ссылку на A, а max... тоже на A. И? A не является минимальным (максимальным) значением списка?
>>871358 >возвращаемую max ссылку колбасит в зависимости от того, больше ли последующий элемент последовательности или равен текущему. Ну в этом, вроде бы, и смысл max'а, что он находит наибольший, а не последний, не?
И почему имеено min должен возвращать левый, а не max, кстати?
>>871359 Интереса ради, хотелось бы ещё увидеть, где min/max реализованы так, как ты говоришь. Я как-то не заострял на этом внимание и обычно было всё равно, какой из двух вернётся, так как интересовало лишь значение.
>>871387 >И? A не является минимальным (максимальным) значением списка? Я ещё раз говорю: дело в (не)консистентности. Можно вообще было сделать это implementation defined. Вопроса, почему оно defined не возникает?
>>871387 >Ну в этом, вроде бы, и смысл max'а, что он находит наибольший, а не последний, не? А в случае равенства он должен возвращать правую границу. Тогда его поведение будет совместимо с min.
> И почему имеено min должен возвращать левый, а не max, кстати?
Можно, конечно, в случае равенства min-ом возвращать правый, а max-ом — левый. Но всё же по-дефолту используется сравнение <, а не > и естественно желание сохранить непрерывность min и max до равенства.
Я плотно не изучаю этот язык, но иногда заглядываю туда на тему "а как там сделали X". И каждый раз вижу, что всё, что в це-крест-крест сделали неправильно, там переделывают правильно. min и max не стали исключением.
Оказывается, Степанов покаялся за свой max: (It is hard for me to blame people who do so: after all, they just follow the C++ standard specification of max written by me. It took me several years to see that I was mistaken.) http://stepanovpapers.com/notes.pdf#page=63
Более менее прошёл теорию в C++, хочу начать делать gui программы на Qt, но не могу его понять, хоть и говорят что у него хорошая официальная документация, но она хороша только как энциклопедия по классам и всему аналогичному. Может быть посоветуете хороший туториал чтобы войти в Qt? Я пробовал смотреть "Шлее М. Qt профессиональное программирование", но исходя из названия там всё слишком профессионально, а ничего другого по Qt я не нашёл.
>>873120 Пробовал написать using std::cout и using std::endl в начале кода? Авоська и заработает, раз уж пизда по сиаутам. Может быть, вообще пересоздай проект. Кстати, раз уж зашёл такой разговор, задам интересовавший меня вопрос: почему куча студентов с моего потока (но с более хардкорных спецух) поливает говном "using namespace std" и говорит, что может произойти какой-то ниибись конфликт имён? В книгах НИХУЯ такого не видел.
>>873300 >Кстати, раз уж зашёл такой разговор, задам интересовавший меня вопрос: почему куча студентов с моего потока (но с более хардкорных спецух) поливает говном "using namespace std" и говорит, что может произойти какой-то ниибись конфликт имён? Мамкины максималисты и каргокультисты. Шли их нахуй.
>>873300 Представь, что мы работаем над одним проектом но над разными его частями. Я написал свой ОСОБЫЙ вектор для своих класов и засунул в свой неймспеейс. А потом приходит общий код и:
using std; using yobanamespace; vector<yobaclass> v vector<yobaclass> vv;
Не тоже самое, что и
std::vector<yobaclass> v yobanamespace::vector<yobaclass> vv;
>>866599 у make есть автоправила. если у тебя в директории лежит hui.cpp и ты наберёшь make hui, то вызовется g++ hui.cpp или, к примеру, make CXXFLAGS=--std=c++11 hui -- уже с флагами
Крестохуесосы, почему все ваши гуй-фреймворки такое говно?
Всяким Qt/Gtk/etc хуй знает сколько лет, ничего даже близко похожего на WPF нету. QML — говно для мобилок, не больше.
Разве что sciter радует, хотя он и почти не связан с плюсами. Но его главный минус — количество ебли, несопоставимое даже с ручной сборкой какой нибудь Qt.
Чем кутя лучше? Тем что нет нормального WYSIWYG редактора? Кривая хуита вместо IDE, которая нихуя не умеет? Или ещё куча плюшек, начиная от общей оверинжинирнутости которая идёт больше из косяков языка конешно, заканчивая тем, что нет даже нормальных средств для создания банальных хуиток типа dockable-виджетов?
>>873983 С тобой по делу не хочется говорить, потому что ты выдал свою утиную натуру в первом посте. Наплел абсолютной хуйни, а потом захотел конструктивного диалога.
>>873987 То есть по делу ты банально ничего и не можешь сказать, манявратор. Ладно, у кути есть небольшое преимущество — кроссплатформа только вот оно таковым является ровно до попытки сделать что-то выходящее за рамки стилей системы/наличия встроенных виджетов, которых там с гулькин хуй
>>873993 >Крестохуесосы >такое говно >говно для мобилок >количество ебли >Кривая хуета >оверинжинирнутости На будущее: если хочешь, чтобы с тобой говорили по теме - будь вежлив и конструктивен. Изучи, пожалуйста предмет, прежде чем делать какие-то выводы. Пока я в тебе вижу восторженного студента, который прибежал в тред после пар по дотнету. Ты не заглянул даже в доки (dockable виджеты делаются одной строчкой), не разобрался что такое qml, не осилил визуальный редактор. Да что уж говорить, ты даже не осилил понять, что qt это фреймворк.
Отвечаю тебе только потому, что мне скучно на работе :)
>>874007 > (dockable виджеты делаются одной строчкой Если бы ты хоть раз работал с этой хуйнёй - не писал бы этого. Очевидно у тебя знакомство с кутей на уровне "загуглил, всё няшно". Даже отвечать на это смысла нет. >не разобрался что такое qml Сразу видно google-driven-developer-a, который опять ни разу с этим не работал но зачем-то что-то утверждает. QML - это говно для мобилок прежде всего потому, что из готового в нём всё ТОЛЬКО для тачскринов, вообще все контролы и виджеты. В старых версиях ещё были нативные вещи вроде тулбаров окон - сейчас их выпилили нахуй, даже нормальный список не сделать - резиновая мобильная параша. Для десктопного софта что-то уровня си без библиотек. >не осилил визуальный редактор В нём банально нет н-и-х-у-я. Ни в кумэловском который даже половину своих же встроенных конртролов отрисовать не может и знать не знает о их пропертях, ни в кутешном особенно добивает то, какими костылями там расположение виджетов присобачивается, и как "каштомизация" кастрированного QSS, который кастрированный CSS без cascading - кастомизация на изменении цвета заканчивается. > что qt это фреймворк. В первую очередь гуевый. Я вот не видел пока проектов, использующих Qt как какой нибудь буст чисто ради фреймворка.
Ну вот и поговорил с диванной маней, мне кстати тоже скучно на работе.
Скажу сразу, я не ньюфаня, есть более менее годный опыт программирования(не только на крестах), но не было возможности вникнуть достаточно глубоко. И когда появилось свободное время решил хорошенько засесть именно за C++. Собственно вопросов несколько: 1) Я не до конца понимаю эти приколы с pointer/reference, если для переменных это ясно, то для классов и прочего не совсем понятно. А также все эти приколы с abstract, virtual, override, interface, прототипирование. Есть какие-то годные пояснения/примеры. (В книжках обычно не очень хорошо освещается этот вопрос). 2) На сколько я понимаю, изучения Qt - очень важная вещь, если намереваться связать свою жизнь с крестами. Собственно, более-менее разобрался, что это такое, но документация отвечает на вопрос для чего это нужно, а не как это сделать. Гайдики/ютьбики или устарели или малоинформативны, если действительно что-то годное? 3) Ну и последний вопрос, что еще было бы неплохо знать? Есть вообще какой-нибудь стек технологий для джун/мида? P.S. Шапку читал, но возможно не очень внимательно.
Ошибка Вызвано исключение: нарушение доступа для чтения.
this было nullptr.
Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно.
Вот кратко код:
... //создаю в main объект getline(cin, s_name); getline(cin, s_last); cin >> p; Guest new_guest (s_name, s_last, p); ... / вызывается метод этого объекта void Guest::take(Hh H) { int n; n = H->settle(this); }; */
Вопрос почему не создается ссылка на место в памяти, выделенное для этого объекта? Почему нельзя получить адрес?
Не знаю уже что делать! VS2015 е работает, не могу найти решение в интернете. Помогите. Нажимаю на отладку ЛЮБОГО приложения он сначала. говорит. что проект устарел и просит провести сборку, затем fatal error C1083 Не удается открыть файл включение: stdio.h: No such file or directory. Как же я заебался безуспешно искать решения в интернете. Прошу, помогите!
Что можете по этой книге сказать http://www.ozon.ru/context/detail/id/33852757/? Хочу приобрести её. В данный момент на половину прочитал сворованную версию пикрилейтед, но там нету очень многих моментов, да и устаёшь от решения тяжёлых примеров.
Я знаю, что многие считают, что ВУЗы не нужны программистам и проч и проч. Но все же? Какой вуз лучше для программиста. Я, например, знаю основы крестов, перехожу на жаву. на которой собираюсь в дальнейшем работать, учусь в 10 классе. Я не знаю куда поступать. Английский на уровне b1, в свободное время занимаюсь им и программированием. Все отлично с алгеброй. Куда поступать? Советовали Спбгу пм-пу, чтобы в свободное время прогал. Знаю о существовании ИТМО, например. Что мне выбрать? Что можете подсказать по этому поводу?
>>875280 Лучше скачай в Интернете книжки и посмотри как они тебе. Не понравятся - удаляй, понравятся, то покупай если хочешь. Я так делал с некоторыми книжками.
>>875310 Выбирай Итмо. На кт заебут да и вряд ли поступишь, остается на выбор ПИ и ЕНФ. На ПИ проги больше. По поводу ПИ - с предметами по специальности - прога, инфа, етц полное самообразование, преподы молодые ( 22-24 года) им вообще похуй они приходят иногда почитать лекцию,если с работы основной отпустят, все учишь фактически сам. При этом на матмехе прога вообще на нуле, учат паскаль с дедами. На пм пу даже не думай идти. Матан у нас ведет препод с матмеха,вполне сносно. С дискреткой правда все плохо, ведет некомпетентный мужик, который все с листочка очень тихо читает и нет практик. В общем суть такая - учат хуево везде, что спбгу, что итмо, все ботаешь сам.
thread - сама функция. Все вроде заебись, внутри потока работаю с этим вектором, но мне нужно вернуть полученное обратно в arr. Каким образом это можно сделать, так чтобы не создавать ГЛОБАЛЬНЫЙ ВЕКТОР?
Во время компила , визуалка выдает несколько предупреждений: "warning C4129: [: неизвестная escape-последовательность" "warning C4129: d: неизвестная escape-последовательность" "warning C4129: ]: неизвестная escape-последовательность" и неправильно его интерпретирует. В чем проблема , где я обосрался ?
>>876428 1. Регулярки в плюсах - хуйня. 2. Гугли инфу про эти самые регулярки в плюсах. Твой вопрос лежит на поверхности и найти информацию про него - изи.
>>876411 >>876458 То, что он сказал, но главное: Порядок выполнения несвязанных/независящих друг от друга выражений не определён. То есть, в (4/2) + (6/2) может первым выполниться как 4/2, так и 6/2. Хуёво, наверное, сформулировал, но смысл ясен, надеюсь.
>>876428 \\[ \\d \\] или используй raw string literals >>876440 >cplusplus .com ясно написано ,что экранирование - стандартное , при помощи "\". Да. И показан пример экранирования.
Для тех , кто хочет вкатиться советую не париться с отдельными компиляторами , компановщиками и редакторами а юзать IDE . Лично я использую вижл студию.
>>876753 В беларуси 0 вакансий, только что проверил. а все дело в том, что: >>876723 Сама специфика плюсов не предпологает джунов. Хотя бы потому что на плюсах простые задачи не решаются, да и простые задачи по меркам Java или C# становятся сложнее и требуют понимания специфики языка.
>>866503 (OP) Кстати по поводу третьего пика. Кто-то знает были где-то попытки создать (эзотерический?) язык, где объекты сами бы интерпретировали поступающие к ним вполне рандомные сигналы?
Это ведь единственный способ сделать ООП и в частности крестопарашу пригодными к продакшену.
>>877170 Ограничено в области пользовательского интрерфейса да. Да и там полная помойка, если код пишется не инструментом дизайна интерфейса, а ручками.
>>877652 А еще бекенды и фронтенды, да и серваки зачастую нагруженные. Что покрывает 70% всей области. Ну вообщем давай беги обратно в манямир, а то как узнаешь правду - ахуеешь и суициднешься.
>>877808 masterchan@ubuntu:~$ sudo apt-get install build-essential E: Не удалось получить доступ к файлу блокировки /var/lib/dpkg/lock - open (11: Ресурс временно недоступен) E: Не удалось выполнить блокировку управляющего каталога (/var/lib/dpkg/); он уже используется другим процессом?
>>878282 >хацкеры Лал. Местная петушня даже не знает, что инструкция mov полна по Тьюрингу. C++ не нужен, все можно реализовать через mov и индексные таблицы.
попробую еще здесь спросить отцы помогите тотал нюфагу вкатитсяможет что-нибудь получится в поставке clang++ из коробки я так понял нет стандартных библиотек, а в GCC:g++ есть. можно их как-нить с консолидировать чтоб и clang все появилось
>>878701 >>878687 >>878667 вроде разобрались, у него почему-то таргет с из начальной установки стоит на msvc библиотеки. когда меняешь ему таргеты эти он сразу начинает видеть все GCC инклуды и библиотеки. странно кароч.
>>878714 причем это как я понял по интернетам началось с последних версий, типо они специально вроде как компилят на msvs чтоб оно сразу работало на msvs, только не понятно как подключать clang к msvs.
>>878277 Хуй его знает что там с MinGW, меня на линупсе только CLion спасает. А вот, к слову говоря, в ебучей студии за дцать лет разработки так и не сделали ебучую линию переноса и ебаные стыдливые табы по дефолту стоят вместо пробелов. В 2013 студии MSVC не поддерживала дефолтные перемещающие операции, да и еще хуева туча косяков (касательно компилятора), а работать приходилось, потому что ебаная CUDA работала только с той версией.
>>878902 Посему, когда я в СВОЕЙ замене write вызываю p write с отличным размером count'а, все ломается и не хочет сохранять. Я хз, как фиксить, ибо и trancate'м менял размер файла, а толку 0
>>878915 Ну я создаю свою фс. Переписываю функцию, которая вызывается fuse'ом вместо системного вызова write. В мою функцию, помимо прочего, передаются указатель на массив char'ов, из которого пишем, и количество данных, которые пишем. В ней я выполняю некоторые действия над данными, а потом системной функцией pwrite записываю в файл. Проблема в том, что если в pwrite я передаю больший размер данных, чем в мою функцию, хз почему система не хочет сохранять файл. Пробовал в начале моей функции менять размер файла, но безуспешно. В итоге уже тут спрашиваю хз, пытался норм сформулировать
>>879091 на всех тестах было больше восьми суть не в этом. Хоть я наоборот увеличу size, хотя я до этого вызову ftruncate - результат тот же не сохраняет
Я тут уже вбрасывал код с прямым доступом к vtable. Известно, что виртуальные функции попадают в vtable в порядке их объявления в классе. Я определил деструктор первым и после него функцию. Но дёргать их через vtable я могу по 0-му и 2-му индексу. Если я пытаюсь вызвать функцию по первому индексу, код валится. Вот код http://ideone.com/hDGNjK #include <cstdio>
struct ass { virtual ~ass() { printf("%s with %p\n", __PRETTY_FUNCTION__, this); } virtual void f() { printf("%s with %p\n", __PRETTY_FUNCTION__, this); } };
int main() { ass ass; void pvtbl = reinterpret_cast<void>(&ass)[0];
Ребят, тут на днях решил поковырятся в исходниках одной дудосилки на плюсах, открыл такой - а там, сука, 1000 нативных тредов запускается, причем там вызывается функция с сокетами в блокирующем режиме... Это нормально у вас вообще?
>>880183 Насчёт того, что указатель на std::type_info лежит в vtable ты прав. Но он лежит по -1-му индексу. Неплохое наблюдение, но ответ неверный. Попробуй ещё.
Аноны, как прикрутить sqlite3 к консольному приложению (на win)? Что и куда положить? sqlite amalgamation скачал , динамическую библиотеку x86/x64 тоже.
Пользую MinGW в портабл режиме, на рабочем компе ничего ставить нельзя поэтому установка Visual Studio. Динамическая библиотека вроде должна быть совместима с gcc.
анон, что-то я туплю как написать функцию, которая заполняет поля структуры через scanf и как лучше эту функцию принимать, через указатель? http://pastebin.com/3ndaKRfH в VS выделяет book в сканфах и пишет expression must have a class type
Анон, есть одна программа для декрипта виженера. Нужно при помощи нее расшифровать индивидуальное задание, чтобы от меня отъеблись в вузе, и дальше идти писать ДНС-сервер для ботнета. http://pastebin.com/dpk0sr9f Не хочется вникать в эту ебанину.
Программу писала какая-то мразота, поэтому она падает в функции vector<int> dist(string &mask, string &text) на строчке vector<int> dist(index_number.size() - 1);, потому что вектор vector<int>index_number = index_entries(mask, text); оказывается нулевой длины. Хуле тут вообще не так? Сука, как пригораю от этого говна. Даже мои кодесы на винапи более портабельные, чем высеры мразей, которые это выкладывают.
>C++ Не может в управление памятью Не может в LALR грамматику Как следствие, не может в человеческий синтаксис Не может в денотационную семантику Не может в настоящие макросы (с темплейтами отсос - не могут в квазицитирование) Следствие - не может в человеческий полиморфизм (не говоря про higher-order), только убогое кодовысерание. Не может в referential transparency Linear typing
Зато может в: Нетипизированную еблю с указателями Аппликативный порядок УТЕЧКИ УТЕЧКИ УТЕЧКИ Зловонную кучу Стандартов не реализованных в полном объеме ни одним компилятором Стандарты наполовину состоящие из undefined behavior и implementation-defined Следовательно, миллиард практически не диагностируемых "приятных" неожиданностей.
>>881039 Ебаный в рот, что за тварь это писала? Когда у этой твари, у этой жопоногой падлы строки передавались через стэк, я везде понаставил ссылки, но, сука, теперь в одной из функций строка делается нулевой. Ааааа, какой дегенерат это писал.
>>880248 Ответ, кстати, легко гуглится. Все больше убеждаюсь, что умение писать правильные запросы к гуглу намного важнее для программиста, умения решать олимпиадные задачки
Да здравствует ОП,
Что принесет нам срачи новые
Горенье и баттхёрт:
В тиши и у камина,
Или в лесах, снегах,
В полете с снежных горок,
Или в мечтаньях, снах.
Коммитет слагает главы
Величеству стандарта,
Сиятельству плюсов,
Замерзших, нахуй, в легаси.
Майкрософт, звеня, раскинет
Корутин пейперы в стандарт.
И модулями всколышет
Замерзших фичей страх.
За крестовым причащеньем
Уйду один в стандарт,
Где спрятан след UB
И прошлого неловкие асинки.
И концептами поманит,
И сопрограммами, тот стандарт.
Что на белом свежем пейпере
Навсегда останется в сердцах.
Старший брат: https://2ch.hk/pr/res/856777.html
Предыдущий тред: https://2ch.hk/pr/res/840964.html
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-треды