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:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>>776265 Попытался вот так подобрать, но он в конце на двух значениях зацикливается и не может точнее подобрать строку. Какие ещё варианты есть? http://ideone.com/zyapfV
Для C++ есть нормальные фреймворки уровня Symphony, Django, Rails для веба, чтобы их еще кто-то использовал, ну и вообще экосистема для веб-разработки? Можно ли найти работу в таком направлении? Можно ли найти работу фрилансером или на удаленке? Или весь с++ - это обязательно пот, прыщи и поедание мозолей? Можно ли разрабатывать со скоростью, сравнимой с с#, java, python?
Посаны, от чего говно на пиерелейтед может происходить? Я просто в ахуе. maxabs это double если че. Пытаюсь написать LU-разложение, вот полный код http://pastebin.com/rMdPtG4j
>>776569 Тому что ты дубина стоеросовая. abs - это C-шный abs из <cstdlib>, который работает только с интами. Тебе нужно было fabs тогда использовать. А std::abs - это перегруженная функция из стандартной библиотеки C++.
Есть функции f(int&& n) и f(int n). Чем будет отличаться процесс "становления" n переданным числом при вызове f(4), например? Мне интересно, что просходит с четверкой в памяти. Она сначала где-то создается и потом копируется или же адрес переменной становится адресом этой созданной четверки?
>>776972 первая не очень-то и быстрая. да еще и платформо-зависимая. компилятор может очень хорошо оптимизировать ветвление, но с битовой операцией ничего не сделает.
Крестаны, а вы (ну или знакомые ваши какие по плюсам) участвуете в хакатонах? Вопрос не в вашей любви к хакатонам, а есть ли вообще хакатоны по плюсам или используются плюсы на общих каких-нибудь? не геймсджэмы
>>776542 В таких фреймворках для С++ нет большого смысла. Главная причина - как в забивании гвоздей микроскопом. Микроскоп (С++ разработчик) дорог, обращаться с ним надо аккуратно, дешевле нанять ораву джава-макак.
На С++ ядро бэкенда пишется когда надо очень быстро. В большинстве таких случаев нужно что-то очень конкретное, для конкретного применения - которому обязательно проиграет решение универсальное, так как инженерное искусство сводится к правильному выбору плюсов и минусов тех или иных решений, и бесплатно ничего не бывает.
Таких разнообразных специальных штук в индустрии достаточно много при этом. Но обычно их на гитхабы не выкладывают, и мало кому о них наружу рассказывают. nginx - одно из приятных исключений, хотя начинался именно таким образом.
Программач! Такой вопрос. Я изучаю с++, на руказ книга ООП-С++ Р. Лафоре. Вроде бы всё годно, поясняется и разбираются примеры, но я чувствую себя в подвешенном состоянии, потом что тулком не разобрался с массивами и классами, и с прочей мелочью что является так сказать "костяком". Шапку треда пролистал, схоронил что-то и на меднях почитаю, но всё же, если не обращаться к книге, какие основные вещи я должен знать чтобы понимать базу в целом? Просто собираюсь менять работу и ловлю себя на мыслях что если мне зададаут какой-то вопрос, я обосрусь. Какие часто задаваемые вопросы, на собеседовании, мне стоит разобрать? И какие вопросы задавали вам, допустим, уровень "джуниор"?
>>777862 По собственному опыту, в большинстве контор на собеседованиях дают примеры кода на листке А4 распечатанные и просят рассказать, что будет в результате их выполнения. Блять эти примеры настолько мутные, что если встретится в обычной разработке - автор данного говна подлежит мучительной смерти Как правило на наследование и тд. В одной конторе даже была классика i++ + ++i
>>777968 Это любому понятно. Но один и тот же цикл можно построить и с a[i++] и с a[++i]. И скорость будет разная из-за inter-dependency - процессор во втором случае не сможет так же эффективно распараллелить инкремент и доступ к памяти по указателю.
>>777981 На старом - одинаковые, потому что ни микроинструкций еще не было, ни микро-execution юнитов, ни умности процессора, который сам сейчас распараллеливает все что можно.
Нубовопрос: блок кода в лупе, она при каждой итерации "новый" или один и тот же? for (int i=0;;i++){ int z = 5; } В момент, когда i станет равно единице и начнётся новый проход, будет ли существовать z? Практически это ни на что не влияет, вроде бы, но интересно. (Ведь всё равно компилятор не даст использовать z до объявления, или именно потому и не даёт, что блок "новый"?)
>>778003 z будет создаваться и уничтожаться каждую итерацию. В случае с интом это не страшно, но с объектами так можно делать, только если на то есть причины.
Посоны, говно плюсо заебало сил нет. Ну какого хуя в 2016 я должен следить за тем чтобы каждая переменная была проинициализирована? В той же джаве при попытке использования неинициализированной переменной компилятор сразу посылает нахуй, а в классах по дефолту все инициализированно.
>>778148 У тебя несколько вариантов - использовать свитч или создать словарь "символ" - "операция". Операцию можешь сделать сам через классы или лямбды, либо использовать <functional>.
>>778338 Чтобы понимать работу с сетью читай канонического Стивенса. Чтобы понимать многопоточность - исходники скедулеров 1:N, N:N и на закуску M:N, но это тебе рано. Почитай dz - https://habrahabr.ru/post/282037/, он конечно ебнулся со своей фантомасией, но исходники классических юникосов читал еще когда тебя не зачали и в базовых вещах разбирается хорошо, и объясняет их понятно.
Напомните, почему я должен дрочить c++ года 2 для более-менее нормального ориентирования, если я могу за 2 месяца потеребить java и в итоге получать столько же? При этом без байтоебства/кучи правил и исключений из правил/когда не знаешь, сколько будет размер инта.
>>778438 Гораздо больше. Но нельзя же так лениться. Ты ведь сейчас попросишь ISBN, номера конкретных страниц, где скачать, и спросишь нет ли видео, а то читать скучно.
Очень хочется иногда побыть ближе к "железу" ПК, и максимально близко к работе с сетью. Взялся ещё за дискретную математику/алгоритмы/Куранта и Роббинса. В общем, хочу из обезьяны стать человеком.
Тут советовали выше Стивенса по сетям. Что скажете про Олифера - "Сети"?
Хочу что-то по архитектуре ПК, но не Таненбаума. Можно на английском. Желательно, чтобы книга дала базу, благодаря которой я смогу понимать ПРИНЦИП работы и смог самостоятельно читать и понимать, что такого в новеньком процессоре/видеокарте.
И по операционным системам реквестирую чего-нибудь.
>>776956 Первый уровень: Размер указателя. Пример наследования. Мол что и в какой последовательности сработает. Примеры кода. Нужно дать ответ что произойдёт. Обычно все вопросы очень простые.
Второй уровень: Включает в себя первый. Скорость поиска в листе, в векторе, в отсортированных. И прочее развлекалово базовыми вещами связанными с алгоритмами и структурами. Размер структуры. Тут соль в выравнивании. Ещё больше говнокода.
Третий уровень: Обычно всем похуй на первые два этапа. Может выборочно что-то спросят. Больше всего любят выравнивание. Нечто забавное, типа алгоритма одновременного лока двух мьютексов. Всё опирается на проекты, где участвовал и что мутил. Какие архитектурные решения выбирал и почему.
Тебе нужен самый первый уровень. Да и в большинстве случаев всем похуй на результаты. Если ты джун, то твоя САМАЯ сильная сторона - умение решать проблемы самому.
>>778505 Жестковато - это если бы тебя послали учиться не на книжках для старшеклассников средней умности, где грубые и упрощенные модели разжеваны до максимума на понятных примерах их реализации в простых как валенок системах уровня BSD 4.3, а послали бы изучать что-нибудь стоящее и работающее в реальной жизни - например, о многозадачности посоветовали бы понять как это работает в современенном оракле - и исследовать стетоскопом потому больше туда ничем не влезешь.
>>778515 >Я хотел подрочить нижний уровень чтобы как глубже ПОНИМАТЬ многопоточность и работу с сетью как таковую. >нижний уровень >глубже ПОНИМАТЬ >многопоточность
Бинарное дерево и запись его в файл. Написал метод для реализации этой нехитрой задачи, но по итогам в файле остается только самый последний элемент. В упор не вижу решения проблемы, помогите. Вот, собственно, сам метод, без дерева (там всё довольно стандартно).
Тупой вопрос. Решил перекатиться на Qt, однако есть пиздецкое опасение, что программы, сделанные на нём, будут требовать каких-нибудь экзотических библиотек для своей работы, которых у обычного пользователя может и не быть, и потому не хотелось бы обосраться при демонстрации новой вундервафли научнику/НАЧАЛЬНИКУ. Нужны ли для работы этого говна конечному пользователю всякие хитровыебанные библиотеки?
>>778787 Не читал книжку с хабры, но если она, как написано, дополняет Паттерсона и Хеннесси то лучше ее и читай сразу. Два раза читать одно и тоже бестолку, там довольно много схемотехники.
>>778830 Теорию автоматов не надо, она сцуко сложная, хотя сам конечный автомат штука простая. Теория тебе может потребоваться только для таких нишевых занятий как разработка (а не использование) тулз для верификации программ и последующего сброса фрустраций путем травли хаскелистов и иже с ними, считающих что типы на что-то годны. Конечные автоматы надо понимать и уметь строить (когда надо) и использовать (когда надо). В TCP Illustrated с автоматом состояний TCP разберись, с использованием epoll или IOCP программок понапиши.
Электротехника нужна если что-то паять собрался - но это проще аутсорснуть. Вот иметь некоторое представление о программировании FPGA, например - это полезно.
>>779040 В с++11 больше фич, чем в обычном с++ (он же с++98 или с++03). В с++14 еще больше фич, чем в с++11, разница между с++11 и с++98 намного больше, чем между с++11 и с++14. Поэтому на твой выбор.
>>779117 Ты слепой бля? Ты хоть что-то пробуешь сам сделать? Или зовёшь Сычева-компьютерщика, когда у тебя иконка скайпа с рабочего стола пропадает? Ты как работать собрался? OTHER COMPILER OPTIONS
>>779230 Без особого труда можно на constexpr-машине сделать, чтобы внутри лямбды был известен тип, которому она присваивается. Если интересно, в понедельник могу показать в общих чертах.
Почему в С++ не советуют делать абстрактные классы, содержащие собственные члены? Аргументация строится на том, что, мол, придется вызывать конструктор родителя. И в чем проблема? Что на джаве, что на пхп это нормальная практика.
Например, что плохого в:
class A { int a, b;
public: A(int a, int b) : a(a), b(b) {} virtual void f() = 0; };
class B : public A { int c, d;
public: B(int a, int b, int c, int d) : A(a, b), c(c), d(d) {} };
class C : public B { public: C(int a, int b, int c, int d) : B(a, b, c, d) {} void f() {} };
>>779336 1) В том, что тебе придётся вызывать всю эту иерархию. В жавах/пхп тормозов и без того хватает. 2) Как думаешь, почему абстрактные классы так же называют интерфейсами? Потому что это затычка с методами, не больше.
Если тебе похуй на это и вопрос о перформансе до миллисекунд не стоит – пиши так, чо.
1) Зачем вообще есть возможность определять функцию не член в пределах определения класса? 2) Почему это я должен еще и объявлять её в outer scope? 3) Почему в этом языке повсюду вот такой пиздец?
Объясните, почему сохраненное значение станет неверным? Итераторы - это же просто указатели. End сохранен и не меняется, если вектор увеличивается, то первые элементы до end() остаются на своих местах, у них те же самые адреса, поэтому условие begin() == end() станет ложным.
If the new size() is greater than capacity() then all iterators and references (including the past-the-end iterator) are invalidated. Otherwise only the past-the-end iterator is invalidated.
>>779520 Некоторые контейнеры под свои элементы выделяют память. Если такому не хватает чтоб запихнуть значение, то он старую удаляет, и выделяет новый участок, побольше раза в два. Новый участок может располагаться совсем в другом месте.
>>776344 (OP) Пытаюсь рисовать кое-что на Qt, наследуюсь от QGraphicsView, делаю override paintEvent, вызываю в нем paintEvent базового класса и кое-что свое. Проблема в том, что paintEvent вызывется, но то, что в нем написано не рисуется. Точнее рисуется, но при каких-то очень конкретных случаях.
>>780453 >И как сделать так, чтобы обычный автокомплит работал не через раз? Взять нормальную IDE/прописать пути хидеров руками если есть такая возможность.
>>779391 1. Самое очевидное применение - когда тебе нужно, скажем, реализовать +, чтобы было можно писать и mamka+1, и 1+mamka. Ты не можешь сделать operator+ встроенным, потому что тогда левым операндом будет допустима только мамка. Если определишь снаружи, то увеличится связанность - хуй пойми кто, не имеющий отношения к мамке, сможет вызвать твой оператор, а когда ты поменяешь что-нибудь в мамке, то ты можешь забыть изменить и этот оператор, ибо его текст где-то в другом месте и без ссылок на мамок в общем случае. Делая friend-определение, ты убиваешь сразу двух зайцев: текст твоего стороннего оператора фактически все равно внутри класса, а вызвать его можно только через поиск Кенига, когда один из аргументов будет мамкой, поэтому он не сможет вступить в конфликт с какими-то другими операторами (особенно актуально для шаблонов). Есть и другие сценарии, например, гугли "неконстантные константные выражения". 2. Ты не должен объявлять, она сама неявно объявится, но найдется только через поиск Кенига. Если тебе понадобилось ее объявить, то тебе и не нужно friend-определение тогда, ибо ты все профиты потеряешь. 3. Потому что тебе дали вместо молотка ящик с инструментами, и ты платишь необходимостью изучать сценарии их использования за гибкость.
Ананасы, пытаюсь запустить кое-какой проект в Qt, но вылезает рантайм ошибка. Дебагер дошел до хэдера "stl_vector.h", operator[]. Не могу понять, что не так?
Аноны, вот создаю я чистый проект в visual studio. Создаю там main.cpp, определяю void main() {}. Делаю include <iostream> - и у меня 500 ошибок при компиляции. Правильно ли я понимаю, что <iostream> - это фактически хедер к библиотеке? И нужно еще как-то подключить уже скомпилированную библиотеку?
Ебаный в рот, как пользоваться отладчиком в QT Creator? Когда ставлю точку останова и запускаю отладку, почему-то программа вместо пошагового выполнения приходит сразу к концу и печатает ответ. А ебаная студия вообще перестала отображать значения переменных и их изменение и к тому же отображает не все переменные. Посоветуйте отладчик, а то все какое-то ебаное говно кроме олли дебагера. Но мне сейчас нужен не такой низкий уровень.
>>780591 Пишет fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory Погуглил - говорят баг студии, неправильные пути. За что этим уебкам только платят по 150к$.
>>780612 Нет, конечно. Проблема не только у меня. В студийном батнике определены неправильные пути к ucrt (C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt\). Сейчас буду думать как менее костыльно пофиксить. Еще ставил ее 8 часов с тремя ребутами. 2 раза делал repair, сукпздц.
>>780643 С рутрекера оригинальный msdn-образ прошки с зашитым ключом. После установки вылезла ошибка, что не получилось накатить Update 2. Полез на оф. сайт, попробовал iso- и web-версии, делал repair. Кое-как до рабочего состояния довел. В общем, наебался знатно. Когда гуглил ошибки, ебанаты с саппорта советовали "ставить на чистую систему", лел. То есть я должен переустановить винду, чтобы поставить ide? По сравнению с JetBrains IDEA, которая ставится за 3 минуты и работает идеально, это просто ад. Пожелал рака жопы детям разработчиков.
>>780672 Попробуй снести текущую среду и дотнет, а потом установить официальную комюнити 2015, все должно работать если ты совсем не ушатал все. На крайний случай можешь обмазатся Embarcadero Rad хуемое
>>780672 Ты какое-то тупое уёбище, качаешь IDE, ставшую бесплатной (платная только для крупных ынтерпрайзов и отличается интеграцией с йоба-сервисами мса) и ещё жалуешься на хуёвую работу. Почему я использую её начиная с 2008-й версии и не разу не ебался с установкой?
>>780682 Еще часов 5 тратить просто нереально. Плюс я уже нашел решение. В макросах прописана версия ucrt 10240, а у меня стоит 10150. Попробую обновиться.
>>780672 >То есть я должен переустановить винду, чтобы поставить ide? Да. Это спермоособенности разработки. Советую удалить все компоненты .net из систему, все c++ redistributable и попробовать снова. Все кто хвалят установщик студии итт спермохлебы.
>>780689 В том что я не жалуюсь на пердолинг, который сделал себе сам скачав хуиту с рутрекера. >>780696 Так там никаких аналогов нормальной фс и менеджера пакетов нету, щито поделать.
Сижу себе, пишу прогу на Qt. Добавил новый код, работает. Добавил еще - рантайм ошибка. Включаю дебаггер, а он мне указывает на код, который до этого работал. Никаким образом новый код не мог повлиять на него. Ну че за хуйня, а?
>>780721 Пытаюсь найти баг, кстати, уже третий день. Самое худшее то, что спросить некого - никакой психически здоровый человек не будет дебажить мой проект за просто так.
супец братья. хочу подписать/портировать на цпп под андройд свои ништяки. слышал о ндк. и это все что я о ней слышал дайт гайд по еклипсу как отстроить его в андроидцпп или основы работы с ндк за 15 минут.
>>781111 >>781010 Ну, с таким я еще не сталкивался. Потом тогда сделаю. У меня была только 1 мысль - в стринги писать числа, а потом сравнивать их. Но тут двузначные числа уже не подойдут, поэтому пока отброшу эту задачку.
>>781323 >очень легкая концепция template <typename T> void f (T); template <> void f <int> (int); void f (int); void f (signed); void f (const int); void f (int) noexcept; [[deprecated]] void f (int); Одно только разъяснение нубу, как и почему будет разрешаться для этих объявлений перегрузка f (1), займет несколько дней. И это только самое очевидное.
>>781539 В смысле? А как ты собираешься привести объект к bool без помощи явно указанного оператора? По-моему, все очевидно. Если ты не знаешь фишки языка, то это уже твои проблемы. Иди пиши на брейнфаке, там все предельно ясно.
>>781549 Нет, не очевидно. Надо убрать в принципе все случаи неявной хуйни, пусть java этим занимается. Если не знать о таких случаях, то как дебажить вот это?
>>781402 Я прочитал Страуструпа в свое время на каникулах примерно за две недели. Но тогда я был не совсем нуб уже, так что, вероятно, нужно исходить примерно из месяца. А без нормального знания ангельского и того больше, ибо русское издание есть дрисня, которую невозможно читать.
>>781513 Да ты охуел, что ты несешь вообще? >>781532 Не во всех. Есть несколько явно описанных контекстов (условия циклов и if, static_assert и еще что-то), в которых происходит т.н. контекстуальное преобразование в bool. Оно легально даже если ты сделаешь explicit оператор преобразования, ибо формализуется так: если корректно написать bool foo (выражение), то конверсия из выражения нормально пройдет, с соответствующим результатом. Сделано такое для удобства - когда ты пишешь выражение в условии, то никакой арифметики рядом нет, поэтому запутаться трудно и неявность только помогает.
Сап, аноны, посоветуйте хороший сборник библиотек по математике на завтра. Нужен МАКСИМАЛЬНО полный до завтра, а то меня в гугле забанили. Ну и заранее спасибо.
Cап, посоны. Недавно начал учить Кьют, решил сделать видеоплеер. Вопрос не по нему, а по самой структуре проги: как считаете, юзать Qt Designer и переносить слоты для созданных там кнопок в MainWindow - зашквар? Если нет, то можно ли все кнопки кидать в MainWindow или разумнее сделать разделение по классам?
>>781337 Добавь сюда type promotion и narrowing и настанет "enjoy your cpp". Вообще, это дрисня на мой взгляд. Надо добавить ключ компилятора, который нахуй отключает всю эту overloading resolution поеботу, оставляя только exact match rule. Все равно в реальном коде этой "удобной" сранью никто не пользуется. По-хорошему еще и implicit type convertion нужно выпилить целиком нахуй, оставив только bool contexted
Господа, два вопросика: Qt без его покупки позволяет собрать в динамические библиотеки не весь код, а только используемые классы и их зависимости? Если да, то как? Ну, чтобы helloworld не весил мегабайты. И другой вопрос: с C++ вообще реально устроиться на удаленку/во фриланс, пойти там в какую-нибудь компанию писать энтерпрайзный код, бэкенд к каким-нибудь современным веб-приложениям, еще чему-то такому? Или какие перспективы вообще?
>>781850 http://doc.qt.io/qt-5/build-sources.html - вся информация что и как собирать, однако насколько я помню ещё в 4-й куте меньше 4 мб даже вырезав всё получить было нельзя. Алсо, есть различные компрессоры/пакеры.
Можно, но только если у тебя есть хороший опыт – это обязательно в любой удалёнке, тем более в плюсах. Фриланс – нет. Хотя изредка на апворке бывают заказы на гуйню, но едва ли так можно более менее зарабатывать.
Перспективы – хайлоад, различный риалтайм (вроде игрушек и компуктерного зрения), низкоуровенные библиотеки, иногда десктоп и, конечно же, поддержка легаси вот уж где работа никогда не закончится.
>>776344 (OP) Такое дело, я студент-инженер, специальность: "электроника и автоматика физических установок". У нас на первом курсе был С и С++, с достаточно слабыми лекциями и зачеты просто так проставили. Вот сейчас я понял, что если что и знал по С++, то забыл. Но зато впереди есть 2 летних месяца и у меня возникла идея подучить кресты, точнее я выбираю как бы продуктивнее провести время. По специальности, как я понял, я буду сталкиваться с микроконтроллерами, электронными схемами, если честно не особо представляю суть работы. Собственно вопрос, насколько инженеру-электронщику актуален С++, на каком уровне желательно его знать, на что стоит обратить внимание? Понимаю, что речь не идет о том, чтобы стать нормальным программистом за 2 месяца, только выучить основы для дальнейшего развития. Может имеет смысл ограничиться языком С или посмотреть в сторону питона, скажем?
>>781850 в HFT активно берут на удаленку. и даже парт тайм. так что можно в несколько контор устроиться. но там требуют очень хороший уровень + знания трейдинга
>>781795 Тащемта, это легко сделать. Пишешь шаблонную обертку, перегружаешь все операторы строго для однотипных операндов, преобразования не реализуешь. И заменяешь везде int на Wrapper <int> etc. Из-за инлайновости никакой деградации не будет, текста прибавится ровно на джва символа для каждого литерала, если использовать auto и пользовательские литералы, которые по 1_w будут генерировать такие обертки.
>>782137 Я не силен в WinApi, но рискну предположить, что специально заточенный под ожидание вызов оптимизирован до минимизации фоновой нагрузки на этот поток. Так что норм, по идее.
>>782302 Стандарт не гарантирует, что стрелочки и прочая хуйня влезут в char, они не из базового набора. Поэтому ты получаешь implementation defined работу с консолью, и студия не обязана, вообще говоря, даже сохранять поведение в разных версиях, не говоря уже о совместимости с *nix.
>>782308 Прочел что "При чтении функциональной клавиши или клавиши со стрелкой каждая функция должна вызываться дважды" Видимо в этом и загвоздка. Вопрос, как мне быть в данном случае?
Делаю что-то вроде ежедневника в Qt. Нужно сохранять и считывать текстовые данные из файла. fstream ведь не подойдет, да? Нужно будет считывать и записывать данные в определенном заголовке (позиции), и этот самый поиск нужного заголовка, как я понимаю, будет занимать достаточное кол-во времени. Есть какие-нибудь либы?
Аноны, хочу поставить VS 2015, но установщик выдаёт сообщение "Для указанной программы требуется более поздняя версия windows". Неужели на семёрку не ставится?
Какую книгу почитать, чтобы начать понимать и оперировать шаблонами с большей уверенностью чем с базовыми знаниями после прочтения страуструпа/липпмана/статей на cppreference? Таки А.Александреску?
>>782609 Разве что если хочешь бесцельно вымазываться шаблонами ради шаблонов. В остальных ситуациях любая из перечисленных тобой книжек даёт знния для 99% жизненных случаев.
>>782612 Александреска в том числе? Хочу блять наконец-то не только понимать как работают enable_if и прочая муть, а и понимать, когда это полезно использовать. Чтобы метапрограммирование и SFINAE не были для меня умными словами из википедии.
>>782609 Бля, ну в шапке же все написано. Вандевурд-Джоссатис - для понимания механизма и обхода подводных камней. Александреску - для применения в проектировании. Абрахамс-Гуртовой - для метапрограммирования.
>>782640 > Любишь бэкдоры? а как будто семёрка не дырявая? и как будто вместе с обновлениями для неё нельзя притащить всё тоже самое говно, что есть на десятке? лоллирую просто с тебя
>>782643 > и как будто вместе с обновлениями для неё нельзя притащить всё тоже самое говно, что есть на десятке? У даунов с автоматической установкой обновлений - можно. Остальные смотрят описание обновлений в MSDN и выбирают, что ставить.
>>782643 А кого ебут потенциальные возможности? Факт, что десятка была уличена в посылании телеметрии, а с семеркой прецедентов не было. Если будут - придется валить и с нее, а пока выбор для меня очевиден. Алсо, телеметрия это еще хуйня, а вот та же пиратская студия на десятке может внезапно выпилиться вместе с игорами, в рамках борьбы с пиратством.
Хелп, анон. Плюсы учу давно, вроде бы кое-что знаю уже. Решил посмотреть, что за такая популярная вещь Qt. Где можно почитать нормальные гайды по этой теме? Документацию открывал, но она такая обширная, что прочитать ее всю возможным не представляется. Там есть визуальная среда разработки, как в Borland Builder(возможность размещать кнопочки, поля ввода, итд)? И есть ли там возможность писать программы с эффектами(как например в ворде 13, там все плавно переходит)? А то в Builderе UI получается грубоватый и без всяких красивых эффектов, которые есть в современных программах.
>>782701 Плагины только для полной версии, не? И еще что-то было, типа code coverage. Так-то я никогда бесплатной не пользовался, у меня честная Enterprise.
>>781916 Ну а автоматика, там же по-любому программировать на чем то надо? Или расчет в matlab-е, а потом на типовых элементах собирать схему? >>782631 Nemnozko
>>782923 Ты не понял вопроса. Я спрашиваю не "почему я не могу", а "ЗА ЧТО, СУКА!" Почему бы не запретить это компулятором? Просто это не безопасно, лезть в память, которая уже свободна. Я себе пару раз стрельнул в ногу.
Хай. В следующем семестре курсовая и тема - обработка звука. Нужно записывать, резать, сшивать звуковые дорожки и всячески их редактировать на свое усмотрение. Сейчас хочу определиться с библиотекой(ми). Думаю о DirectSound. Что можете о ней сказать? В общем прошу советов и чтива на лето по этой теме.
>>782962 сначала нужен парсер, который будет определять что вообще пользователь пишет. на этом моменте проектируешь синтаксис языка. потом компилятор/интерпритатор, который пропарсенный код будет переводить в инструкции для процессора/промежуточный байт-код. тут вообще пиздец. простой компилятор ты может и напишешь, но на то, чтобы написать хороший компилятор, который по качеству сравниться с clang-ом, у тебя уйдет уйма времени.
>>783052 >но на то, чтобы написать хороший компилятор, который по качеству сравниться с clang-ом, у тебя уйдет уйма времени Если ты знаешь асм и есть опыт, то транслятор из ssa с оптимизациями вроде DCE, CSE можно написать за пару месяцев. Это уже будет около O1 по скорости.
>>782962 Без проблем. Это очень просто, на самом деле. Бери forth - это очень минималистичный стековый язык. Простой интерпретатор напишешь за неделю, если вообще без опыта. Если хочешь писать компилятор - бери llvm. Там все несложно, при этом получишь быстрый нативный код со всеми оптимизациями и минимумом усилий.
>>780571 Не понял, я не тот чувак, которому ты отвечал, объясни. Я думал системы есть х32 и х64? Соотв. указатели имеют по 32 и 64 бита размеры. Что за х86? Объясни дауну, пожалуйста.
А еще всегда можно узнать размер указателя вот так: type *p; int x = sizeof p; Я прав?
>>783180 x86 это и есть то, что ты подразумеваешь под x32. Погугли, бывают еще 8-битные, 16-битные, 128-битные и вообще любые процессоры. Можно и так, как ты написал, а можно вообще через sizeof(void*).
>>783188 i++ + ++i - это undefined behaviour, поэтому его лучше не использовать в коде.
>>778009 а вопрос еще: какой области видимости будет принадлежать i, если я его запишу так: { / внешний блок/ for (int i = 0; i<10;i++) { /внутренний блок/ } }
Я вроде писал такой примерчик, скорее ответ будет такой: переменная i будет видна только во внутреннем блоке, однако, почему так происходит? В K&R говорится, что цикл for (int i = 0; i<10;i++) эквивалентен такому циклу int i = 0; while (i<10) { /инструкции/ i++ } тогда получается, что переменная должна быть видна и во внешнем блоке. Пожалуйста, помогите разобраться
>>783194 Еще хотел спросить, как лучше прохавать си и си++, я читал книжки и т. д., но сам понимаешь, после них остается много пробелов. Читать стандарт? Есть ли он на русском? Если нет, где мне его взять хотя бы на иглише?
>>783200 В Си вообще нельзя объявлять переменную в инициализаторе цикла (по крайней мере, в C89). Т.о. ты там можешь писать только первый вариант. В крестах второй вариант эквивалентен первому с дополнительным наружным блоком (не считая мелких нюансов с break и continue) - {int x = 1; for (...) {...}}.
>>782925 Вызывать статические методы безопасно, ибо им вообще не нужен объект. Вызывать нестатические методы небезопасно, но нет способа быстро проверить в рантайме, указывает ли ptr на валидный объект, когда ты пишешь ptr->tvoyaMamka (). Представь, сейчас у тебя нет оверхеда, хранится 4 байта с указателем, и от тебя требуется лишь немного внимательности (или использование unique_ptr, где такой проблемы вообще нет). Если пытаться контролировать корректность, на каждый указатель будет дохуя дополнительных данных, а на каждое разыменование - куча проверок, вместо одной инструкции станет, например, тысяча. В быстром языке это неприемлемо.
>>783358 Лень ждать пока ты спросишь почему поэтому щас объясню. На этапе компиляции это сделать нельзя т.к. выделение и удаление памяти происходит во время работы программы. Значит это можно делать только с помощью сборщика мусора и компилятор не может этого запретить.
>>783393 Что объяснять-то? Ты о вещах вроде ARC и концепции растовских лайфтаймов хоть слышал, дурашка? Нахуй ты пишешь что-то о расте, когда у тебя о нём представление уровня "ну эт такая хуитка хз чо ваще делает"?
Почему QTextStream не наследовали от ostream? Если я хочу чтобы мой класс можно было выводить и через cout, и в какой нибудь Qt-ишный файл, мне нужно два раза operator<< определять?
При помощи malloc выделяю память размером A байт. Создаю три массива, которые занимают B, C, D байт. Можно ли в выделенную память последовательно добавить информацию массивов, чтобы в ней они располагалить: A = B C D. Массивы имеют один тип данных, сумма точно совпадает.
>>783355 >Очевидно, как в расте Раст не запрещает тебе произвольно лазать по памяти внутри unsafe, так же как С++ не заставляет тебя использовать сырые указатели вместо автоматических. Не можешь организовать работу с памятью вручную - используй автоматические средства.
>>784032 Наверно то, что он считает ссылки во время компиляции? >>784064 Зато он ткнёт тебя носом вне ансейфа в это место, что и хотел тот антоша, и его модель памяти не несёт оверхеда в отличие от смартпоинтеров.
С++ куны, у меня есть три дня,чтобы максимально больше получить знаний по плюсам,на что лучше время потратить - какие-то курсы смотреть,курить книгу или курить сайтофорумы?
>>784157 лабы в универе(реализация всяких алгоритмов в основном,пара проектов - типо натягивания выпуклых оболочек),использовал лишь стандартные библиотеки.
>>781762 Не зашквар. Главное в обработчиках кнопок не пиши основной код и называй кнопки нормально. >>783930 QML нужен, если хочешь быстро нарисовать сложный плоский интерфейс. Есть биндинги. Любой объект можно расширять дополнительными данными прямо в коде. А сложную логику можешь писать на с++, связав QML и C++.
>>784160 Имхо, тогда лучше поучиться на практике. Сделай либо как можно больше тривиальных задач, либо несколько средних/сложных с пика, например. По книге тоже нормально. Есть "Tour of C++" Страуструпа. Там как раз беглый осмотр всего языка. Тонкости языка - "The C++ Programming Language" того же Страуструпа. Только ищи 4th edition.
>>784185 Японскую речь без переводчика не могу,есть узнавание некоторых фраз,простые предложения могу строить,в стиле- "я люблю бухать,как дойти до ближайшего ларька". около 130 иероглифов знаю, это где-то уровень 2го-3го класса ихней школы. Зимой поеду экзамены сдавать. Много лулзов в языке.
>>784190 Тоже учу иероглифы, только корейские. Хочу туда в универ, когда с колледжа корку заберу. Эх, поехал бы в Японию, если бы деньги были. Удачи тебе, хули.
>>784421 При нормальной архитектуре не бывает. Достаточно соблюдать правило единственного владельца и следить, чтобы его время жизни было шире, чем у юзеров.
>>784363 RAII работает как анус твоей мамаши держит говно – при любом исключении и пр. говно течёт. Смартпоинтеры тяжелее unique_ptr в области где применяются плюсы – смишно.
>>784432 >соблюдать Этим всё сказано. Либо у тебя компилятор-фашыст, либо ты будешь батрачить как коммунист если какая-то мелочь вылетит из головы.
>>784437 Ну, все правильно. Элитариям, способным запомнить пару правил - кресты, необучаемым макакам - языки с анальными ограничениями. >К чему стадам дары свободы? >Их должно резать или стричь
>>784440 Ну мань, мы уже поняли что ты нихуя в жизни не написал, у тебя не бывает легаси/сторонних библиотек с исп. исключениями и самрое главное – код всегда идеален – ты же круче робота и никогда даже ни на что не отвлекаешься (не забываешь разыменовать указатель добавив звёздочку, отвечая комраду например).
>>784467 >забываешь разыменовать указатель И компилятор такой вместо того, чтобы сообщить о несоответствии типов, злорадно отправляет отчет парням из WG21, те бросают обсуждение нового стандарта, летят через полмира, врываются в твою сычевальню и долго ебут тебя в сраку?
>>784487 Потому что их специально и очень тщательно ищут. То, что раст дает тебе некоторую гарантию внутренней непротиворечивости программы, не означает, что она не развалится от специально подобранных невалидных данных.
>>784605 >Он мне даёт даёт гарантии Ну круто. Ада тоже неплоха в этом плане. Но если ты браузер не пишешь, и твое хобби не медитация над выхлопом тайпчекера за тарелочкой борща, то тебе в общем похуй на 100% корректность, главное чтобы падало не чаще некоторого предела. Чего очень легко добиться имеющимися инструментами вроде валгринда и линтеров. В расте лично мне гораздо интереснее нормальные макросы, чем линейные типы.
>>784487 У меня за джва года с прикрученным vld не было ни одной утечки. А переполнения буфера не было вообще никогда, по той простой причине, что в крестах никто не велосипедит фиксированные буферы. Можешь включать врети-режим.
>>784490 Не увидел там ничего, кроме традиционной для мамкиных евангелистов борьбы с мельницами. Берется какая-то фича языка, показывается, как ее можно использовать неправильно, затем показывается, как можно сделать в рекламируемом языке то же самое лучше. А пацаны-то не знали! Самое вкусное начинается, когда встречаются джва евангелиста и начинают кормить говном друг друга при помощи этой тактики.
1. Поясните, зачем нужен std::deque, если есть другие контейнеры, например std::vector. Дело только в оптимизации (типо легко добавлять в начало)? 2. Где взять код, который за меня решит какой контейнер использовать в различных ситуациях? 3. Чем отличается value и default initialization? 4. Почему в STL нет контейнеров типа деревьев?
>>784733 >Поясните, зачем нужен std::deque, если есть другие контейнеры, например std::vector Дек сохраняет указатели на элементы после ресайза, вектор - нет. Правда с учетом того, что размер бакета там неизменен с 80-х, порядка десятков байт, проще запилить свой дек, который будет забирать память страницами.
>>784733 1) Там где нужен такой формат данных; 2) Нигде. Нахуй ты такому коду вообще нужен был бы? Где-то были пикчи с алгоритмом выбора контейнера, поищи; 3) Перевести попробуй; 4) Есть.
>>784712 Так ты, вась, нихуя похоже не понел. Суть даже не в том, что именно этот код падает, а в том, сколько нужно знать о костылях языка чтобы написать даже такую банальщину без сегфолта.
>>784743 >Правда с учетом того, что размер бакета там неизменен с 80-х, порядка десятков байт, проще запилить свой дек, который будет забирать память страницами Мать, ты чего? Да одних реализаций stdlib существует под 5 штук и чо, везде так, ты думаешь? Нихуя.
>>784733 1. По факту есть три неуправляемых (т.е. не в виде сложных структур типа RB-trees) контейнера - vector (быстрый доступ, медленное добавление), list (медленный доступ, быстрое добавление) и deque (фактически list из нескольких vector, средний по обоим пунктам). Все остальные контейнеры - либо обертки над ними (queue, stack), либо небольшие модификации (forward_list). Добавление нужно в среднем реже, чем доступ, поэтому vector рекомендуется по дефолту, но есть места, где deque лучше (например, тот же queue, для которого vector вообще не годится из-за добавления в начало, а list плох, вероятно, из-за недружелюбности по кэшу, ибо часто в очередь добавляют и забирают элементы сразу пачками). 2. https://habrahabr.ru/company/infopulse/blog/194726/ . Код будет, когда к компилятору прикрутят полноценный AI, лол. 3. Основные отличия синтаксические, связанные с неоднозначностью парсинга объявлений функций и определений переменных с инициализаторами (про это в стандарте написано очень хорошо, в пунктах 8.2 и 6.8). С точки зрения использования - для пользовательских классов разницы нет, для встроенных типов default оставит переменную неинициализированной, но только если она имеет не static duration (включая thread_local). Неинициализированную нельзя читать до первой записи, если не хочешь получить UB. 4. Стандарт не регламентирует реализацию контейнеров, только интерфейс и алгоритмическую сложность методов. По факту деревьями реализуются все ..._set и ..._map. Прямой интерфейс дерева (x.left (), x.right ()...) слишком низкоуровневый для STL, обычно ты все равно пишешь обертку, чтобы оно балансировалось автоматически.
>>784765 Если не прочитать инструкцию по использованию бензопилы, можно взять ее неправильным хватом и отпилить себе голову. Поэтому мы будем валить лес затупленной ножовкой, это точно безопасно.
>>784733 в deque есть push_front. vector ГАРАНТИРОВАННО распологает элементы последовательно в памяти. То есть он может использоваться массив. deque НЕ ГАРАНТИРУЕТ последовательное расположение в памяти. Так же deque распологает элементы блоками.
>>784763 >А разве не предусмотрено изменения гранулярности В стандартной либе - нет. Правда сделать нужную гранулярность аллокатором - не проблема. >>784767 >везде так, ты думаешь На основных еще 5 лет назад так было, у МС до сих пор 32 элемента на чанк.
>>785385 >>785378 хули вы как нелюди, уебки блядь. нахуй мне всю эту дичь читать, когда 90% я уже знаю и лишь посмотреть разницу между языками правда же говорят, что плюсаны хуже червя пидора
>>785421 >90% знаю Попробуй cppquiz из конца шапки, маня. Для джаваблядка даже 9% правильных ответов будет подвигом.
Приложение для игры. Как решить эти проблемы?Аноним01/07/16 Птн 20:36:19#436№785460
Хочу создать приложение для игры, чтобы показывало данные из неё в компактном виде.
Выбрал я для него win32API в MS Visual C++. Но столкнулся с несколькими проблемами, как их решить?
1) Показ поверх окна игры в полноэкранном режиме. [code]SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);[/code] Помогает лишь с приложениями неполноэкранных. При заходе в игру - скрывается под ней. Как исправить? (чтобы в этом плане как окна Steam)
Это прямо звиздец как надо, иначе от приложения никакого профита не будет. Мб как-то привязать к конкретной игре можно? (джов мод там все дела) ========= 2) Собственно, как можно "вылавливать" информацию из онлайн игры программно? Например, если я хочу, чтобы здоровье персонажа отображалось в моём приложении
Здравствуй, Анон. Подскажи каким образом можно создать структуру данных с массивом внутри, причём чтобы в той области памяти, куда указывает структура хранился не указатель на массив данных, а непосредственно данные? Ну и естественно не только массив данных я туда хочу поместить. В общем нужен способ легко работать с данными, но при этом чтобы они хранились в памяти рядом и с них таким образом можно было легко снять хэш. Можно наверное было бы выделить память и перемещаться по ней используя адресную арифметику и приведения к другим типам. Или это зашквар? Есть способы лучше?
>>785602 >>785268 >>785292 Так это всё подтверждение слов крестофанатика выше: другие языки не нужны. Можно толочь говно костылями, проходить cppquiz в лучшем случае на 10% и сидеть пиздеть что кресты – единственный нужный язык.
А что вы скажете о темплейтах, а точнее даже о частом использовании оверлоадинга, всех этих "специализаций", плюс наличии ещё и нетемплейтных вариантов и т.д.? Вроде теоретически всё понятно, но надо ли стремиться самому делать 38 функций с одним и тем же названием? Пишут так вообще, или нормальный чужой код можно понять без необходимости сидеть и думать, какая же из них требует наименьшего количества конвертаций типов? (Особенно когда есть поинтер и не поинтер версии, которые обе могут подойти). Во встраиваемых системах, если область применения что-то решает.
>>785704 > А что вы скажете о темплейтах, а точнее даже о частом использовании оверлоадинга, всех этих "специализаций", плюс наличии ещё и нетемплейтных вариантов и т.д.? Ну а как ты будешь делать какие-то структуры данных без темплейтов?
>>785731 >Для любого реалтайм/хуйлоад софта и пр. замена уже давно есть Почему же ее не используют? >компилятор под все платформы не беда - ллвм поможет Под винмобайл, например, уже появился?
>>785735 >Почему же ее не используют? В основном, легаси. >Под винмобайл, например, уже появился? Ух блять. Обычно тралят экзотическими китайскими мк, но тут у нас что-то пожоще. Нет, и не будет под это мёртвое говно.
>>785761 Это легасиговнище – никому не всралось переписывать готовые движки, которые начинали писать десять+ лет назад.
Конечно ты правильно думал – привёл легасипример, причём никому нахуй не нужный. Хоть бы бохатый эмбдед который делается на хуитках вроде Qt Embedded – там да, нет альтернатив.
>>785786 >У раста всё нормально с армом, не проблема абсолютно Под винфон можно конпилировать только МС тулзами, а там поддержку раста как-то не завезли еще.
>>785817 Всегда есть языконезависмый QML. >>785822 Лол, так даже эпл не выёбывается. Ну, уже похуй – платформа мертва. >>785823 Ну да, там нету толпы нюфагов с вопросом как запустить компиляцию (где там та пикча?).
Все написано аналогично примеру в OpenGL-вики, так же выглядит в ряде других исходников. Не понимаю, почему g++ считает, что для третьего параметра "error: invalid conversion from 'int' to 'int*'"? Это что-то так поменялось в С++11?
Попытался собрать чистый пример из OpenGL-вики - еще хуже: g++ утверждает, что функции из XLib не определены, а опцию -lX11 игнорирует.
deFBConfig = glXChooseFBConfig( deDisplay, deScreen, deVisAttribs, &deFBCount ); последний параметр указатель на int принимает, а ты просто int пытаешься передать
>>786137 Не последний, а предпоследний (третий, а не четвертый). Амперсанд уже пробовал ставить, в этом случае выдает "error: cannot convert 'const int (*)[15]' to 'const int*'" Не понимаю, этот код раньше работал же у кого-то?
>>786190 отвечаю, сам охуел, когда сегодня эту тему вспоминал. По-хорошему, все эти implicit conversions нужно нахуй выпилить и зопретить. Не понимаю, чем думали те, кто это делал.
Я правильно понимаю, что быть хорошим C++ разработчиком == знать наизусть стандарт? На это же можно потратить огромное количество времени и сил, не слишком ли серьезно C++ разработчики относятся к сухому знанию языка?
>>786360 > C++ - довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений. Человек, который хорошо в нем ориентируется - это хорошее зубрилко а не хороший программист.
>>786360 Не, забей, никто не учит стандарт до тех нюансов, что выше по треду. Обычно реальный код сводится к довольно ограниченному подмножеству c++ с довольно строгими правилами, так что ситуации вроде проблем с неявными преобразованиями не встречаются практически никогда.
>>786360 > Я правильно понимаю, что быть хорошим C++ разработчиком == знать наизусть стандарт Язык это лишь инструмент. Если ты им владеешь хорошо, то это замечательно. Но при помощи инструмента ты создаёшь какие-то детали программы. И если ты не знаешь как правильно сделать её и как они будут взаимодействовать с другими, то толку от простого владения мало.
>>786363 Школьник ITT, спешите видеть. Если откинуть неоправданно сложные моменты с неявными преобразованиями и разрешением перегрузок, то cpp окажется одним из передовых. А с введением концептов - будет еще круче.
>>786368 > Если откинуть неоправданно сложные моменты с неявными преобразованиями То получится OCaml с оператором + для целых и +. для плавающих типов.
>>786390 > я говорю о том, что именно у C++ программистов очень сильный дроч на знание языка. Да, это так. Возможностей отстрелить себе ногу очень много.
Посоны, как конвертировать double в long? Ведь в double порядок может быть принимать значения вплоть до 2^2048, что явно, блядь, не поместится в long, где максимальное число 2^63. Даже сраный float не поместится по такой логике в long. А если не поместится, то будет UB. Что делать, господа?
P.S. Вот вам выдержка из стандарта. Тут говорится "value", т.е. подразумевается, что если непосредственное значение во время рантайма влазит, то все будет ок. Я правильно понял?
А в чём смысл специализированных темплейтов для функций? Почему нельзя просто обычной функцией их заменить? В каком случае такой темплейт может быть полезнее?
>>787448 А зачем заморачиваться в коде, какую функцию нужно вызывать, если можно вызвать все ту же func<тип>? Во-вторых, шаблоны можно вызывать без параметров в угловых скобках, например, когда компилятор может сам догадаться исходя из параметров в (), тогда тоже можно будет не запариваться. Ну и иногда оно полезно, например, при рекурсивных шаблонах - задается определенный параметр шаблона, на котором она заканчивается.
>>787561 >А зачем заморачиваться в коде, какую функцию нужно вызывать, если можно вызвать все ту же func<тип>? В смысле? Я не имел в виду другое имя, а просто оверлоад сделать. Чем func<тип> удобнее, чем просто func-то? Конечно, со специализированным темплейтом не нужно тайпкастить все аргументы, если их несколько, для автоматического выбора желаемой функции.
>компилятор может сам догадаться Так он и с обычной функцией догадается же, только без дополнительной возможности обосраться.
>>787561 >при рекурсивных шаблонах А можешь пример показать?
>>787595 >У шаблонов самый большой приоритет при перегрузке. Ты не сможешь просто переопределить. Но ведь нет. http://ideone.com/RmW7B0
>http://ideone.com/OVvf8I Интересно. А как это в <> у тебя не тип, а значение? Туда что угодно можно вставлять, что ли?
И что это за формат template<unsigned i>? Это как называется, чтобы прочитать? Меня только template<typename typename> в качестве базового шаблона пока учили.
Есть один хелловорлд. В нем QtCreator не может найти std::make_unique. CONFIG += c++14 прописал, <memory> подрубил. Заметил, что если отключить плагин clang code model, то все работает нормально. Что это за хуйня?
Эхо сервер tcp на c++Аноним05/07/16 Втр 22:19:11#553№789010
Господа, подкиньте пожалуйста, в кого схоронено. Нужен шаблон - а на его основе буду писать уже то что мне надо
Есть задача: написать функцию, которая бы отображала сколько раз эта функция была вызвана (если в двух словах, целиком условие вот http://pastebin.com/ZsttcgzP ). Элементарно делается через статическую переменную, но задача дана в главне, предшествующей описанию статических переменных. В этой же главе описывались инлайн функции, дефолтные аргументы и темплейты. Возможно ли эту задачу как-то сделать через инлайн функции (у меня не получилось), или составители просто ошиблись и не туда впихнули задачу? Prata C++ Primer 6th Edition, Chapter 8, Ex. 1
И ещё по неймспейсам вопрос. http://ideone.com/kix7uE почему тут функция getDebt спокойно видит getPerson из другого неймспейса без какого-либо указания на него, без using'ов и т.д.? Всего лишь потому, что структура Debt использует структуру из того неймспейса?
>>789371 Ну глобальная понятно, она ж тоже, формально, статическая будет (скоупинг и времена доступа к/жизни переменных в следующей главе шли, в любом случе). А под "внешним аргументом" ты что подразумеваешь?
>>789483 Не, сигнатура функции по заданию была оговорена. Ладно, спасибо. Видимо, и правда не туда вставили, так как в следующей главе похожий вопрос есть.
Есть такое задание, ничего больше стандартных библиотек не знаю, чё читать(курить) по теме этого задания??
Есть определенная иерархия папок. Надо все их просканировать на *.h файлы. Во всех папках надо найти все конструкции вида #define IDD_WIZARD_PAGE 101 и распарсить их, составив словари IIDD_WIZARD_PAGE - 101 для каждой папки. Программа должна уметь: 1) Игнорировать часть папок. Список папок задавать в отдельном файле. 2) Показывать дубликаты. Дубликатом считать если число одинаковое в разных папка, а ID разное. 3) Выводить на экран список занятых диапозонов значений для конкретной папки.
То есть у программы должны задаваться команды из командной строки: your_app.exe --showdups или your_app.exe -sd для показа дубликкатов your_app.exe --showrange folder_name или your_app.exe -sr folder_name для показа занятого диапазона значений
Господа, а как мне сделать проверку выхода за границы статического массива? К примеру если дан массив int a[10]. И если я попытаюсь получить доступ к a[-1] или a[11], то получу предупреждение.
И нашел крутую палку
Палку вымазал говном
Получился агроном
Агроном взял в руку хуй
И ударил по компу
Напиисал он компилятор
Скажем им спасибо - ой!
Старший брат:
Предыдущий:
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-треды