ОП не придет - его разорвали собаки, Арматурой забили скинхеды, Надломился предательский лёд. Его руки, подготовлены не были к драке И он не желал победы Я теперь буду вместо него.
ОП, плавает в формалине Несовершенство линий Движется постепенно У меня его лицо и имя Свитер такой же синий Никто не заметил подмены.
ОП не придет - руки были в змеиной норе Голова в осином гнезде А спина в муравьиной куче Буду я - я из более прочного теста Я достоин занять это место Я многое делаю лучше.
ОП плавает в формалине Двигаясь постепенно В мутном белом тумане У меня его лицо и имя Никто не заметил подмены Ключи проверяя в кармане.
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:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
QT и OpenMP ПРОБЛЕМЫ У меня есть два вопроса: 1) Есть Window. На нём есть пара элементов. Как можно поменять параметры одного элемента из кода другого? Обычно это делается сигналами/слотами, но что делать, если я хочу, например, изменить значения на сразу двух лейблах по нажатию кнопки? Мне нужно биндить слот на кнопке сразу к двум сигналам на лейблах?
2) Есть кнопка. Когда нажимаю кнопку, начинается в цикле выполнение некоторого кода. Цикл распараллеленн с помощью OpenMP. После завершения нужно вывести результат в лейбл на форме. Как сделать так, чтобы во время этих вычислений, само приложение не подвисало? Такое возможно с OpenMP вообще? Ну то-есть, я хочу, чтобы приложение просто висело и не крашилось от того, что пользователь по нему кликнет пару раз наугад куда-нибудь.
Вопрос по qml. Вот написал я допустим кастомный стиль для кнопки и выделил ее как компонент. Button { style: ButtonStyle { label: Text { font.family: "Lucida Console" font.pointSize: 20 text: control.text } } } В другом файле я его использую и хочу при этом отдельно изменить font.pointSize. Как это сделать не проебав ничего остального?
>>759384 >не гарантирует понимание речи Но требуется для понимания же. Где-где, а в крестах ты абсолютно точно будешь насасывать без детального и глубокого понимания синтаксиса. Например, имеем вот такой фрагмент, совершенно очевидный на первый взгляд:
Любой ньюфаг будет шокирован, когда посмотрит получившиеся значения z1 и z2, а в реальном коде может отстрелить себе даже не ногу, а всю нижнюю половину тела. А разгадка одна - изучение языка по нубским книгам и интуитивное псевдопонимание синтаксиса.
>>759400 4.5 Integral promotions [conv.prom] 1 A prvalue of an integer type other than bool, char16_t, char32_t, or wchar_t whose integer conversion rank (4.13) is less than the rank of int can be converted to a prvalue of type int if int can represent all the values of the source type
>>759403 Да не, про это как раз во всех книгах почти написано. Что знаковость char implementation defined, а типы вообще всегда считаются различными у всех трех.
>>759409 > Что знаковость char implementation defined, а типы вообще всегда считаются различными у всех трех. Многие знаю только про первую часть этого предложения.
Кстати, кто знает объяснение? Просто так, с потолка стандартопетухи решили, что пусть будет "implementation defined"?
>>759385 Ньюфаги, не ведитесь. Такого не бывает в реальном коде и знать это не обязательно. С тем же успехом можно начать обсуждать особенности работы IOMMU и доказывать, что java-разработчик не разработчик.
Overload resolution - одна из самых сложных частей C++, unified call по этой причине и отвергли от принятия в C++17.
Я, кстати, тоже не знаю ответа, хоть и пишу 3 года. Я, конечно, полез уточнять этот момент, но там читать на час, так что иди нахуй стандартоеб.
>>759414 Потому что применение различается же. unsigned char для работы с памятью, char для арифметики. Если их отождествить, то может быть неоптимально для части сценариев. Если отождествить со знаковым, то всплывают проблемы с отрицательными кодами, либо половина кодов не используется, это тоже не очень хорошо.
Qt-проблемы Ну так что, кто-нибудь может объяснить мне, как в QT из кода одного элемента изменить значения другого? Ведь объект ui храниться в классе Window и он privite.
>>759434 Стандарт определяет базовый набор символов и требует, чтобы его кодировка влезала в char и при этом числа, кодирующие базовый набор символов, были беззнаковыми.
Если char = 8 bit и кодировка ASCII, то char знаковый, т.к. 7 бит достаточно для кодирования базового набора. А если кодировка вроде EBCDIC, то нужно 8 бит для кодирования и char приходится делать беззнаковым.
>>759440 Я не уверен, но мне кажется, что ты сейчас хуйню сказал. Согласно 3.9.1/1, все три занимают одинаковое количество байтов, согласно 5.3.3/1 это количество в точности 1. Согласно 1.7/1 байт может хранить восьмибитный юнит UTF-8. Соответственно, здесь не стоит вопрос места, только вопрос эффективности конкретных операций. Например, если надо поддерживать знаковость, то в некоторых двоичных представлениях надо применять другие операции, которые, вообще говоря, могут быть и более сложными. Такого нигде реально нет, конечно, но это, по крайней мере, хотя бы теоретически дает мотивацию, в отличие от размеров, которые гарантированно совпадают у всех трех.
>>759450 В той сигнатуре работает правило приоритета объявлений. unsigned x выглядит как объявление x, поэтому это оно и есть, хотя unsigned char бы тоже подошло. Это если неформально. А формально вроде этот случай с unsigned даже указан отдельно.
>>759441 >>759441 Ну типа того. Допустим, я хочу при нажатии на кнопку изменить значение лейбла. Обычно, это сделалось бы с помощью сигнала/слота. А как сделать так, чтобы можно было именно из класса кнопки повлиять на другие элементы?
Вообще, в моём случае, это виджет, который находится на окне. В нём генерируется пикча и я хочу эту пикчу вывести на другой элемент.
>>759454 Я вообще не про место или эффективность. Я про 2.3/1, где определяется basic character set и 3.9.1/1 где требуется, чтобы char вмещал этот basic character set.
Кстати, в цепепе-стандарте не сказано, что значения, соответствующие basic character set, должны быть unsigned. Это сказано в стандарте C: 6.2.5 Types 3 An object declared as type char is large enough to store any member of the basic execution character set. If a member of the basic execution character set is stored in a char object, its value is guaranteed to be nonnegative.
>>759468 Законекти оба объекта в классе в котором находяться экземпляры этих обектов, ну или какой-нить ивентФильтр установи. Правда у нас за ивентФильтры по бошке бьют.
>>759493 >>759470 Всё, вроде бы решил проблему. Ебал я все эти сигналы/слоты. Вот решение проблемы для илиты: [code] // uiWindow - parent, который передаётся в конструктор QLabel QO = (QLabel)uiWindow->findChild<QLabel*>("label1"); QO->setText("test"); [/code]
КАК РАСПАРСИТЬ X, Y, Z ВЕКТОР? Чёт не хочется писать самому парсер, проверять всякие там буквы, знаки, экспешены ловить. Есть какое-нибудь решение уже готовое?
Постановка задачи. Инпут: строка, вида 0.25, 0.12, 1.23 Нужно распарсить её в 3 float переменных + проверить на хуевые данные, чтобы эксепшен какой-нибудь потом не вылетел.
Анон, возможно ты знаком с sfml. Не знаю как избавиться от белого квадрата. Новые объекты добавляются через emplace_back.
С последним созданным все нормально. Но первые рисуются без текстуры.
Спрайт и текстура храняться в каждом объекте. Похоже emplace_back переносит куда-то в памяти весь массив, в результате "старые спрайты" имеют не правильный указатель на текстуру. Как быть?
Если программировать на Haskell одно удовольствие, а программировать на C++ сплошная пытка — то почему весь промышленный код пишется именно на крестах? Что это? Стокгольмский синдром? Мазохизм? Подсознательная жажда унижений?
В общем, проблема такова: в createpath ты создаешь временный объект с временной текстурой и спрайтом, когда делаешь это: obj.emplace_back(Path); Так как у тебя нет copy или move конструктора, то в emplace_back вызывается конструктор, сгенерированный компилятором, который втупую копирует объект. Когда выходишь с функции, временный объект удаляется вместе с текстурой. Спрайт в объекте из вектора ссылается на временную (уже удаленную) текстуру, поэтому выводится белый квадрат.
>>759727 А я думаю иначе. >>759723 Сами текстуры скорее всего с подсчетом ссылок. При копировании объекта ничего не удалится. А вот при создании спрайта у тебя скорее всего передается адрес текстуры в памяти. Нужно передавать адрес текстур, а не создавать их в объектах. И ещё. Сюда можно загружать скрины.
>>759703 >программировать на Haskell одно удовольствие >программировать на C++ сплошная пытка У тебя обе посылки неверные. Например, и там блядь сука сраные монады хер проссышь ваще как сделать цикл и там пиздец оно должно работать какой нахуй сегфолт ну как так в самом начале бугуртил, но с увеличением опыта увеличивалось и удовольствие.
народ посоветуйте куда вкатиться, я года джва три лернил Стивена Прату, выполнил все задания в конце всех глав, но никаих технологий не освоил и как их найти, и где искать работы тоже не понимаю, усилий въебал дохерища, а отдачи ноль, я в жутком отчаянии что делать?
>>760052 в джава треде хотя бы шапка нормальная, тут просто хуита о синтаксисе, сразу видно что крестовое комьюнити состоит из долбаёбов, у вас весь тред о синтаксисе штоле блядь?
>>760128 >Q: ЧТО СКАЖЕТЕ ЗА ДЖАВАРАШ? A:Худшая инвестиция в твоей жизни. Огромное количество говнокода, оторванные от жизни задачки, 1000 заданий по выводу в консоль какого-то говна.
>>760155 Но я не хочу чтобы задачку кто-то решал за меня, тем более что это начальные простые задачи. Если до завтрашнего обеда не смогу решить, то напишу. У меня решение на уме вертится, надо проветриться.
>>759728 >>759731 tnx помогло >Сюда можно загружать скрины. интернетов не хватает для картинок овер 1мб, за 2 минуты аплоада макаба сбрасывает загрузку. Да и с puush не нужно сохранять-искать-чистить, всегда прямые ссылки на любые файлы, словом удобнее да и уже привычнее
Программисты, я вчерашний нуб, в общем ситуация такая: http://ideone.com/IHYzYH, задачка на пике. Суть в том, что я мог бы легко её сделать через if-else, там просто очень большим получится решение, но я подумал - ведь можно сделать так, чтобы после ответа каждый раз генерировалось бы сами все ступени. Я рассчитал вот что: - сначала берётся число 50, y означает + в лестнице, n -. - каждая последующая ступень делится на n*2, т.е. 1 ступень это 50, 2 ступень - 50/2, 3 ступень - 50/4 и т.д. Собственно например мы загадали число 22, вопрос ставится - больше ли это число чем Х, где Х сейчас это 50: 1. 50 n минус в выражении 2. 50 - 50 / 2 = 25 n 3. 50 - 50 / 2 - 50 / 4 = 13 y плюс 4. 50 - 50 / 2 - 50 / 4 + 50 / 6 = 21 y 5. 50 - 50 / 2 - 50 / 4 + 50 / 6 + 50 / 8 = 27 n 6. 50 - 50 / 2 - 50 / 4 + 50 / 6 + 50 / 8 - 50 / 10 = 22 Оно.
Можно ли это как-то сделать через самогенирирущийся код? Я вижу что можно, но у меня не хватает знаний... Дайте подсказку, пожалуйста.
>>760570 Так я цикл while использую, ладно, надо еще подумать. У меня, вообще, такая идея была: сделать 3 вектора, 1 - записывает числа, 2 - ввод n/y, 3 - шаг. Просто, у меня в голове пока не умещается решение.
>>760579 Стандартный способ это делать M=(L+R)/2; а дальше соответственно L=M; ну или R. L это число <= искомому, поэтому в начале оно равно 1. R это число большее искомого, поэтому для поддержания инварианта он сначала равно 101.
>>760568 В софтаче отказались помогать. Запускаю эти программы и вручную копипащу вывод их на ввод друг другу. Всё работает. Пытаюсь с помощью консоли их зациклить, но не выходит. Как это надо делать?
ПРОБЛЕМЫ НЕ ВИДАННЫХ РАНЕЕ МАСШТАБОВ Кароче, пишу в Qt проект. Там много всего. И Qt-шная многопоточность, и OpenMP, и OpenGL, и пару либ математических. Кароче, попытался запустить экзешник отдельно, а не через qt creator и конкретно соснул. Выходит пикрилейтед. Вроде dll'ки закинул туда. А тут ошибка вообще какая-то странная. Еще и непонятно, как она на английском звучит. Что за нахуй точка входа? Пытался загуглить, но чёт не вышло вообще ничего.
>>760787 Не работает это т.к. он вывод первой программы подаёт на вторую, а второй в консоль. Нужно чтобы вывод второй подавался на первую. Нашёл решение в интернете. mkfifo fifo; ./1 < fifo | ./2 > fifo; rm fifo. Но он не показывает вывод. Файл fifo всегда пуст. Пытаюсь tail -f fifo делать, но он не показывает изменений и программы зависают запущены но бездействуют. Что делать?
>>760821 >Его же вроде только один раз прочитать можно Скорее всего так. Но тогда я не понимаю что с ним происходит. Если tail не получает никаких данных, то эти данные должны были читать программы. Но они зависают как-будто ждут ввода.
>>759279 (OP) Поясните нуфагу, почему каждый тред по ЯП напоминает секту, куда истеричный пидор сектант (оп) заманивает выкрикивая бессвязную хуету, размахивая худенькими кулаченками и брызжа слюну.
>>759279 (OP) Поясните нуфагу, почему каждый тред по ЯП напоминает секту, куда истеричный пидор сектант (оп) заманивает выкрикивая бессвязную хуету, размахивая худенькими кулаченками и брызжа слюну.
>>759279 (OP) Поясните нуфагу, почему каждый тред по ЯП напоминает секту, куда истеричный пидор сектант (оп) заманивает выкрикивая бессвязную хуету, размахивая худенькими кулаченками и брызжа слюну.
>>760842 Расскажу тебе, как решить этот трабл, хоть я и ньюфак 4-недели в программировании, а ты параллелишь на OpenMP. Идешь сюда: http://www.dependencywalker.com/ Качаешь и сначала смотришь все либы и таблицы импорта. Библиотеки, которых не хватает там будут подсвечены (там есть некоторые проблемы с либами самой майкрософт из-за древности софта, но в целом он работает отлично).
Если это тебе не помогло, то пришло время ебаться с отладчиком. Тут гугли сам, как подключить исходники к твоему отладчику + как ставить брейкпоинты и т.д.
>>760846 >Нужно понимать, что используемый язык должен соответствовать поставленной задаче >C++ это по-настоящему сложный язык >крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей
Да ты охуел, братец. Мы тут почти год жопу рвали, чтобы шапка была объективной. Насколько я могу судить, это сейчас единственный тред, в котором нет неаргументированных кукареков в духе НАШ ЯЗЫК ЛУЧШИ ВСЕХ!!!!111111.
>>760862 > ответы на возникающие у тебя вопросы ищешь в предыдущих тредах > забыл поставить точку с запятой > заставляют читать 30 тредов > не фанатизм
>Мощь Такой аргумент к любому популярному языку можно отнести. Потом одна вода уровня каждой задаче свой инструмент но наш язык решает больше задач и делает это лучше. Потом талмуд книг у 4ёх из которых название "Язык программирования C++" У вас даже блог алёны в шапке.
Горит от пидорасов, которые по верхам нахватываются и ебошат "Qt проект. Там много всего. И Qt-шная многопоточность, и OpenMP, и OpenGL, и пару либ математических.". А основ не знают, бля.
Вангую, что и все перечисленное ты нихуя не знаешь.
Если нужо скачивать инфу с сайтов, к примеру, выводить текст первые 5 запросов по переменной типа стринг в гугле. В плюсах есть библиотеки для реализации этого? Что гуглить подскажите, буду весьма благодарен.
>>760887 Я прочёл статью. Но я всё-равно не понял, почему так происходит. В чём разница между вызовом экзешника из qt криэйтора и просто даблкликом? Разница же только в установленных в Qt путях, нет?
>>760944 Ну, делается же запрос на файл, и файл передается по .ээ ftp еслим не ошибаюсь, имеешь ввиду что ftp нет в бусте? Алсо, такой вопрос, если я делаю запрос на сайт loh.com/index.html Если я делаю это через програмку - она выдает нме тонну текста, хотя сам сайт выглядит весьма просто. Так вот вопрос, в сам БРАУЗЕР этот же index.html передается точно в таком же виде, или присутствует какая-либо конвертация?
Че по нейросетям, ген. алгоритмам, машинному обучение и прочему ии подобному почитать посоветуете? Знаю, что такое уже есть, но мне бы книги с примерами кода на крестах
>>761060 Тут где-то тред с литрой и курсами по cs был, поскроль, поищи. С примерами кода на крестах точно не найдёшь, ибо там учат алгоритмам, а не языку.
В любом случае, насколько я знаю, в ирл все моделируют/прототипируют нейросети и пр на питонах, а потом уже готовые алгоритмы переносят на плюсы при нужде в перформансе.
>>761065 >все моделируют/прототипируют нейросети и пр на питонах, а потом уже готовые алгоритмы переносят на плюсы Двачую. Либо юзают связку Python + C++.
>>761253 Я кароче нуфаг, но скажу свое мнение. Deque, эт очередь, а max_element ищет в диапазоне, другими словами перебирает. А в deque, ты можешь обращаться ток к 1ому или последнему элементу. Я прав или мне нахуй сходить?
>>761253 > std::max_element Почитай в документации что возвращает std::max_element. И раз это итератор то его нужно разименовать чтобы получить значение.
Господа, я хочу вкатиться к вам, потому что мне нужен язык, на котором я буду писать небольшие десктопные программки, а возможно, когда-нибудь, сяду за микруху. С основами программирования знаком. С++ стилистически нравится. Но проблема в том, что мне нужно писать быстро, быстро видеть результат и быстро идти дальше. Программы небольшие (к примеру, полив автоматизировать, тексты определенной структуры обработать, гуй к консольной утилите запилить) и не слишком требовательные к производительности, но скорость разработки важна. И вот тут я не уверен, что С++ для меня. Можно к вам быстро вкатиться и быстро начать писать реальные продукты, пусть и сначала на нубоуровне? Java/Python не хотелось бы, потому как там интерпретатор нужен в том или ином виде, да и назначение немножко не то, C# поинтереснее, но мне он синтаксически не очень симпатичен + майкрософт, .NET и все в этом духе. Если я возьму вашего Липпмана из шапки + wxwidgets/Qt5 (собственно, что из них лучше и быстрее взять?), я смогу комфортно писать код, не отплевываясь от низкоуровневости и пещерности? Насколько быстро вообще вкат пойдет? Через 40 часов изучения смогу написать гуй-калькулятор? Если нет, то как быть?
>>761422 >небольшие десктопные программки C# >микруху C >Можно к вам быстро вкатиться и быстро начать писать реальные продукты, пусть и сначала на нубоуровне? Нет. >Если я возьму вашего Липпмана из шапки + wxwidgets/Qt5 (собственно, что из них лучше и быстрее взять?), я смогу комфортно писать код, не отплевываясь от низкоуровневости и пещерности? Да. >Насколько быстро вообще вкат пойдет? Год. >Через 40 часов изучения смогу написать гуй-калькулятор? Нет. >Если нет, то как быть? C#
>>761422 Приличная скорость разработки на крестах достижима, но для этого нужно лет пять опыта, плюс неплохо иметь опыт в других языках для развития навыков декомпозиции и дизайна кода (чистые кресты калечат мозг). Бери пистон или C#.
>>761422 > полив автоматизировать Купить готовое решение на рынке и не ебать себе мозг. > тексты определенной структуры обработать Perl. > гуй к консольной утилите запилить wxPython.
>>761436 Пистон - не то, что мне нужно. Шарп просто не нравки, как не нравки Visual Studio, .NET и прочая параша. >>761435 >Нет. Хуле нет-то? И чем C# столь лучше? Длина массива из коробки?
>>761449 >Пистон - не то, что мне нужно Тебе видней. >Шарп просто не нравки, как не нравки Visual Studio, .NET и прочая параша. Мне тоже. Но у меня времени больше и задачи другие. >Хуле нет-то? За 40 часов ты только до классов дойдёшь. >И чем C# столь лучше? Он проще. Сделан специально чтобы заменить дэлфи и осталось возможно кодить мышкой. Если у кого-то есть реквестирую статистику по времени изучения каждого языка. >Длина массива из коробки? Сам понял что сказал?
>>761422 Завтра ищешь в интернете книжку Керниган, Ричи. Язык C. Похуй если ничего не поймешь. Затем идешь на http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию сишного кода - 1TBS, чтобы от зубов отскакивало. Когда напишешь свою первую сортировку Хоара, по пути изучив ассемблер инлайном, скачиваешь и изучаешь любую олдовую среду разработки, рекомендую Turbo C. Как переделаешь сортировку, чтобы была по меньшей мере итеративной, а не рекурсивной, можешь идти дальше - тебя ждет увлекательный мир байтоёбства. Хипсорт, сверхбыстрые асинхронные B-деревья, xor-связные списки. Отсос у хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-богов, которые работают в тёплом офисе за приличную зарплату не заставит себя ждать и уже через пол года ты будешь так редко мыться, что любая баба будет брезгливо закрывать нос платком при одном упоминании твоей одежды.
>>761461 Да, функция, возвращающая длину массива. > Сделан специально чтобы заменить дэлфи и осталось возможно кодить мышкой. Блядь. Вот это вроде то, что нужно как раз (я что-то вроде современного делфи и хотел найти), но мне уж очень не нравится VS, Net и Мрикософт. Разве все то же самое нельзя делать с С++ в code::blocks/QtCreator? > чтобы заменить дэлфи и осталось возможно кодить мышкой До классов я побыстрее дойду, мне же 1) не надо все изучать досконально 2) основы программирования я все-таки понимаю
>>761485 Да хуле вы такие пафосные-то, блядь? У меня в текущий момент не стоит задачи НАУЧИТЬСЯ ПРОГРАММИРОВАТЬ за 10 лет, я хочу через неделю уметь написать годный гуевый калькулятор. Там из более-менее сложного, по сути, только парсер строки.
>>761422 >мне нужно писать быстро, быстро видеть результат и быстро идти дальше >Python не хотелось бы, потому как там интерпретатор нужен в том или ином виде, да и назначение немножко не то Для твоего требования Python почти идеален. Но если нужен компилируемый и быстрый - то бери go
>>761482 >не надо все изучать досконально С крестами надо. Рао основы за 21 день дрочки без практики пытался научить. >Разве все то же самое нельзя делать с С++ в code::blocks/QtCreator? Можно. Но ты хочешь быстро и просто. Это не кресты. >>761490 А теперь тебе нужен питон.
Если вопросы по крестам кончились, то сформирую корректно задачи которые хочешь решать и иди в ньюфаготред искть для них язык.
>>761454 Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда байтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели System.currentTimeMillis() - start) - пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы. Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия - он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо.
>>761546 Двачую, байтоёбы рабы во всём - рабы машины. рабы предубеждений, рабы производительности, рабы стереотипов, рабы обрабатываемых штеудом х86 типов данных - для них всё, что не кратно 2 байтам и больше 16 байт не может быть примитивным типом, хотя число - это просто число, оно может быть целым, дробным, рациональным, комплексным, но не "в 2 байта в 4 байта в 8 байт". Да, байтобляди были актуальны пару-тройку десятков лет назад, когда кроме этого пресловутого отлизывания регистров и микросхем не было способов заставить машину быстро решать задачу. Но теперь-то в нашем распоряжении оптимизирующие компиляторы, многоядерные процессоры с параллелизацией, которые производительнее машин 20летней давности в сотни тысяч раз. Жаль, что программирование было поглощено стереотипным быдлом, не могущим в думать, и способным работать лишь по зазубренной инструкции, написанной кровью и потом сотен павших хомячков-байтоёбов до него. Настоящее, полноценное программирование, благодаря подобным обмудкам, мало теперь где востребовано. Хотя там где оно востребовано, можно кататься как в масле сыр и получать в три раза больше не то что сениор-байтоёба, а ёбанного заместителя директора быдлоконторы в которой этот байтоёб работает. С другой стороны это и хорошо - в космическую промышленность, Data mining и прочие сложные и непосильные для императивных байтохомячков сферы попадает лишь элита.
>>761447 В стандарте это называется невычисляемым контекстом. То же самое внутри sizeof, alignof, noexcept и тому подобного. Фактически не гарантируется, что-либо про compile-time, но гарантируется, что наблюдаемое поведение будет как если бы выражение не вычислялось. Поэтому можно разыменовывать nullptr и творить прочие непотребства внутри.
>>761546 >>761563 Красиво расписал, братюнь, хоть я и не со всем согласен. На мой взгляд, здесь, как и везде, нужен баланс. Кроме того, пускай наивно сравнивать программирование с искусством, но что-то в этом сравнении все же есть, на мой взгляд. Мамкины нигилисты скатывают все в говно еще чаще, чем мамкины романтики.
Изучаю эти ваши кресты 4 недели, дошел до виртуальных функций. Все это становится сильно запутанным, что я прям чувствую уже потребность в написании ТЕСТОВ, которые бы проверяли, что все работает как положено. Но ведь это пиздец. Программы буквально делают какую-то хуету, которая пишется на чистом Си в три строчки, а с вашими объектами, наследованием и виртуальными методами нужно писать ТЕСТЫ. Это же говно какое-то. Broken By Design.
Вы тут постоянно пиздите, что на С++ пишут игры и все такое. Но ведь Кармак писал игры на чистом C и с ними все было в порядке.
В чем польза от ООП? Кроме лишних тонн говнокода и юнит-тестов?
>>761812 Я много чего застал. И дроч ассемблерщиков на то, что они урезали PE-файл до 50 байт, и дроч на C++. Последнее, собственно, никуда не делось. Просто слегка растворилось в потоке стартапов на раби.
>>761812 Был такой дурачок, по кличке Страус, и решил он как-то сделать язык простой, народный, для своих пацанов. Ну и в итоге у него получилось такое неведомое лесное угребище, что люди над ним и его пацанами хорошенько посмеялись, так же как мы сейчас смеемся над денисками и бабушкиными. Посмеялись и забыли.
Обиженные пацаны с позором удалились в свои темные норы, но язык не забросили. Год за годом в своих норах пацаны надрачивали на язык, с безумством больной психики изучали каждый его уголок, каждый косячок, каждую странность и каждую аномалию, бережно складируя накопленное богатство, в то время как весь остальной мир жил своей радужной и веселой жизнью, ничего не подозревая о нарастающей скрытой угрозе.
И так, год за годом, пацаны вырастали, проникали на производство и в образование и потихоньку подсаживали на свое обожаемое лесное угребще все больше и больше стратегически важных областей, и в итоге отомстили за обиду, скрытно разъев индустрию изнутри.
Отомстили и отомстили. Дальше жить надо, софт писать. А на угребище софт не писался. Невинные программисты вместо своих прежних повседневных дел стали вынуждены бороться с угребищем, со всеми его хитростями и подлянками. Программисты учуяли неладное и ополчились против пацанов, но пацаны, чтобы не потерять власть, выдумали свою религию, чтобы программистов усмирить, и записали все накопленные в своих темных норах косяки и аномалии в книгах, под видом священного писания. И теперь каждый, кто не потратил пол жизни, сидя в монастыре и изучая священное писание, объявлялся еретиком и маргиналом.
И называлась та религия ООП, ее священники - ООП-учеными, а те самые косяки и аномалии прозвали паттернами.
И сейчас, спустя много-много лет, мир постепенно осознает в какой беде находится и с каждой новой версией языков программирования пытается скинуть старые заржавелые оковы. А ущерб, который нанесли человечеству ООП-псведоученые, еще предстоит осознать.
>>761807 >Программы буквально делают какую-то хуету, которая пишется на чистом Си в три строчки Ты конкретный пример приведи. На Си вообще сложно писать что-либо в 3 строчки, из-за обработки ошибок весь код превращается в лапшу из if'ов, возвращения значений через выделяемые снаружи буферы и goto clenaup. Но ты явно не об этом, потому что к ООП это имеет мало отношения. >Но ведь Кармак писал игры на чистом C Только потом начал писать их на С++.
Байтоёбство включает в себя: 1. Императивный стиль программирования как начало байтоёбского пути. 2. Дрочка на машинно-ориентированные типы данных (собственно, основной симптом байтоёбства) и последующее за ней закономерное возмездие байтомудакам в виде big endian vs. little-endian, особенности обработки чисел с плавающей точкой и.т.д. 3. Предтерминальные стадии байтоёбства - интринсикоёбство и его более тяжёлая форма - инлайн-ассемблероёбство. Подсадка начинается с убеждённости поциента в необходимости ручками использовать SIMD -инструкции. 4. Терминальная стадия, как итог п.3, тру-ассемблероёбство и "хроническая низкоуровневая оптимизация головного мозга"
В нашем мире, к счастью, подобные симптомы с распространением java, C# и прочей "замещающей терапии" встречаются реже, однако остались две отрасли, входящие в зону риска: 1. Гейдев. Байтоёбство в гейдеве берёт своё начало в 70х-80х, поскольку именно тогда зародилась традиция байтоёбства в геймдеве. Обязаны этим, в основном, восьмибитным соснолям и домашним компьютерам, которые, обладая малым объёмом ОЗУ и имея скудные средства программирования, требовали делать на них ёба-игры. Эта традиция продолжилась и далее, всё благодаря тем же консолям, на которых консолерабы должны были выпускать игры 5 лет, задрачивая их убогие байтоёбские архитектуры по полной. К сожалению, подобная практика перешла и на ПК, где байтоёбство, в общем-то не так оправдано. К слову байтоёбам-игроделам дали шанс выбраться из этой трясины в 2002 году, когда майкрософт запилила дуднет и менеджед дайректикс к нему. Но байтоёбы остались верны своим указателям, плюсам и байтоёбской оптимизации. Зашоренность, верность привычкам, безыдейность, десу. 2. Эмбеддед. Причины почти всё те же, что и в гейдеве. Маломощное железо, пара сотен байт озу, деревянные игрушки, прибитые к полу и.т.д. К этому прибавляется огромное количество разных железок разномастных архитектур, для которых нет толковых тулчейнов. Из хорошего - в последние годы байтоёбство в этой сфере потихоньку излечивается, спасибо дядям из ARM co ltd, сделавшим свою архитектуру более менее распространённым стандартом среди всех архитектур и огромному количеству появившихся фреймворков и компиляторов языков для этой платформы.
Так же распространено ложное утверждение что байтоёбство крайне необходимо в системном программировании. На самом деле этого легко избежать. Рассмотрим среднестатистическую аппаратную платформу. Краеугольными камнями любой аппаратной платформы являются: 1. Процессорная архитектура Memory map - адресное пространство, в которое отображаются RAM, ROM и внешние устройства 2. Протоколы управления этими самыми внешними устройствами.
Так вот, всё вышеперечисленное вполне можно вполне декларативно описать обычным конфигурационным файлом, не прибегая к программированию вовсе. Затем, скормить этот файл генератору платформ и на выходе получить готовый фреймворк-скелет нашей операционной системы, доступ к которому можно получить из любого языка программирования. Вот так вот просто, если бы байтоёбство гологного моска не мешало.
>>761807 ООП в исполнении крестов - улучшает модулность и могут помочь создавать абстракции с удобным интерфейсом. Для маленьких программок, как ты правильно заметил, это не требуется.
>>761818 Разумеется, Страус не осилил полноценное ООП и запилил неполноценную реализацию. Не думаю, что программисты, пишущие на Smalltalk'е, сочтут С++ объектно-ориентированным языком. Даже по сравнению с Java С++ явно в проигрыше - нет интерфейсов (зато есть множественное наследование со всеми его проблемами), объектная модель просто отсутствует.
Понятие метаинформации (а также reflection, introspection и т.п.) в С++ отсутствует полностью (а вся среда Smalltalk построена на ней).
Много ли Вы знаете простых и удобных persistence-библиотек для С++, которые бы сами могли сериализовать произвольные объекты ? Максимум, что есть, это сложные библиотек с кучей ограничений и необходимостью вручную (зачастую при помощи макросов) задавать фактически часть метаинформации.
А вот в Smalltalk'е или в Python'е таких библиотек полно.
А как дела у С++ с интеграцией со скриптовыми языками - Perl, Python, Tcl, Ruby и др ? Опять же очень плохо - надо ручками задавать всю необходимую метаинформацию. Есть правда генераторы интерфейсов, которые разбирают Ваш исходный код на С++ и по нему строят необходимые описания.
Только это не всегда работает и почему это не может делать сам компилятор.
А вот Python умеет легко работать даже с такой кривой объектной моделью как СОМ, умеет сериализовать произвольные объекты, умеет на ходу добавлять объекту новые методы.
А как с программироваинем GUI - одна из распространенных кроссплатформенных библиотек Qt использует свой препроцессор языка С++ для выделения необходимой метаинформации.
Кроме того, С++ вообще не различает два существенно РАЗНЫХ понятия - абстрактнывй тип данных (АТД) и объект.
Классическим примером АТД яволяется класс Vector3D - фактически простая (зачастую inline-овая) обертка вокруг данных. Просто структура, но более удобная в обращении.
Возможно наследование (хотя редко), но только как структур. Никакого переопределения чего-нибудь вообще быть не может. Основной смысл - удобство работы (чтобы не надо было все векторные операции расписывать покомпонентно или наполнять код вызовами addVector, subVector и т.п.).
Естественно, что никаких таблиц виртуальных методов не нужно, зато очень полезной может оказаться возможность переопределения операторов.
Поскольку типы довольно простые, то крайне важна эффективность компиляции (в противном случае зачем вообще нужны такие классы).
Объект, с другой стороны, это то, что с самого начала замышляется как нечто динамичное, расширяемое. Мы всегда можем получить вместо объекта одного класса объект унаследовнного класса (или просто объект, поддерживающий нужный интерфейс).
Для объекта важна максмальная гибкость, как в возможности наследования и переопределения, так и в возможности композиции.
Причем с легкой руки авторов книг по С++ объектную ориентированность обычно понимают только как наследование объектов. А теперь откройте Design Patterns и посмотрите на что там большинство паттернов. А они почти все на композицию объектов - возможность получать новую функциональность путем соединения объектов правильным образом между собой.
Причем это соединение может происходить прямо во время выполнения программы (и ее почему-то не надо перезагружать для этого :)) в отличии от широко известной операционной системы.
В этом плане очень интересна книга Андрея Александреску "Современное проектирование на С++". В ней автор просто чудеса творит, красиво реализуя паттерны и многие полезные вещи. Но все его чудеса относятся почему-то исключительно ко времени компиляции. И требуют кстати весьма немало этого самого времени.
А вот в Objective-C (другой вариант построения объектно-ориентированного языка на основе С, только в нем используется объектная модель языка Smalltalk) можно прямо на ходу узнать какие интерфейсы поддерживает объект, какие у него есть методы. Можно даже прямо на ходу добавить новый метод. И это компилируемый язык, весь графический интерфйес таких операционных систем как NeXTSTEP и Mac OS X построен именно на этом языке.
Сколько шума была из-за "острого" С (C#) в связи с делегированием - еще одним крайне важным элементом объектно-ориентированного программирования.
Делегирование - это возможность передать запрос другому объекту (делегату). Послушаешь сейчас мелкомягких о крутости делегирования в "остром" С - ну прямо они его и придумали и подарили миру.
А вот оказывается 15 лет назад делегирование было одни из краеугольных камней графического интерфейса NeXTSTEP'а. И было там крайне легко и красиво сделано. И была там 32-разрядная ОС, вся графика через Display PostScript (в частности, полная поддержка альфа-канала, появившаяся только в Windows XP), возможность вкладывания звуковых сообщений в любой документ и многое другое.
А в это самое время micro$soft только-только выпустил 16-битовый Windows 3.0.
С другной стороны, посмотрев на С++, становится понятно, почему делегирование замалчивалось. А как его можно реализовать на С++, как можно попросить какой-то объект вызвать какой-то метод (даже, если список входных параметров у него точно такой же) ?
В С++ это практически невозможно сделать. Именно поэтому сперва в Delphi и C++ Builder, а затем и в остром С появилось возможность делегирования как расширение языка.
Около года назад подобная возможность наконец-то вошла в стандарт С++. Правда в очень кривом виде. Осталось теперь только дождаться компилятора, который ее правильно реализует - кстати посмотрите в книге Александреску на каких компиляторах он весь код свой проверял, скорее всего вы ни одного из них просто не знаете.
Итак, с объектной ориентированнностью получается плохо - есть какая-то странная смесь АТД и объектов (половина от одного, половина от другого), объектной модели нет вообще, основная гибкость относится ко времени компиляции. Наиболее гибким элементом языка являются шаблоны. И именно на них А. Александреску и творит свои чудеса.
>>761828 Да это протухшие пасты пятилетней давности, которые писались школьниками, дрочащами на такие перспективные технологии, как F# и WPF. Работали они, естественно, крудошлепами под дотнет. Ты думаешь, что сосущий хуйцы на пару со своей мамашей, который пришел в тематический тред вбрасывать протухшие копипасты с целью потралить, способен родить что-то умное?
Не так давно я узнал, когда именно г-ну Степанову пришла идея библиотеки STL - когда он находился в отделении интенсивной терапии (после отравления рыбой) в, как он сам написал, "delirium state", по-просту - в состоянии БРЕДА.
Этот малеьнкий фактик очень удачно вписался в мои собственные представления об STL и самом языка С++. В предельно короткой форме: STL - это просто болезненный бред.
Бред относится к авторам библиотеки, а болезненный - это состояние ее пользователей.
Уже с самого начала STL производит впечатление чего-то монстроидального и совершенно непонятного. Это нагромождение template'd классов (яязык не поворачивается называть их объектами, это просто АТД-переростки) с огромным количество параметров и морем методов с весьма непонятными названиями.
Например в классе std::list есть метод insert, позволяющий по итератору вставить значение в список. Только вот не понятно куда именно, поскольку можно вставить непосредственно перед тем местом, на которое указывает итератор, можно после него, а межно и непосредственно на него.
Из названия мочное место вставки никак не следует.
В том же классе методы begin и end возвращают указатели (точнее итераторы) на начало и конец списка). Казалось бы в названии методов для вставки объекта в начало и конец списка было бы естественно употребить те же слова (равно как и само слово insert для обозначения операции вставки).
Щас прямо ! Используемые методы называются push_front и push_back. При этом мало того, что для обозначения операции вставки в список было использовано слово, обычно обозначающее помещение элемента на вершину СТЕКА, так еще для обозначения начала и конца списка были использованы термины, отражающие обычно положение по отношению к наблюдателю (перед и назад) !
Как уже упоминалось, милейшим свойством STL является постоянное копирование объектов, что оказывается веьсма неприятным сюрпризом при хранении сложных объектов с контейнерных классах.
Крайне незначительные отличия хранимых классов от того, что по мнению авторов STL, должно быть, легко приводит к огромной неэффективности или даже утеканию ресурсов.
Еще одним весьма неприятным сюрпризом является то, что в класса std::string (пол крайней мере во многих реализациях) быблиотека пытясь минимизировать выделение/освобождние/компирования памяти в многих случаях использует общий бефер для строк с одинаковым значеним.
Рассмотрим пример:
std::string a = "abc"; std::string b = a;
Для многих реализаций обе переменные a и b будут оказывать на один и тот же буфер в памяти, по-возможности, отслеживая моменты, когда необходимо "расщепить" общий буфер, дав каждой переменной по своей копии.
Однако в случае многонитевых приложений подобная политика запросто приводит к возникновению т.н. raise condition, например, одна нить может уничтожить одну переменную, а другая - что-то записать в нее. При этом сущесвтует вероятность того, что произойдет обращение к уже освобожденному блоку памяти и падению программы.
Можно, конечно возразить, что никто не обещал, что STL будет успешно работать в многонитевых приложениях. Однако в ряде реализаций не выдается даже предупреждения на стадии компиляции о возможных проблемах.
И если STL нельзя использовать в многонитевых приложениях (а многие реальные приложения являются многонитевыми, много Вы видели общаний что callback выдет вызван на той же нити, на которой Вы его поставили ?
В данном случае попытка оптимизации приводит к скрытым и тяжело обнаруживаемым проблемам.
Еще одной милой чертой STL является заметное увеличение времени компиляции и объема выполнимого кода. Правда насчет последнего уверяют, что в правильном этого можно избежать. Ну и много Вы видели правильных (хотя бы полностью соответствующего стандарту языка) компиляторов ?
А как правило, каждый раз, когда Вы используете класс map, для него заново генерируется код и включатся в выполнимый файл.
А как Вам очень распространенное предупреждение компилятора в VC 6 о том, что длина идентификатора превысила 255 символов ?
>>761838 Большинство книг по STL посвящего тому же, чему и большинство книг по С++ - чего и как не надо делать. Как на первый взгляд вполне нормальные конструкции либо не работают вообще, либо делают это очень медленно.
При этом самое интересное, что в большинстве случаев подобные проблемы вызываны желанием авторов библиотеки сделать получающийся код БОЛЕЕ ЭФФЕКТИВНЫМ (а вот про эффективность программиста при этом забыли напроч)!
А попробуйте как-нибудь пройтись отладчиком по коду, использующему STL.
Глядя на монстроидальную сложность STL возникает ощущение, что его авторы до сих пор находятся в состоянии бреда !.
Просто песней являются алгоритмы в STL - где еще (кроме давно забытого языка APL) можно всего в одну-две строчки записать такое, что требует многих часов для понимания того, что же в этом месте делается (про понимание того, как это делается я уже и не говорю).
Про эффективность подобных двух строк можно только гадать и молиться на компилятор.
Достаточно полное описание STL занимает свыше 400 страниц (к примеру, The C++ Standart Library. A tutorial and reference занимает почти 800 (!) страниц).
Фактически STL представляет собой безумных размеров черный ящик (причем макросов!), совершенно непонятно как работающий и с огромных количеством скрытых ловушек.
Сравните описание STL и работу с ним с работой в языке типа Python - крфйне небольшое число простых встроенных классов с понятными методами и операциями над ними.
При этом следует иметь в виду, что все эти встроенные классы и методы для работы с ними были написаны на чистом С и сильно соптимизированы, поэтому скорость работы может в ряде случаев оказаться даже выше чем у эквивалентной С++ программы (при несравненно меньшем объеме кода).
Анаолгичный код с использованием STL, как правило, гораздо менее понятен, отладка его крайне затруднительна. И при всем этом у Вас легко может получиться ограмных размеров выполнимый файл, крайне медленно работающий.
В определенном смысле STL можно воспринимать как доведенную до абсурда попытку дать пользователям С++ то, что сразу же доступно пользователям языком Python, Perl, Smalltalk, Ruby и т.п.
В результате получился монстр, пользоватьеся которым без руководства под рукой практически невозможно из-за его объема и отсутствия единой, простой и понятной модели, наличия большого числа подводных камней и соверешенной неопределенности во чито же именно выльется та или иная конструкция (в отличии от того же С где это было всегда ясно).
Одной из причин этого, скорее всего, является отсутствие хоть какой-нибудь целостной объектной модели в языке С++.
Лучше всего STL подходит для работы с атомарными типами (типа int, float и т.п.), где все операции создания/уничтожения/копирования крайне просты и эффективны.
Однако если же Вы хотите использовать STL для работы со своим классом, то необходимо привести его интерфейс к интефейсу атомарных типов (т.е. корректно, не полагаясь на компилятор, самому написать copy-конструктор, default-конструктор, деструктор, оператор присваивания). Причем все эти операции доложны быть реализовано максимально чисто и корректно.
Однако для достаточно сложных классов (хотя бы просто выделающих для себя какие-то ресурсы) перечисленные операции обычно оказываются довольно дорогостоящими.
Вполне возможно, что именно этим и объясняется странный факт использования экземплярами класса std::string общего буфера - это заметно снижает расходы на создание/копирование/уничтожение строк.
В результате для строк пришли к классическому reference counting'у (правда использовав его только для класса string и спрятав его глубоко внутрь класса).
Фактически STL неявно проповедует свою объектную модель (т.е. эквивлентность атомарным типам), но поскольку большинство реальных объектов намного сложнее атомарных и в эту модель укладываются с трудом (и большими накладными расходами).
Одно время в качестве панацеи считали (это легко прослеживается по годам написания книг) auto_ptr. Прошло немного времени и стало ясно, что от него проблем гораздо больше, чем пользы. Теперь панацеей объявляется уже reference-counted-ptr.
Весьма вероятно, что в конце концов удастся построить набор классов для "заворачивания" указателей и ссылок на объекты/память/ресурсы, чтобы реальные объекты можно было использовать в STL без слишком больших проблем.
Вот только какова будет сложность такого заворачивания, учитываю предыдущий опыт, на простое и понятное решение надеятся не приходится :((
А возврщаеясь к скриптовым яызкам - там почему-то все очень легко и просто, и внутри всего лежит именно reference counting.
А если взять библиотеку Foundation для платформ NeXTSTEP или Mac OS X, то она целиком написана на Objective-C и нет там подобных проблем. Наличие единой, простой и гибкой объектной модели позволило легко и просто реализовать работы с контейнерными классами почти так же легко и просто, как на скриптовых языках.
Возможно для работы с атомарными классами подход, использоанный в STL и окажется быстрее и экономнее (в Foundation как и в Java для хранения в контейнерах атомарные типы заворачиваются в объекты), но зато при работе с реальными классами (например, работа с распределенными объектами, которая там была реализована красиво и просто и за много лет до мелкомягких, или же работа с GUI-классами) проблем не возникает.
>>761835 Хорошо, покажи мне ORM уровня хотя бы Entity Framework на современном C++. Ну или веб-фреймворк с MVC архитектурой. Или аналог Qt с событиями без использования внешнего препроцессора, на чистом C++.
>>761838 Степанов придумал идею generic algorithms еще в 80х. первая реализация была на языке Ada. Лишь в начале 90х появилась реализация на c++, который он выбрал за гибкость и мощь (указатели). и только в 1993 году, благодаря Коннингу, сумел впихнуть в стандарт как STL. Современная реализация далека от первоначальной HP SGI версии из-за оптимизаций. да, код сложный, страшный, но эффективный. в подавляющем большинстве случаев нет нужды в отладке STL кода. тебе дают алгоритм, тебе дают универсальные термины и способы для работы с алгоритмами, компонования их без потери эффективности. Позже Степанов признал некоторые проблемы и недостатки дизайна (относительно итераторов, отсутствие диапазонов). Сейчас это активно исправляется. но суть generic programming остается. Пример со строками некорректен, так как STL string умеют в copy-on-write - смотри sgi реализацию и Майерса. MS как всегда отличился и запилил свою реализацию STL с блекджеком и ворохом проблем вплоть до несовместимости с sgi версией.
>>761498 Спрашивал в питонотреде, там мне десять раз указали, что выбор хуевый и делать такую хуйню, как я хочу, на питоне - бредовая идея. >>761507 Сформулировал же, ну: > мне нужен язык, на котором я буду писать небольшие десктопные программки, а возможно, когда-нибудь, сяду за микруху. > Но проблема в том, что мне нужно писать быстро, быстро видеть результат и быстро идти дальше. Программы небольшие (к примеру, полив автоматизировать, тексты определенной структуры обработать, гуй к консольной утилите запилить) и не слишком требовательные к производительности, но скорость разработки важна. > Сделан специально чтобы заменить дэлфи и осталось возможно кодить мышкой. > Блядь. Вот это вроде то, что нужно как раз (я что-то вроде современного делфи и хотел найти), но мне уж очень не нравится VS, Net и Мрикософт. Разве все то же самое нельзя делать с С++ в code::blocks/QtCreator?
>>761915 Да не так уж и трудно. На конкурентный доступ к различным элементам есть все гарантии, а если хочешь и к одному конкурентный доступ, то просто делаешь контейнер атомиков, делов-то. Проблемы только со сложными многоэлементными алгоритмами типа сортировки, но это скорее уже проблемы архитектуры, если такое понадобилось делать с управляемой конкуретностью, а не через async, где все прекрасно.
>>762004 В общем-то, пока его нет, может кто сможет помочь: Есть регулярное выражение, http://ideone.com/rDcDre , которое по идее вытаскивает название класса и его зависимости. В онлайн чеккерах все заебись, но в плюсах не работает нихуя. Причем это весьма странно, даже если просто попытаться определись слово class - все окей. Но взяв слово class_пробел_ - сосу хуй. (class\s). В чем проблема?
>>762136 >Немного не понял Есть разные синтаксисы регэкспов. Ты вообще доку читал? http://en.cppreference.com/w/cpp/regex/basic_regex А вообще, ты не экранируешь "\", так ято поебать какой ты там синтаксис используешь - у тебя в любом случае не заработает
http://ideone.com/J0NuqS В каком виде тут хранится список смежности Edge? Как его организовать по данным, если данные являются текстовыми (обозначения вершин - слова)
>>762268 Кто тебе сказал, что здешние аноны не подготовлены алгоритмически? А тот факт, что делаешь в лабе аж целую топологическую сортировку тебе чести не делает. К тому же ты не осилил готовый пример. Хуевый, кстати. Можешь сказать своему преподу, что писать код он не умеет.
>>762268 А мне нравится построение систем. ИТ, наверное, единственная область где ты можешь строить целые "миры" с нуля. У инженеров работа с железом, всякие расчёты, там нельзя взять и "просто придумать", этого недостаточно. А у нас можно.
>>761937 > если хочешь и к одному конкурентный доступ, то просто делаешь контейнер атомиков Что я только что прочитал... Какую проблему должен решить контейнер из атомиков?
>>762285 >ИТ, наверное, единственная область где ты можешь строить целые "миры" с нуля Даун, твои миры - это просто абстракция над кучей говна, которая интерпретируется электронными цепями.
>>762357 >это просто абстракция над кучей говна, которая интерпретируется электронными цепями Но ведь работает! И для этого толком не нужны материалы, человеческие ресурсы, время. Составляй правильные команды, а машина всё выполнит.
>>762374 >Мы разные аноны, но все равно ))))) >но все равно >))))) Пиздец, вот это ущербный к нам за зашел.
Ты, блядь, еще не понял, что никто не будет решать тебе твои лабы-высеры для того, чтобы тебя не выкинули на мороз из твоей шараги? Раньше надо было учиться, а теперь можешь страдать и идти нахуй.
>>762386 Пошел нахуй. Если контейнер не меняется, то вполне нормально хранить синхронизирующий элемент рядом с самим элементом данных. Если же контейнер может меняться, то тот питух с stl гордо шагает нахуй, потому что написание thread-safe контейнеров с мелкогранулярными блокировками (а то и lock-free) очень сложно.
>>762405 Пиздец. Я просто поинтересовался, какую проблему анон хочет решить, суя в вектор атомики. И вообще как он собирается это сделать, учитывая, что атомики некопируемые и неперемещаемые (и определены не для всех типов).
Тут влезли какие-то петухи и начали транслировать в тред свой /dev/urandom: атомики в куче, lock-free... Про что несут? Вообще охуешь.
>>762301 Проблему синхронизации доступа по записи к элементам же. Под атомиками я подразумевал не только std::atomic, но вообще любые атомарные типы. Например, велосипедные обертки. И да, я не спорю, что это хуевая архитектура, но так можно сделать, так что пусть не пиздит, что КОКОКОК STL НИКАНКУРЕНТНАЯ.
>>762405 Емнип, даже если не меняется, пихать в него некопируемые типы запрещено стандартом или как минимум ограничено какими-то костылями, типа emplace.
>>762424 > >>761915-кун Обычный тролль или даун, который тут уже на протяжении десятков тредов скулит о том, что STL говно по каким-то надуманным причинам.
Лабодауны это конечно понятно, НО ВСЕ ЖЕ. Как нахуй топологически отсортировать граф, имея список смежности, каждая вершина которого обозначается последовательностью символов (словом). Что-то вроде топологической сортировки зависимости файлов.
>>762480 У меня есть всякие имена, типа: имя1, ..., имя10 Список смежности имеет вид: имя1 имя10, в общем стандартно. Как я понимаю, надо присвоить именам какое-то значение. Типа имя1 = 1, имя 5 = 5 и тд Правильно?
>>762489 Блядь, во имя всех анонов, не помогай этому дебилу. Пусть идет книгу читает. Там всего 20 страниц надо осилить и потом он это задание не глядя сделает.
>>762536 Вот я не единого дня не программировал на Qt, но мне кажется я знаю как решить твой вопрос. Это же ООП-параша. Что надо сделать? Унаследовать говно и изменить в наследнике параметр. Полминуты в гугле: http://doc.qt.io/qt-5/qtqml-referenceexamples-coercion-example.html мимо-4-недели-в-с++-кун
>>761936 Хочешь дэльфи – иди скачай последний релиз дельфи. Кроме шарпа аналогов у него нету – совсем. C++ с Qt (как и с wx/gtk и тд) заметно сложнее, и "шлёпнул кнопку, даблкликнул, написал" – не получится.
>>762617 Всё. Компрессующе-перемещающие GC (хорошие для серверов работающих 24/7, но слишком оверхедно для десктопа), хэловорлды на 300 мб, требуется пол часа на запуск вм, жит ебёт средненькие десктопные процессоры.
В том же дотнете половина этого исправлено, и есть те же асинки для отзывчевого гуя и тд.
>>762622 А теперь открой какой нибудь llvm в цлионе/эклипсе цдт, посмотри на графики оперативки и процессора которые при пустом старте 700+мб съедают без плагинов, и подумай что же не так.
>>762631 Не знаю как сейчас, но полгода назад clion был полным дерьмищем, даже если забыть про потребление ресурсов. У меня половина кода была красная, и автодополнение тоже работало только для половины кода
>>762633 А мне норм. Не идеально, но норм. Пробовал с gedit перелезть на QtKreakl, Code::Blocks, Eclipse и ещё на что-то, но всё не так. Не смог без долгого копания в настройках выдрессировать IDE под себя.
А у Clion поменял отступы пробелами на отступы табами и ещё пару опций стиля подтюнил — и всем доволен. Больше в настройки лазать нет необходимости.
>>762642 Ну на мой взгляд в том при помощи чего ты пишешь код должно быть: - Навигация по символам(семантическая) - Переименование символа - Автодополнение(семантическое) - Шорткаты для быстрой работы с тесктом
>>762433 тут ты промахнулся. недавно понадобилось код на шаблонах-алгоритмах в многопоточное окружение перевести. боль и страдание, особенно в с++03. хотя обмазывание мьютексами помогло. сейчас смотрю на локфри контейнеры
>>762696 > ссылка на неконст инт инициализируется литералом (а именно 0). Ты-таки не прав. °pointer это lvalue. Ты ведь можешь ему присваивать, типа "°pointer = 1;"
Так что всё в порядке с инициализацией неконстантной ссылки.
Надо определить ближайшие объекты к курсору. В флоате храню расстояние, по причине автоматической сортировки карты - будет ли нулевой элемент ближайшим к курсору? Как записать map с float ключем, а в значении - ссылка на элемент вектора? блять походу я тупой, даже с гуглом не нашел как в декларации записать ссылку на вектор
Есть некоторый проприетарный софт, я хочу к нему написать плагин также я ньюфаг. Но документация скудна и написана на отъебись. Есть header файлы и автоматически сгенеренные doxygen html-страницы.
Сгенерил uml-диаграмки по некоторым интересующим меня классам и стало немного легче разбираться. Есть ли еще какие-нибудь трюки, которые помогут быстрее разобраться?
>>762696 > инициализируется литералом (а именно 0). Ладно lvalues, но что такое "литерал" не знать нельзя. Литерал только в `int a=0;' справа от `=' присутствует.
А вам самим не кажется, что вот эти вот ваши типа советы: >>762610 >>762610 противоречат не только моему вопросу, но и вашим же постам: >>762625 >>762618 >>762616 ? К тому же, вы до сих пор не объяснили, ЧЕМ шарп будет лучше крестов.
>>762614 Но он не слишком производительный, не особо популярный и с работой будут проблемы, а уж перспективы совсем печальные. Чем шарп оказывается в данном случае ближе крестов, опять же? Тут тоже, насколько я знаю, "не тащи шарп на десктоп".
В чём проблема джавы на десктопе? Вам что жалко лишних ссаных гигабайтов? Так как раз за счёт большого количества памяти нет проблем со сборщиком мусора.
>>762781 Хуёво знаешь. Шарп в отличии от жявы умеет в десктоп: там и специальный (не серверный) GC есть, и асинки для отзывчивого гуя, и крутые средства разработки этого самого гуя.
Попробуй сравнить например работу студии и идеи.
>>762800 Как раз из-за большого её кол-ва он останавливает мир на пол часа каждую итерацию.
>>762806 Чем идея хуже студии? Мне она таки не меньше нравится как минимум, но я нуб и не могу судить. Я знаю, что оно там есть, только это никто не использует, вакансии - веб, веб, хуеб, энтерпрайз, веб, юнити. >>762786 Ок. > вы до сих пор не объяснили, ЧЕМ шарп будет лучше крестов Проще и быстрее - это общие слова, они не несут никакого смысла без раскрытия.
>>762806 Умеет. Есть. Крутые. Что, если человек не хочет воровать спермостудию, говноедствовать с моно, ебаться с винформами, впф и прочим шлаком, читать говеные спермодокументации и закругляться в юнити и ксамарине? Это ж гной, блядь, говно, червь-пидор. Как вообще можно в плюсотреде такое советовать?
>>762811 >Чем идея хуже студии? Скоростью работы. Хочешь сравнить наглядно – открой один и тото же большой проект в обоих, посмотришь чем ява от шарпа отличается. >вакансии - веб, веб, хуеб, энтерпрайз, веб, юнити. У явы - энтерпрайз, энтерпрайз, энтерпрайз. >Проще и быстре Ты нюфаг, тебе больше информации не нужно. Перестань ебать мозги и попробуй написать что-то там и сям, пока граблями ебало себе не пробьёшь - не поймёшь.
>>762817 > У явы - энтерпрайз, энтерпрайз, энтерпрайз. Это с самого начала было понятно. Поэтому я тут, а не в треде по Java. Хотя там тоже веб, к слову. >Проще потому что слишком сложно объяснить, чем Ясно.
>>762285 >ИТ, наверное, единственная область где ты можешь строить целые "миры" с нуля. Хуйня. Слишком много ограничений. То ли дело математика - можешь строить себе манямирки сколько влезет.
>>762824 Двачую. Самый кайф - заниматься исследованиями в алгебраической геометрии за рубежом. Читаю работы ученых и завидую им. Еще и финансируют науку значительно лучше, чем у нас.
Что я делаю не так? Алгоритм такой: прохожу по массиву и для каждого элемента бинарным поиском определяю, есть ли в массиву такой элемент, который в сумме с текущим дает заданное число. Если такой элемент есть, нахожу его линейным поиском и возвращаю два индекса. Должно работать за O(nlog n).
>>762883 А что он тебе должен делать? Компьютер только и умеет, что взять говно из памяти и положить в регист, сложить два регистра, положить результат в память. Страдай.
Эх, анон, как же хочется библиотечку для работы с excel файлами. Маленькую, бесплатную. Чтобы можно было вместе с ней свернувшись под пледиком читать .xls файлы без ole и com. Может ты анон знаешь где мне найти такую библиотечку? Очень плохо без неё.
>>763010 Знаешь почему bool на x86 равен 1 байту? Потому что процессор может адресовать минимум 1 байт. Будет другая архитектура, на которой минимально адресуемая ячейка 4 байта, будет у тебя bool 4 байта.
>>763011 >Если тот if фактически один раз срабатывает, то ты плохо написал код и иди переписывай Тот if срабатывает только один раз, когда бинарный поиск находит элемент, который в сумме с текущим дает нужное значение. Как это переписать? Для таких случаев есть стандарты?
ISO1488-юрист в тредеАноним06/06/16 Пнд 18:06:49#424№763022
> Будет другая архитектура, на которой минимально адресуемая ячейка 4 байта, будет у тебя bool 4 байта. В модели памяти C++ минимально адресуемая ячейка всегда называется байтом. Так что, "минимально адресуемая ячейка 4 байта" это нонсенс.
>>763027 >То все числовые типы в С++ будут 1 байт? Выходит sizeof вернёт 1, а на самом деле там 4 байта? Может 1 байт быть 32 бита? не дописал случайно отправил
>>763029 >>То все числовые типы в С++ будут >1 байт? Ну, как минимум, long long требует 64 бит, так что sizeof(long long) будет равен двум (как минимум).
> Может 1 байт быть 32 бита? В модели памяти C++ — да. char это синоним байта и sizeof(char) гарантировано равен одному. А CHAR_BIT будет равен 32
Почему все говорят, что c++ сложный язык для начинающего? Разве за 1-2 года, я не выучу все основы, если действительно буду стараться? И раз он сложный, то потом будет проще.
Хочу ознакомиться с этим знаменитейшим фреймворком и пилю первую программку с GUI, которая должна решать квадратные уравнения. Наваял в Qt Designer графический интерфейс, написал в заголовочный файл все необходимые функции, теперь сижу и туплю, как это всё совместить. То есть чтобы пользователь ввёл в окошечки коэффициенты, они отправились из этих окошечек в аргументы соответствующих функций, а потом в другое окно был выведен результат соответствующий функции в качестве ответа.
Знаю, что тут ключевые слова "сигналы" и "слоты", загуглил, но ничего не понял, в разных местах приводятся разные примеры, сам только запутался.
Структура программы: main.cpp -- тут всё понятно, ui_gui.h -- графическая форма из Qt Designer, equation.h -- функции для решения уравнения, program.h и program.cpp относятся ко всему необходимому из Qt.
Просто напишите, пожалуйста, как подать из GUI-окошка QPlainTextEdit число в аргумент функции set_a и как результат функции solution_1 вывести в QTextBrowser, например. Это надо, видимо, как-то вписать в конструктор в файле program.cpp. С остальным разберусь по аналогии.
>>763180 Вот он: http://pastebin.com/ZqyVKRe1 Хотя не понимаю его необходимость, он же сам автоматом возникает при сборке. Собираю так: qmake -project qmake file.pro make
>>763196 >>763196 То есть ты хочешь сказать, что понял как собирать qt проекты, но непонял что такое сигналы/слоты? Подозрительно
Без задней мысли создаешь сигнал, возвращающий структуру где сохранено то что ввел пользователь и соедини его со слотом принимающим на вход такую структуру и в нем же можно ответ вывести
>>763179 Палю тебе охуенный лайфхак: 1) В классе элемента/виджета, в котором ты что-то там вычисляешь, создаешь член GWidget uiWindow; или что-нибудь похожее. 2) В конструктор этого элемента у тебя передаётся parent. Присваиваешь его тому члену, что ты создал. 3) Дальше обращаешься к любому элементу/виджету через: QLineEdit le1 = (QLineEdit)uiWindow->findChild<QLineEdit>("lineEditPosition"); std::string str = le1->text().toStdString();
>>763215 Ну, это пример из моего приложения и имена соответственно не дефолтные, но ты понял. parent - я имел ввиду главное окно, на котором все остальные элементы.
>>763207 >>763215 >>763217 Сижу сейчас, обдумываю, соображаю. Спасибо за подсказки! Потом отпишусь, если не дойдёт до мозгов.
>>763203 >То есть ты хочешь сказать, что понял как собирать qt проекты, но непонял что такое сигналы/слоты? В общем-то да. Как собрать qt проект находится на первой же странице любого поисковика. Qt Designer у меня был по дефолту в системе предустановлен Slackware, но решил его и Qt только сейчас опробовать, там исключительно мышковозякания, много ума не надо, во всяком случае справился даже без мануалов.
>>763205 Да, я тупо запутался. Наверное надо чуть-чуть поосмыслить и в голове уложится. Когда смотрю примеры в документации, то всё вроде бы легко и понятно, например: QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit())); тут connect соединяет кнопку quitButton и даёт сигнал при её нажатии в само приложение qApp на слот quit(), что закрывает программу. А вот как самому что-то подобное написать, почему-то теряюсь.
>>763341 Похуй на синтаксис, всё равно все не-игрушечные компиляторы парсят с помощью рекурсивного спуска. А он отлично справляется с не контекстно-свободными грамматиками.
>>763538 Cпасибо, с вашей помощью решил задачку на загадывание числа от 1 до 100, вы можете оценить решение: http://ideone.com/Y17Y1X А помогли мне тут: >>760607
>>763663 Вообще говоря, это неправда. >>763617 RVO/NRVO допустимы, но не обязательны. Имеет право вызвать конструктор перемещения, это unspecified behaviour.
>>763665 И да, перемещение более затратно, чем RVO, поэтому ты только обосрешься, если так сделаешь, потому что почти все компиляторы сейчас поддерживают RVO.
>>763695 Нет. Есть три разные вещи: undefined behaviour, unspecified behaviour и implementation-defined behaviour. Первое это гроб гроб кладбище пидор, например, переполнение или несинхронизированный доступ к объекту из разных потоков. Может произойти что угодно, скажем, Уильямс в своей книге пилил, что он встречал случай, когда железо в буквальном смысле воспламенилось из-за UB, лол прохладная стори, но суть понятна. Implementation-defined означает, что в доках платформы должно быть написано, что произойдет, хотя на разных платформах может быть по-разному. Например, sizeof(int), поддержка conditionally-supported фич, в общем, то, что ты назвал compiler specific. А есть еще unspecified behaviour, это как бы промежуточное между ними. Плохого не произойдет, но документировать конкретное поведение платформа не обязана, и, более того, даже в пределах одной программы два одинаковых выражения с unspecified behaviour могут вычисляться по-разному. Яркий пример - порядок вычисления аргументов функции, в разных вызовах может быть разный порядок из-за оптимизаций.
Так вот, RVO/NRVO это формально часть copy elision, которое ради оптимизаций сделано unspecified. Компилятор волен сам решать, вызывать конструктор или нет для каждого конкретного случая, даже если возможность не вызывать есть всегда.
>>763972 Ты тупой, блядь? Выравнивание определяется максимальным среди агрегатов выравниванием. У первого агрегата это 4, ибо long. У последнего - 1. Поэтому структура выравнивается по четырем байтам, размер добивается от 9 вверх паддингом до минимального, кратного четырем, т.е. 12.
Поцоны нужна помощь. Есть бинарник на асме. Как сделать так, чтобы процессор выполнил его при boot`e с флешки? Читал, что нужно в MBR флешки записать, но немогу приложить ума, как это сделать. Крч помоги анон
>>763985 В венде с отключенным автозапуском - никак. Никто просто не станет выполнять твой код без явного указания пользователя. MBR это разметочная таблица, она интерпретируется как данные.
>>763991 Блять, при чём тут Форточка вообще? Я выключаю комп, включаю, захожу в биос-меню ставлю приоритет загрузки с флешки на макс, boot-аю с флешки. MBR - главная загрузочная запись, как-то так, 512 кб, вроде.С неё биос начинает считывать. В осях там загрузчик. ВОПРОС : как туда что-то записать?
>>764042 >геморрой и простатит Кстати, говорят, что фапать сидя вредно. Лучше фапать стоя, лежа или в позе свечки, но не сидя. Фап сидя - простатит мерзкий.
>>764048 Он просто открыл старые архивы двача и научился в туда постить. Теперь он на том дваче набигает, страдает от одиночества и угнетения черным битардом.
>>764031 MBR хранится в самом начале диска. При загрузке с этого диска MBR копируется по адресу 7c00 и туда же передается управление. То есть нужно хуярить асм код прям в начало диска. И да его размер должен быть не больше 512 байт.
>>764042 Я не он, но геморрой скоро наступит. Пока только жопа треснула. Со зрением все в порядке. Проблемы с жопой, думаю есть иили будут у любого войтишника/дальнобойщика. Еще у некоторых начинаются проблемы со спиной/шеей.
>>764097 Нахуй оно вообще нужно, если выравнивание нужно только компилятору для генерации корректного кода, работающего с кастомно выровненными данными?
>>764004 иди читай танненбаума про загрузчик. MBR показывает где лежат данные. дальше биос идет в указанный сектор и читает с первого или второго сектора (не помню). там специфический формат. например, для win nt, загрузчик загружает драйвера фс, ищет конфиг и передаёт управление указанному ядру. в Linux похоже. разве что grub умеет сразу запускать образ ядра. тебе лучше не MBR дрочить, а подружиться с grub, который загрузит тебе хоть pe, хоть небо, хоть твою мамку
Короче этой командой через PARTCOPY надо записывать partcopy boot.bin 0 200 -f0(только поменять аргументы для флешки) Да сука, bin, никакой нахуй не листинг, а бинарникяжговорил
>>764247 Также хочу отметить, что меня интересует только многопоточность через подключаемые библиотеки, а не через средства самого языка. Компилятор будет C++03.
Можно ли заставить программу (бинарник под виндовс) писать файлы не на диск, а на псевдодиск, который будет распологаться сразу в памяти? Как такое лучше всго сделать?
Мне это нужно вот для чего. Я эту программу запускаю с ключами, она читает файл, декодирует его и пишет вывод в 3 файла на диск. Затем я эти 3 файла уже обрабатываю в своей программе. Очевидно тут лишний этап записи/чтения. Но т.к. исходников для этой программы у меня нет, то хотелось бы как-нибудь обойти это ограничение.
>алгоритм... >float как ключ ибо расстояние хранится в флоате Планировалось так: 1. Сравниваю координаты всех объектов в квадранте с областью под курсором, тем самым нахожу все объекты под курсором. 2. Вычисляю расстояния этих объектов до курсора. 3. Контейнер map сам определяет ближайший объект.
Далее планировалось взаимодействие с этим объектом, через первый элемент map.
Только возникли проблемы: 1. как вызвать первый элемент map? 2. map<float, vector<Obj>& > Map; как заполнять такое?
3. Map вообще хранит индексы? Если нет, какая сложность обращения к элементу? Какой другой контейнер имеет индекс, при этом ассоативен и сортируем?
>почему не quadtree? Пространство уже поделено на регионы-квадранты многомерными массивами, про quadtree тогда не знал.
Арматурой забили скинхеды,
Надломился предательский лёд.
Его руки, подготовлены не были к драке
И он не желал победы
Я теперь буду вместо него.
ОП, плавает в формалине
Несовершенство линий
Движется постепенно
У меня его лицо и имя
Свитер такой же синий
Никто не заметил подмены.
ОП не придет - руки были в змеиной норе
Голова в осином гнезде
А спина в муравьиной куче
Буду я - я из более прочного теста
Я достоин занять это место
Я многое делаю лучше.
ОП плавает в формалине
Двигаясь постепенно
В мутном белом тумане
У меня его лицо и имя
Никто не заметил подмены
Ключи проверяя в кармане.
Старший брат:
Предыдущий:
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-треды