24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Под покровом ночи звездной Дремлет код крестовый; Весь рантайм и все баги Белым снегом замело… И шаблоны там, по коду, В семь гигов при компиляции Поджигают ваш пукан. На огонь бежит сугробом Со звездой толпа нюфагов, Под оконцами стучатся, И «Слава Бьярне» напевают. «Крестобляди! Крестобляди!» Раздается там и тут. И в нестройном блядском хоре Так таинственна, чиста, Так отрадна весть святая О рождении стандарта…
Есть какие-то гайды, что нужно знать джуну на собеседовании(в приличную компанию)? https://habrahabr.ru/post/117996/ Вот это изи. Но нужно что-то поновее
День добрый! Посоветуйте альтернативу libevent для написания простейшего http-сервера на C++ (libevent как я понял не дружит с win х64, что меня не устраивает). Есть еще libuv и libеv, но там вроде бы "из коробки" в 10 строчек кода веб-сервер не запустишь - нужно писать свои велики. Есть что-то еще?
>>904695 Он почти в 10 строк пишется и на сокетах/epoll/kqueue.
Именно из плюсовых — boost.asio (очень многословно и оверинжинирнуто), casablanca (очень няшно, на последних плюсах, советую), ещё какой нибудь libsocket.
Почему зарезервированное место памятью массива, пусть даже и неиспользованное хранится на жестком диске, а не в оперативной памяти? Размер выходящего файла при таком коде - 93мб.
>>904746 У тебя же данные которые должны сохранятся между запусками программы. Следовательно они должны быть записаны в сегменте данных. Дальше зависит от оптимизаций компилятора. Твой вариант - оптимизирована скорость запуска за счет размера программы (в статической памяти хранится полностью весь массив в "готовом" состоянии). В одном из вариантов продемонстрированным аноном выше оптимизирован размер программы за счет скорости запуска - хранится только имеющая смысл часть массива (нулевые байты отброшены), а полностью массив будет создан и подготовлен уже в рантайме.
>>904774 >>Твой вариант - оптимизирована скорость запуска за счет размера программы (в статической памяти хранится полностью весь массив в "готовом" состоянии)
Я конечно новичок и писать программы толком не умею, но с каких это пор копирование в памяти стало более медленным чем чтение с диска?
>>904774 >>904755 >>904754 Я вернулся. Так вот еще чего могу добавить. Это случается, когда я делаю двумерный массив. То есть с обычным такого не происходит. Все равно, спасибо за ваши версии)
>>904887 Это случается не из-за того что ты делаешь двумерный массив. Это случается из-за того, что ты образуешь огромный литерал задавая первые его элемент.
Когда ты напишешь char value[max] = { 'a', 'b', 'c' } размер файла будет пропорционально велик. Дело в том, что задавая таким образом массив ты говоришь: хочу литерал, первые три байта которого - 'a', 'b', 'c', остальное заполните нулями. Это будет статический блок памяти, который должен быть загружен при запуске программы. Храниться он в data-блоке. https://en.wikipedia.org/wiki/Data_segment
Есть некий банковский софт на джаве, насколько есть смысл его переписывания на С++ и переезд на опенсоурс стек? Вывод интерфейсов нужен на веб и гуй. В результате перехода понизится стоимость поддержки, т.к. стоимость джависта и С++ разные, тем более ничего изобретать не нужно будет после переписывания, мелкие изменения и дополнения. На порядок повысится производительность системы. Интересно что скажете по делу.
>>905036 С плюсовиками которые будут стоить меньше джавистов перформанс только упадет, из каждой пизды будут лезть баги и скорость разработки упадет ниже твоего айсикью.
>>905052 Когда ты набираешь лоу квалифаед шит готовый работать за еду и твой язык не подтирает им зад — это вообще меньшая из проблем, учитывая что раньше все работало на жаве и рамы хоть жопой жри.
>>905060 Ну, ты же на полном серьезе считаешь что стоимость программиста зависит от языка, а не решаемых задач, и что плюсовики обойдутся дешевле. Так вот те что обойдутся дешевле — никогда не отобьют даже сотой части денег вложенной в ту же жвм, которая тебе достается халявно.
>>905060 Потому что под нижней планке зарплаты работать пойдут разве что байтоебы с заводов (та самая часть рынка плюсов, которая опускает показатель средней зп), у которых развитие остановилось на "ой бля битмаска битмаска не выровнять сука блять блять классы это оверхед нахуй rtti я все наебашу на юнионах всего-то за пару дней".
>>905036 >банковский софт >транзакции, базы, CGI, веб, хуеб >c++ Чтобы это работало и не рассыпалось придется искать плюсовиков значимо более дороже средних жава-сеньеров. Плохая затея. Но перфоманс вырастет, да, в теории.
Анончики, такой вопрос встал. Уже достаточно долгое время упарываюсь программированием на крестах на работе, естественно, окромя СТЛ наигрался уже с кучей фреймворков, но, мне кажется, что меня эта рутина уже конкретно доебала. Думаю начать оттачивать архитектурные навыки (ну знаете, архитектура программного обеспечения и все такое, молодое направление и вся хуйня). Стоит ли оно того, анончики, или нет. Я понимаю, всяко эта хренотень впоследствии окажется полезной (рассматривать структуру ПО сверху, уже прикидывать что и какой "скелет" (слеш) паттерн можно применить), но стоит ли в нее прямо таки упарываться (читать хуевы кучи книг и разбирать примеры), или все-таки это лажа в роисси мало популярная?
>>905757 > архитектура программного обеспечения и все такое, молодое направление и вся хуйня С каких пор оно молодое? Думаю стоит почитать банду четырех, рядовому программисту точно пригодится, проектировщику наверное тоже. На счет популярности профессии не скажу, в крупных компаниях с большими проектами точно есть.
Анон, установил Mingw, например: *.cpp у меня находится в C:\folder, это мне нужно в консоле путь прописывать? А как в линукс? просто в директории /houm сырцы оставлять? или тоже прописывать путь? Подскажите книгу чтобы в ней про Gcc ключи и про утилиту make можно было почитать, на русском
>>905811 Про паттерны начитался уже, в том числе эту книгу тоже. Думаю, грызть или нет уже более специфичные области проектирования (конкретно разбиение на системы, подсистемы, виды, документирование и прочее и прочее), несмотря на то, что это полезно в любом случае, не хотелось бы тратить свое время впустую.
>>906205 На линуксе тебе никаких MINGW устанавливать не нужно. Там GCC и G++ идут по дефолту при установке. В том же /home. создаёшь папку, например ~/home/workspace/cpp. Далее выбираешь в консоли эту папку (необязательно, но удобно), на Ubuntu команда cd /workspace/cpp. И компилируешь g++ main.cpp
>>906329 Хотя Торвальдс критиковал версию 4,9, на линуксе стоит 4,9,2 на винде 5,3, вот если можно было обновить в линуксе до более новой версии как например youtube-dl -U, было бы здорово
>>906331 Пиздец, как ты в линукс забрался с неумением компилировать. Там тебе достаточно один аргумент указать при конфигурации (а именно --prefix, чтобы не серануть мимо) и собрать гусей. Что может быть сложнее-то?!
2 вопроса. Вопрос первый: слева на картинке 2 ситуации. Почему ситуация Б легальна, а ситуация А уже сообщает об ошибке памяти. Я попробовал сделать new int [26], тогда максимальное число значений массива стало 29. Компилятор gсс/g++. Второй вопрос: можно ли другим способом динамично добавлять объекты во время работы программы? То чем я сейчас пользуюсь на картинке справа.
>>906359 >Почему ситуация Б легальна, а ситуация А уже сообщает об ошибке памяти. Нипочему, просто повезло с Б. Оба примера могут падать на другой машине/другом компиляторе. Тебе мама разве не говорила, что чтение/запись за границы маасива это UB?
Часик в сладость. Есть ли тут великие и добрые люди, которые пояснят мне, тупому студентику, как реализуются в С++ такие концепции ООП как композиция и наполнение.
>>906427 у меня в лекции написано так: Наполнение - количество объектных полей может меняться от нуля до достаточно больших значений (реализуется с помощью списков)
>>906432 Странные названия. Я больше знаком с агрегированием и композицией. Только в твоих терминах агрегирование - композиция, а композиция - наполнение ("мои" термины перед дефисом). Если кратко, композиция подразумевает такую связь объектов, при котором один объект (родитель) становится владельцем другого или других (дочерних). При уничтожении родителя уничтожаются все дочерние объекты. При агрегации один объект (родитель) лишь хранит другие (дочерние), но не является их хозяином, то есть при уничтожении родителя дочерние объекты не уничтожаются, в отличии от агрегирования.
>>906413 Говорила. После того как это заработало я полез в гугл. Потом сюда. На винде это не заработало совсем. Ну раз так неправильно, то делать так наверное не стоит.
Почему у меня программа вылетает с ошибкой, если я вызываю delete[] для массива посреди main(), не вылетает при вызове того же в другой функции, не вылетает при delete указатель?
Откуда взялся этот адрес? Рандом? Это адрес в виртуальной памяти? Ниже упомянут что для mov нужен адрес в реальной памяти. Разве есть какаята проблема с переводом из виртуальный в реальную? Нужно же просто знать таблицу страниц виртуальной памяти. Она всегла есть независимо от того какую программу запускать.
>>906657 delete можно применять только к указателям возвращенным new. Установить указатель на случайную ячейку памяти и заюзать туда delete нихуя не даст нормального.
>>906663 int* arr = new int[3]; Это, по-твоему, указатель на случайную ячейку памяти? Точно такой же указатель "на случайную ячейку памяти" есть в f(), только там он нормально удаляется.
>>906693 У тебя переменной b не существует после выхода из if else. Можно сделать указатель на void, а в if else выделить память нужного типа но мнекажется эта хуйня какая-то
>>906587 >Откуда взялся этот адрес? Рандом? да, так линкер положил. но можно задрочить линкер, чтобы складывал по определенным адресам
>Это адрес в виртуальной памяти? да, очевидно. адресами в реальной памяти заведует только меморименеджер в ядре
>Ниже упомянут что для mov нужен адрес в реальной памяти. Разве есть какаята проблема с переводом из виртуальный в реальную? Нужно же просто знать таблицу страниц виртуальной памяти. Она всегла есть независимо от того какую программу запускать. wat
>>906587 > Откуда взялся этот адрес? Рандом? Если ты про 0x8048470 то там (скорее всего) будет именно такое число, но само по себе оно взято произвольно. Возможно там есть какая-то кулстори почему получилось именно такое число - но по сути оно случайно. > Ниже упомянут что для mov нужен адрес в реальной памяти. Разве есть какаята проблема с переводом из виртуальный в реальную? С этим ебется ОС. Программа оперирует с виртуальной паматью, так как будто это реальная - определить что ей подсовывают именно виртуальную память она может только по косвенным признакам (например похожесть адресов выделенной памяти при каждом запуске).
>>908448 Нет. >>908449 Не раньше стандарта двадцатого года. Именно потому что не хотят выкидывать старое говно. >>908532 Ты что! А как же котик и собачка унаследованные от животного????
>>908536 Для рашки это хороший вариант для одиночки, если еще общагу прилагают. Если по еде и жилью обеспечен, то считай ты успешен. 5к как раз на одежду хватит.
Когда искал работу видел вариант за 4к - в местной областной больничке электротехником, лампочки менять, проводку, и т.п. Но 4к - этого даже на жилье не хватит, а свое жилье больничка не предоставляет. Не говоря уже о питании.
И как там работать предлагают? Либо тратить 3к на еду и жить на улице, либо оплачивать коммуналку этими 4к и питаться святым духом.
ИМХО дворником за 8 выгоднее - можно и квартиру оплатить и еду. Но на одежду уже не хватает.
Нужно сделать стрим скриношотов, отправляя по TCP; Нужно это делать быстро, поэтому решающим фактором можно считать размер изображения, поэтому нужно сделать скрин, сжать его, засунуть в буфер и отправить; когда я использую https://msdn.microsoft.com/en-us/library/windows/desktop/dd183402(v=vs.85).aspx , на выходе получается 8 мб, причем если пересохранить любым редактором в .jpg размер будет 300 кб (!) без существенной потери читаемости. Нагуглил только класс CImage, который не включен в инклюды gcc. Все остальные предлагают пересылать все 8 мб.
>>909269 Берешь ffmpeg, заворачиваешь стрим на него, он работает быстро, убирает избыточность, сильно снижает битрейт практически без потери качества. На другой стороне разворачиваешь стрим любым видеоплеером. Это выгоднее, чем пережимать покадрово в жипеги или стримить битмапы. И велосипеды не нужны - все уже готовое.
Как на си или си++ реализовать полиморфизм кода, чтобы функции каждый раз компилировались по-разному? Есть ли для этого какие-то средства метапрограмминга? Например, чтобы вместо вызова NtMapViewOfSection генерировалось
>>909339 Заебатая хуйня, для вебки то, что нужно. То есть, за одну итерацию я беру битмап, хуярю однокадровое видео из этого битмапа, а с другой стороны воспроизвожу по одному видео за пакет? Это прокатит? >>909406 Если все понимаешь - почему бы и не подсказать, я же не платину спрашиваю, а вполне конкретные вещи.
>>909603 Если что-то нормальное нужно то SFML, например, там даже вроде книга есть с примером разработки игры. Если тебе совсем просто попробовать то можно прямо на форме рисовать в Qt или VS - но будет выглядеть как гавно, хотя у них там вроде как есть двойная буферизация, но даже тетрис они уже не тянут (так как не предназначены для этого). Но попробовать можно.
>>909648 >Проще снять защиту от записи со страниц с кодом, чем об стековое говно руки выкручивать. Тогда тебе придется выкручивать руки об голый асм-говно, а то и машкоды вручную пердолить. Форт гораздо удобнее.
>>909671 Форт удобен как макроассемблер плюс маленький и простой рантайм. Стековая машина удобнее регистровой просто без вариантов, поэтому ее в каждую первую ВМ и пихают.
>>909675 > Стековая машина удобнее регистровой просто без вариантов, поэтому ее в каждую первую ВМ и пихают. Код для этих ВМ пишут не руками, а компилятором. Для компилятора стековая машина удобнее, для человека — нет.
>>909681 Ебанутая какая-то у тебя логика. Если так посудить - давно под все машины код пишут не руками, так какого хрена везде не стековые машины? Конпеляторам жи удобнее
>>909694 >Ебанутая какая-то у тебя логика. Нет, у тебя. Питоновская VM писалась создателями языка чтобы им было проще компилировать в этот байт-код. Аналогично JVM затачивалась конкретным создателем компилятора под для упрощения компиляции определённого языка. И т.д. >Если так посудить - давно под все машины код пишут не руками, так какого хрена везде не стековые машины? Конпеляторам жи удобнее Унылое передёргивание.
>>909694 >Если так посудить - давно под все машины код пишут не руками, так какого хрена везде не стековые машины? Конпеляторам жи удобнее Очевидно потому, что создатели реальных машин руководствуются удобством компиляции далеко не в первую очередь.
>>909681 >Для компилятора стековая машина удобнее, для человека — нет Аллокация регистров - NP-полная задача, на решение которой требуются вычислительные ресурсы, не важно машина их использует или мозг программиста. Плюс форт обычно не чистая стековая машина, почти во всех реализациях есть переменные. Кроме того стеков два, и использование стека возвратов для временного хранения значений значительно уменьшает стековую акробатику. Не говоря о том, что модель с двумя стеками предлагает гораздо более высокий уровень абстракции, к тому же легко воспринимаемый человеком, в отличие от асма с регистрами. Для компилятора удобнее не стековая машина, а SSA или CPS, по которым можно сразу делать кучу оптимизаций.
>>909722 >Для компилятора удобнее не стековая машина, а SSA Спс паржал ещё!
Если для компилятора удобнее SSA, почему же clang выплёвывает LLVM-код не в SSA-форме, а с кучей ячеек памяти, куда по 100 лишних раз пишутся и откуда читаются данные? Только mem2reg-пасс LLVM-а превращает этот ужас в SSA. Почитай http://llvm.org/docs/tutorial/LangImpl07.html , что ли.
>>909722 >Аллокация регистров - NP-полная задача, на решение которой требуются вычислительные ресурсы, не важно машина их использует или мозг программиста. Прадалжаю дико ржать. Если неважно, использовать машину или мозг, зачем вообще машины используют для решения задач?
>>909753 >почему же clang выплёвывает LLVM-код не в SSA-форме, а с кучей ячеек памяти Потому что clang и сишка. LLVMу-то полюбасу удобнее нормальный SSA принимать. >>909755 >зачем вообще машины используют для решения задач? Ты тред читаешь вообще? Пельмень вверху >>909681 считает, что под регистровую машину (асм) человеку удобнее писать, чем под стековую (форт), что явная чепуха.
>>909722 > Плюс форт обычно не чистая стековая машина, почти во всех реализациях есть переменные. В большинстве VM есть переменные и инструкции вроде LOAD, которые снимают с вершины стека адрес и вместо него кладут значение. > Кроме того стеков два На асме можно написать библиотечку-реализацию стека и завести себе хоть 500 стеков.
>>909782 Ты с логикой дружишь вообще? Объектный код делает LLVM, он компилятор, ему удобнее SSA. Clang - транслятор из сишки в формат LLVM, он делает как умеет, с аллокациями на стеке, в надежде, что LLVM дальше все разрулит.
>>909785 >На асме можно написать библиотечку-реализацию стека и завести себе хоть 500 стеков А на форте можно написать реализацию асма, и завести себе хоть 500 ассемблеров. Суть в том, что с двухстековой машиной работать ничуть не менее удобно, чем с регистрами в асме.
>>909786 >Ты с логикой дружишь вообще? А ты, долбоёб? Речь шла про то, что создатели язычков высокого уровня запиливают под них стековые VM, т.к. под них крайне легко комилировать: высрать код для стековой машины можно просто правильным обходом AST (тут я слегка утрирую, конечно, но в общем это верно)
Ты пришёл и начал тут пиздеть что высирать удобнее не код для стековой машины, а код в SSA-форме и за сей наглый пиздёж был немедленно обоссан.
SSA удобнее для оптимизаций, но компилировать в SSA это pain in the ass. Понял, быдлан?
>>909792 Я говорил, что компилятору удобнее с SSA или CPS работать на входе. Компилятор - тот, кто из промежуточного представления машинный код делает. Так ясно? Олсо разницы во что выводить, SSA или стековый язык практически нет - они переводятся друг в друга элементарно.
>>909722 А вот это уже аргумент. Действительно, задача распределения данных по куче регистров - очень ресурсоемкая задача. Потому все эти gcc и тормозят.
Для стековых машин конпеляция быстрая и простая - регистр всего 1-2, причем с накоплением, знай себе пихай да напихивай.
Но это и минус: когда у тебя много регистров, можно совершить значительно больше оптимизаций. Регистр позволяет банально не выгружать данные во время операций, сохраняя нить исполнения (нить вычислений одних и тех же данных) в тактовой доступности (на больших чипах полтакта). Т.е. регистры позволяют быстро и дешево переключаться между несколькими нитями исполнения одного потока, не трогая кэши и память, работая таким образом сверхбыстрым буфером. А иногда и распараллеливая нити исполнения: многие операции работают сразу с несколькими регистрами параллельно, фактически параллельно выполняя операцию над несколькими нитями исполнения - тут вообще кратный рост скорости, если нити данных грамотно свести в такие регистры. Зависимость тут походу нелинейная: быстрая оценка говорит что каждый следующий регистр ускоряет код больше, чем предыдущий. Но регистры стоят очень дорого. За каждым регистром скрывается сотня переключателей и шин. Все это ест много энергии, снижая энергоэффективность, и понятно, сильно ограничивает тактовую частоту - шины получаются намного длиннее, чем необходимо в случае одного регистра.
Стековые машины этих недостатков не имеют: они просты, миниатюрны, энергоэффективны, могут позволить себе бОльшие частоты, и к тому же дешевы. Их можно клепать тысячами на той же площади, куда влезает одна регистровая. Но уровень оптимизаций для них ограничен - код будет исполняться медленнее, чем на регистровых машинах.
Т.е. тут война параллельного кода с последовательным: стековые машины хорошо работают с параллельным кодом, но плохо переваривают последовательный, за счет того что последовательный код для стековых машин сложнее оптимизировать и распараллелить. А т.к. большая часть кода таки последовательная, регистровые машины в большинстве ситуаций получаются более производительными, чем стековые. За счет этого и живут. А долгая и сложная конпеляция, дороговизна, сложность, низкая энергоэффективность - необходимая цена, которую приходится платить за производительность.
Где важнее энергоэффективность, надежность, стоимость или много параллельного кода - там будут играть стековые машины. Но с определенного количества исполнительных устройств (операций), которые удлиняют шины, усложняют, удорожают, снижают частоты и энергоэффективность стековых машин, опять начинают играть регистровые машины. Т.е. стековые машины пригодны только там, где есть еще и ограничение по исполнительным устройствам, количеству команд. Для слишком большого количества команд пилить стековую машину неэффективно, и проще запилить регистровую, она выйдет примерно той же сложности +/-, зато появится возможность поднять уровень оптимизаций и ускорить код.
В продаже есть вот какие вкусные стековые машины: http://www.linux.org.ru/forum/development/5472606 https://geektimes.ru/post/133291/ https://geektimes.ru/post/134057/ 20 баксов, 1Вт, 144 ведра, 96 миллиардов операций в секунду. Казалось бы: конфетка! Но! Оперативка и пзу по 64 ячейки на ведро, т.е. эффективность сильно ограничена, программы маленькие, а данные придется гнать потоком через все ведра, не задерживаясь - памяти ни подо что просто нет. Инструкций всего 32 - большинство операций придется расписывать как микрокод, разбивая на десятки и сотни шагов. Такая вот эффективность. 96 гигаопс/с идут коту под хвост: штука эта пригодна только для очень узкой группы потоковых алгоритмов, и только там, где нужна энергоэффективность - на большинстве алгоритмов эти 96 гигаопс/с выйдут медленнее чем 4 гигаопса десктопного одноядерного интела: интел имеет кучу регистров, кучу команд, кучу исполнительных устройств, кучу кэшей/оперативок/пзу, плюс для него оптимизации последовательного кода намного дешевле. Такие дела.
>>909753 >почему же clang выплёвывает LLVM-код не в SSA-форме, а с кучей ячеек памяти, куда по 100 лишних раз пишутся и откуда читаются данные? Потому что так дешевле и удобнее. Программа - это граф потока данных и команд, переменные - узлы. Конпеляция - сжатие графа. Попытка свести количество переменных к количеству физических регистров. Чтобы грамотно (оптимально) сжать граф по ширине, нужно перебрать миллионы конфигураций графа. Неграмотно можно сжать дешево, но толку от этого, понятно, ноль. И чем меньше регистров, тем дороже такое сжатие, труднее сделать это эффективно, чтобы не замедлить программу. Поэтому выгоднее сжать граф чуть-чуть - до сотен и тысяч регистров. Просто убрать избыточность, самыми простыми и быстрыми методами. А далее пережать уже к формату конкретной машины - не забывай что LLVM все сводит к формату виртуальной машины, который можно перегнать к любому формату физических машин.
Недавно узнал, что я писал не на C++, а на си с классами. Думаю, такие же как я все после вузов. Как мне быть в мейнстриме, тыкать stl, везде использовать шаблоны и всякий boost?
Нужно ввести число. Потом нужно проверить, введено ли число вообще, и если нет - закончить алгоритм. Как это реализовать? Предполагаю, что через string, но как тогда перевести string в int?
>>910469 Если что-то простое то читаешь через std::cin и проверяешь на failbit и badbit. Проблема с std::cin что если нет четких ограничений на ввод (например - или инт или нахуй) то нужно много попыток чтения делать. Если производительность важна, то там да, читаешь в строку потом парсишь. Есть atoi, atof и их друзья.
>>910494 Все очень простое. Буквально два варианта: пустая строка или число. Если строка пустая, то алгоритм заканчивается, если там число - string переводится в int. Возможность букв не учитываем хотя они вроде все равно в int не сконвертятся. Получается, нужно написать getline(cin, stringname), потом сделать проверку на пробел на первой позиции int n=-1; n=stringname.find(' '); if (n>-1) break;, потом через atoi переводить строку в int. Правильно? Пойду гуглить atoi.
$ cl 1.cpp Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.00.24215.1 для x86 (C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
>>910796 В другом браузере её тоже нет. Адблок выключен. Зас попробую зарегаться. А это норм тест? Не слишком лёгкий? После прохождения можно будет хвастаться что я кресты знаю? А если я там зарегаюсь, тест пройду, а работать не буду? Результат не аннулируют?
>>910806 > А это норм тест? > Не слишком лёгкий? > После прохождения можно будет хвастаться что я кресты знаю? > А если я там зарегаюсь, тест пройду, а работать не буду? > Результат не аннулируют? Хуй знает, пройди, расскажешь кнопка появляется после регистрации
>>910811 Плохой тест. Ответил не на все вопросы, время не вышло, а он завершился. Он ограничивает время одного вопроса двумя минутами. На некоторых вопросах где надо выбрать несколько вариантов можон выбрать только 1. В конце вопросов где надо поставить пропущенное слово в предложение он ставит знак вопроса из-за чего предложение теряет смысл. Вопросы тупо откуда-то скопипащены т.к. в начале одного из вопросов стоял его номер который не совпадал с тем что над постом и которого там не должно было быть. Есть не столько вопрос с неоднозначным ответом и примеры кода с неопределёным поведением. Были вопросы по си и по линуксу. В конце теста мне не дали сертификат. возможно из-за низкой оценки Пересдать можно через 10 месяцев. Детали посмотреть нельзя. Реквестирую другой тест.
Не до конца понимаю указатели. Ещё более-менее осознаю, что можно создать итератор по вектору, с каждой итерацией выдавая значение. itr указывает, например, на целочисленное, содержащееся в ячейке, но не само целочисленное. int p = &a, p указывает на адрес a.
>>910828 >Пересдать можно через 10 месяцев Через месяц же. Сдал его на 3.4 из 5. Считаю что для тупого ньюфага вроде меня это неплохой результат. Пойду еще какой-нибудь оттуда пройду. >>911026 Это из прошлого треда
>>911026 >Какое нахуй кеширование строк в компайлтайме; ты сам то понял что высрал? Я-то понел (что ето хэширование), а ты очевидно — ниет, вот и запеканус. >Что за пиздец на 2 Отсылка к знаменитой цитате медведева, очевидно же. >и 3 ОП-пике? https://2ch.hk/pr/res/892147.html#903297
Класс на аsio с сокета принимает пакеты. Нужно, чтобы пакеты сваливались в контейнер вне класса. Нормой ли в класс передать unique_ptr наверно указатель на контейнер? Или кривой подход? Как сделать правильно?
>>911830 Передавать ссылки на какие-то внешние контейнеры не очень идея. Single responsibility же, вся хуйня. Если класс работает с сокетом, то он должен только работать с сокетом, а не управлять еще и масивом. Делаешь через наблюдение. Получив пакет класс рассылает своим наблюдателям сообщение что пакет получен, а они уже решают что с ним делать. Есть еще похожий на твой вариант, когда интерфейс реализован через внутренний контейнер. Тоесть у тебя асинхронный клиент (или сервер). В одном потоке твой класс принимает пакеты и складывает в свою внутреннюю (желательно не блокирующую) очередь. Рабочие потоки обращаются (через геттер, не напрямую) к очереди и вытаскивают оттуда пакеты. Но в таком случае на контейнер внутри класса, никаких внешних ссылок нет, внутренний контейнер просто используется для организации потокобезопасного интерфейса. Если тебе нужно что-то простое то твой вариант в принципе тоже ок. Только передаешь обычную ссылку на контейнер, и обзываешь это делегатом. Если в будущем функционала контейнера станет не хватать, то потом просто пишешь настоящего делегата с интерфейсом твоего контейнера (тех методов что реально вызываются в коде). Если все правильно делать, то прийдеться менять достаточно мало существующего кода. Смотря как написал конечно, если твой контейнер лезет со всех щелей приложения (потому что ты его всюду передаешь голого), то тогда настанут естественные пиздарики.
Пришло время разобрать говнокод. Говнокод сам себя не разберёт. Нужны знающие SFML и Box2D
В игре присутствует модель игрока. Суть в том, что при нажатии W игрок просто летит вверх. Эта проблема решилась просто проверкой вертикальной скорости y игрока перед следующим нажатием.
А вот как решить проблему полёта при зажатии "A" или "D"? Проверять горизонтальную скорость не вариант. При зажатии кнопки, игрок просто летит в выбранном направлении.
>>912585 Держи структуру данных, где отмечаешь какие кнопки нажати (по инпут ивентам меняешь эту структуруру), в игровом цикле проверяешь структуру на предмет нажатых кнопок.
>>912585 Ты неправильно работаешь с телами. Тебе, как правило, в ручную не нужно устанавливать скорости - с скоростями ебется движок, это его работа. Ты напрямую манипулируешь скоростями в редких случаях (например при инициализации объекта, если у него изначально должна быть определенная скорость). Ты должен работать с перемещением тел через ApplyForce и ApplyLinearImpulse/ApplyAngularImpulse. Если игрок должен подпрыгнуть - ты прописываешь ему импульс вверх. Движение влево/вправо - скорее всего сила направленная в нужное направление. Скорее всего потому что сила/импульс в некотором роде взаимозаменяемы - силу можно заменить последовательностью импульсов. Конкретный результат зависит и от параметров сцены, нужно пробовать разные варианты и смотреть что получается.
>>912633 Спасибо анон. С помощью импульсов удалось решить последнюю проблему. Теперь осталась вторая, ведь персонаж летать влево-вправо не должен. Если вверх это решается простой проверкой вертикальной скорости, то как быть влево-вправо?
>>912746 Персонаж по нажатию W подлетает вверх (прыгает). И если зажать после прыжка A или D, то персонаж застынет в положении, и начнёт постоянно двигаться в сторону нажатой кнопки (A - влево, D - вправо), и по-чуть чуть падать на поверхность под действием гравитации.
Мне нужно чтобы такого нельзя было сделать, так как так можно спокойно перелетать через дыры и препятствия, просто встав на самую высокую точку, на которую можно запрыгнуть.
>>912752 Нужно с коллизиями разобраться. Нажатия кнопок A и D обрабатываешь только если персонаж стоит на поверхности. И застывать никто не должен, если ты не вручную скорость выставляешь. При нажатии A/D или силу прикладывай или периодически импульсами подталкивай.
>>912774 Кстати вопрос: что лучше, ApplyForce или ApplyLinearImpulse? Последние доки по Box2D которые я нашёл были за 2013 год, и там даже нет упоминания булевого аргумента wake, который передаётся в этот метод.
>>912846 Спасибо. Еще такой вопрос, возможно ли отслеживать вызовы из виндоконсоли и винапи функции? Знаю, что второе можно сделать http://www.rohitab.com/apimonitor , но не знаю как ? инжектить в виндодлл . Интересует именно момент между самим вызовом программы (или прямо перед ним) и местом, когда эта программа может почистить логи/прочее.
>>912845 Лол, если бы только мне подобные вещи рассказывали, а не как оптимизировать сборщик мусора.
>>912854 Если тебе нужно постоянное воздействие на тело то используешь силу. Если короткое - импульс. А так-то они связаны между собой и фактически взаимозаменяемы (при дискретных расчетах). Сила - скорость изменения импульса точнее скорость изменения импульса равна сумме действующих сил. Силу можно представить как импульс который повторяется на каждом шаге. Импульс можно представить как силу которая действует только один шаг.
Вроде везде написано что альтернативные операторы (and, not, or...) в C++ уже доступны по умолчанию и не требуют включения заголовка <ciso646>, хотя у меня без включения заголовка альтернативные операторы не работают, можете что подсказать, у вас они работают?
Какую IDE юзать? VS не запускается, Dev-C++ имеет разъебанные заголовочные файлы, Code::Blocks не может найти компилятор при создании проекта. Присматриваюсь к Эклипсу, как он вообще? Что примерно я должен знать, чтобы хотя бы кодить джуном за еду? Заранее спасибо.
>>913150 > когда его не делают Если при разработке класса решают что его не стоит наследовать (либо полиморфно использовать) то виртуальный деструктор не делают, чтобы сэкономить память и процессорное время. В STL много классов без виртуальных деструкторов - все контейнеры, например.
>>913203 Нет. Проверять можно constexpr, а параметры ими быть не могут. Можно использовать параметр шаблона вместо параметра функции, но не думаю чт ов такой хуите может быть смысл.
Бля, аноны, выручайте. Уже час ебусь, понять, что тут за хуетень происходит, я не в силах: В общем, имеется кусок кода, вот по этой вот ссылочке http://pastebin.com/CNU0dZ4S . В общем-то, проблем, как мне кажется (во всяком случае, как мне казалось до этого времени), в нем возникнуть не может ну вообще никак. На обнуление указателя проверяю, в общем, вроде как, все ОК. Захожу, я значит, посмотреть, что тут, да как. И, вжух, получай SEGFAULT, петух (угадайте, пока что на какой строчке). В общем, если вы подумали про цифру 8, тогда я вас обрадую. Так оно и есть. Однако, меня беспокоит то, каким вообще макаром это произошло. Думаю, так так так, может какую хуйню творю (с чем черт ведь не шутит), захожу в отладчик. И что же я вижу там: >> layer : 0x16b7bf0 >> m_terrainLayer : 0x16b7bf0 Все как и положено, даже читает внутренние значения класса, однако, какая же великолепная картина предстоит перед моим взором - а вот вы хуй догадаетесь: >> tileSet : 0x1 Какого черта. Почему она туда указывает?! Ладно, едем дальше, прохожу уже в этот самый "злополучный" метод, и что - а вот нихуя там, он просто возвращает protected-переменную. Все, ничего больше. Притом, что переменная внутри в нормальном состоянии, нихуя не 0x1, как это у меня пишется в отладчике каждый раз. Что за поебистика такая?! Или я в глаза ебусь...
>>913228 Почему ты решил что проблема в языке? Может у тебя с фреймворком проблемы? Например ты неправильно проинициализировал переменную на которую указывает layer, и проинициализировал хуитой которую к текущему моменту уже удалили.
>>913233 Нет. В том то и дело, что все нормально и в других местах у меня стоят ассерты на случай косяков обнулений. У кокоса автоматическое освобождение ресурсов в конце рабочего цикла при обнулении счетчика указателей на объект, но это все дело происходит еще до всевозможных чисток. Алсо, отладчик считывает область памяти, на которую указывает объект, в том числе и внутренние значения, только вот возвращается почему-то хуйня.
>>913238 Ну смотри. Я дописал к твоему коду еще хуйни, чтобы он запускался http://ideone.com/YKKUnW И твой код отрабатывает нормально. Следовательно проблема где-то в другом месте.
Собственно вопрос: есть ли кроссплатформенный вариант для того, чтобы получить список файлов? Вполне сойдёт какая-нибудь мелкая библиотека (но только не какой-нибудь Boost).
>>>>913150 Единственное зачем нужен виртуальный деструктор - это полиморфизм. Т.е. если ты будешь хранить объект ыпо ссылке/указателю на базовый тип. В этом случае тебе надо быть уверенным, что при delete разрушение начнётся с последнего потомка, следовательно деструктор должен быть виртуальным
>>913516 У меня все линкуется, просто вспомнил, что когда-то использовал в Qt под mingw либы буста, скомпиленные в студии (boost::bind). И тут возник вопрос, существует ли этакая привязка, типо, скомпилил либы в студии - пользуйся в студии?
>>913715 Пиздец. Видать то-ли CMake, то ли GCC блядствовали. Удалил папку сборки и собрал сново - и теперь заработало. Но ведь исходники не поменялись...
>>914144 >>914143 Хочу писать свои игры, вот для чего. Но не на готовых движках, а хочу сделать простейшее говно, но понимать как оно работает и отталкиваться от этого.
Опыт от 5 лет в области системного программирования и секьюрити ресерч (очень желательно желательно), Полное понимание архитектуры windows (x86/x64) и стека протоколов TCP/IP. Обязательные знания механизмов антиотладки, антиэмуляции, PE формата. Опыт реверсинга. Умение разбираться в недокументированном коде. Написание адекватного документированного кода. OS: Windows. Отличное знание архитектуры Win32 - объекты ядра, процессы/потоки, синхронизация, виртуальная память и адресное пространство процесса, механизмы IPС, code/DLL injection. Знакомство с книгами Руссиновича, Рихтера и другими профильными источниками. Понимание отличий Win64 от Win32, WOW64. Языки, технологии, библиотеки: С++, С++11, 386 assembler, MASM, FASM, STL, boost, Native API, Win API, BSD sockets, WinSock, CMake Отладчики, дизассемблеры: IDA Pro, OllyDbg, Immunity, WinDbg, Понимание remote debugging IDE и тулзы: VS 2013-2015, Subversion / Git, Redmine Возможность полной концентрации на достижении результата в реальные сроки, отсутствие отвлекающих жизненных проблем (дети, болезни и т.п.) Дополнительно: Знакомство с форматами файлов PE, COFF. Знакомство с разработкой драйверов, понимание отличий работы в kernel/user mode. Криптография - хэши, симметричные алгоритмы, public key cryptography, digital message signing. * FreeBSD, Linux, Shell scripting (bash, csh).
>>914273 Одно радует что никого они ненайдут. Их бизнес загнется без такого важного человека, и на сео этой шараги повиснут многомилиардные штрафы за проебаные проекты. У него отнимут все его деньги хаты машины, жена бросит его отобрав еще часть бабла, постоянно будут обоссывать колекторы, и сдохнет в выгребной яме зимой набухавшись и замерзнув насмерть.
Анон. Вот сижу, и туплю: Вот есть метод, выводит список файлов, и с этими файлами надо работать. Вот например надо вывести в какое-нибудь место название одного из файлов.
Это мне весь вывод метода в массив закатать, или как?
>>914384 ну да самом то деле какую проблему я вижу с этой вакансией: им надо уточнить, кого конкретно надо - кодера или реверсера так же надо уточнить, кодер нужен "ядерный" или все же это будет прикладник в юзерспейсе тк универсальных людей нет, особенно под винду
>>914707 Я не собирался пиздеть или пытаться как-то похвалиться. У меня образование в сфере защиты информации часть с реверсом и подобным я знаю с университета, а работаю в ортогональной сфере, но в силу некоторых причин более или менее знаю шинводс кернелс
>>914728 Т.е. понятно, что я не подхожу под эту "вакансию" > Опыт от 5 лет в области системного программирования и секьюрити ресерч (очень желательно желательно),
Программач, поясни по хардкору за полиморфизм. Есть вот такой цикл: for (int i = 0; levelNameVector.size() > i; i++) { tgui::Label::Ptr emptySaveTitle = std::make_shared<tgui::Label>(); emptySaveTitle->setPosition(135, 92); emptySaveTitle->setTextSize(22); emptySaveTitle->setText(levelNameVector); gui.add(emptySaveTitle); } Его суть в том, что я получаю список имён, и каждый раз при проходе цикла рисую тайтл средствами одной библиотеки (надо ещё и положение менять при каждом проходе, да). Я подозреваю, что здесь нужно как-то генерировать название объекта каждый раз, но как - я не знаю.
>>914918 СТРАУС выбрал такой способ поиска перегруженных функций - они рассматриваются только из одной области видимости (scope). Когда компилятор встречает функцию он начинает перебирать области видимости, начиная с самых узких, пока не найдет функцию с таким же названием. Потом, исключительно в этой области он ищет функцию с нужной сигнатурой. Ты можешь добавить в область видимости Proper все функции с именами foo из Mister дописав в public разделе объявления класса using Mister::foo;
Есть приведенный ниже код, с помощью которого создается текстовый файл с числовой парой, заключенной в скобки. Как из текстового файла вывести в консоль только числа, разделенные пробелом?
>>915022 Лол, часто тут такое? Мимо новичок С++ тредов В наказание за то, что ты глупое безвольное создание, которое решило спихнуть свои задачи на других людей, потрать столько же времени на перепечатывание текста, сколько я потратил на твою программу. Код писал какой-то аутист. Не говоря о неудачных программных ходах, код в принципе не работал
>>915061 >>915068 Я только начал изучать плюсы. А код, вероятно, такой несуразный потому, что книгу, с которой я начал свое изучение для начинающих(Programming Principles and Practice Using С++ Строуструпа) и большинство приемов в решении задачи принадлежит автору книги как и задача. Если эти объяснения не оправдывают "кривоту" моего когда, то какие действия предпринять по отношению к учебному материалу и/или к себе? Что код нерабочий отправил, и в правду, я виноват.
Аноны, откуда у вас знания по стл и всему шаблонному программированию? Я в последнее время вкатываюсь в настоящие кресты от лабораторного си с классами, читаю гайды/приёмы на стек оверфлоу, буст и гайды буста, и у всех есть будто какое-то тайное знание, что прям заебись и сразу выходит годный код. Вы книжки из шапки читаете? Прям на ингрише? Меня заебывает моментально, например.
>>915409 Нет. Исходники это то что предполагается некорректные исходники тоже исходники компилятор должен схавать. А этот код действительно исходник с++.
CLion - debug -- 2001 KB -- 164.389 ms CLion - release -- 1939 KB -- 143.948 ms
Code::Blocks - debug -- 2001 KB -- 162.209 ms Code::Blocks - release -- 914 KB -- 142.278 ms
VS2015 - debug -- 76 KB -- 1463.76 ms VS2015 - release -- 15 KB -- 408.403 ms
Какого хуя в студии код выполняется в несколько раз дольше? Особенно сборка дебага, я думал, что 0 лишний поставил в количестве итераций. Какого хуя код из mingw весит столько, можно ли как-то этот размер уменьшить и чего там такого на 2 мб записано? Оптимизации?
>>915443 >Какого хуя в студии код выполняется в несколько раз дольше? Оптимизатор делает сасай. >Какого хуя код из mingw весит столько, можно ли как-то этот размер уменьшить и чего там такого на 2 мб записано? Свой сирантайм и прочая гнутая залупа. Убрать зависимости/слинковатьтдинамически/ещё как-то отодрать их каким нибудь спермо-трюком, но работать не будет нигде.
>>915443 Ну ты тестируешь время выполнения функции которая (скорее всего) зависит от реализации - естественно на разных компиляторах разное время. А размер скорее всего от того что VS код динамически слинкован с каким-то "c++ redistributable". Попробуй свои программки запустить на машине где нихуя нет кроме ос, если есть возможность и желание.
>>915411 > Аноны, откуда у вас знания по стл и всему шаблонному программированию Писал много программ.
> Вы книжки из шапки читаете Читал только Липпмана, когда вкатывался в С++ лет 8 назад. Больше не откуда было черпать систематизированные знания или ответы на вопросы. Потом читал только на инглише всякие специализированные моменты
>>915334 Ты очень подходил под студента, который под конец семестра, просрав все сроки, начал делать лабы, начиная с первой. Твой вопрос был чрезвычайно подозрительным. Сложно поверить, что человек, который понял выходные файловые потоки, не смог написать ёлочки в другую сторону >>
> Страуструп Я бы не стал с этим Страуструпом кувыркаться. Меня он в самом начале только напрягал, очень туго шло. Вот Липпман другое дело, приятно было читать.
> какие действия предпринять С практикой всё придёт, просто побольше писать программ.
Создаю я значит объекты по общему указателю каждую итерацию, привязываю к каждому созданному объекту ивент по нажатию, но вот незадача:
При нажатии на созданную кнопку, приложение крашится. В дебаге видно, что программа пытается обратиться к несуществующей функции. Выходит, что по концу каждой итерации loadGame() уничтожается нахуй. Собственно вопрос: как решить эту проблему?
>>915464 Cудя по твоему описанию и по твоему куску кода, с удалением > tgui::Button::Ptr levelButton Может происходить и удаление > [&](){ loadGame(gui, window, levelPathVector); }
Хотя я пальцем в небо.
> И как ты себе это представляешь? У тебя этот массив кнопок и так создан, я не внимательно просмотрел, если судить по > gui.get<tgui::Button>("selectLevel" + i);
Объяви в этом же классе что-то типо std::vector <tgui::Button::Ptr> levelButtons;
И этот цикл вставь в конструктор класса. Ну или в любое другое место. Основной момент - проверить совпадает ли время жизни levelButton и твоей лямбды/коллбека.
>>915469 >этот цикл вставь в конструктор класса Только в вектор через пушбек, разумеется, добавляй. Ну ты сам должен понимать, что не просто стрл+С/V должен быть.
>>915450 Очень глупый вопрос Чем мне нужно компилировать, чтобы код собирался на любой винде 2000-хр-..-10 без .dll. Помню тулзы от nirsofta больше 400 кб не весили, и запускались под любой виндой
>>915477 Вообще можно, залинковать все статически. Разве что с разными версиями системного апи могут быть проблемы. Кроме VS - у них там все сильно на CLI повязано, хотя может можно и как-то отказаться от использования. Про тулзы от nirsoft не знаю, но они там скорее всего агрессивно WinAPI использовали, тоесть много кода динамически линковано - просто что он в любой виндоуз должен быть. MinGW это какбы исключение. Он действует во вражеской среде, ему нельзя предполагать что у пользователя будут нужные библиотеки, поэтому он дохуя сует в екзешник. Я думаю если программу из >>915443 скомпилить GCC на линуксе, то у нее размер тоже будет небольшим. Если не линковать stdlib статически.
>>915486 Ну, я это приблизительно так это все и понял. Вопрос был в том, чем компилить вин приложения и как собирать, чтобы везде запускалось. 2005й редист стоит даже у последнего васяна думаю. нужен даунгрейд студии, вопрос какой
Подскажите, как лучше всего циклически сдвинуть односвязный список, организованный структурами, на N элементов вправо/влево, может ему ввести один из параметров - индекс и сдвигать как будто бы это массив?
>>915491 Нужен двусвязный список, и кроме указателя на голову списка, нужен еще указатель на конец. Потом или голову перемещаешь в конец, или конец в голову, смотря в какую сторону сдвигать.
>>915500 А что односвязным ограничиться нельзя? Просто у меня в задании не фигурирует двусвязный. Там так сказано:Посредством структур реализуйте односвязный список для хранения окружностей. Обеспечьте следующую функциональность:добавить окружность в список;циклически сдвинуть список на N элементов вправо;циклически сдвинуть список на N элементов влево;сохранить данные в файле, считать данные из файла
И еще, как думаешь, достаточно ли просто в начало добавлять элемент? Просто если есть функция, циклически двигающая элементы, то сортировать их по убыванию/возрастанию просто нет смысла
>>915481 Нет, но я видимо не понял, что ты от меня хочешь. Или это так влияют 4 ночи за окном.
Суть собственно в чём: TGUI - библиотека-надстройка над SFML.
Имеется окно SFML, в котором идёт отрисовка и прочее. В этом окне создаётся контейнер TGUI, который у меня зовётся gui, и собственно в нём содержатся кнопочки и прочая хуита. Вот как выглядит drawLevels: { auto selectLevel = std::make_shared<tgui::Button>(); selectLevel->setPosition(72, 90 * (i + 1)); selectLevel->setSize(260, 65); selectLevel->setText(name); selectLevel->setTextSize(26); gui.add(selectLevel, "selectLevel" + i); }
>>915503 Если нужно именно односвязный то делай его. Просто на нем операции с последним элементом дорогие (линейная сложность вместо константной), и если есть возможность то лучше брать двусвязный. А раз у тебя ничего про сложность не сказано и требуют односвязный то делай с ним. Вставляй в начало, если ничего не сказано, так как это проще всего.
>>915505 Это было очевидно по > gui.get<tgui::Button>("selectLevel" + i);
Самый просто вариант найти ошибку - поставить data breakpoint. Когда у тебя меняется значение по указанному адресу, происходит остановка. Понятно, что это будет в каком-то деструкторе, но хотя бы по стеку вызовов посмотришь, где это происходит. Data breakpoint ставь на адрес, где хранится > В дебаге видно, что программа пытается обратиться к несуществующей функции
Если совсем не сможешь разобраться, могу посмотреть через тимвивер, у нас примерно один часовой пояс. Я мог бы посмотреть и просто проект, но не хочу себе ставить библиотеки
>>915411 >Прям на ингрише? Без инглиша далеко не уйдёшь. На ютубе тьюториалы еще >Меня заебывает моментально, например. Тебя должна вести идея того, что ты хочешь замутить. Если идеи нет или на нее (уже) не стоит, то трудно всегда. Мотмвейшн, нутыпонел
>>915596 > ну ты же не так сделал > не, не так > пик Проиграл. [email protected] Там, походу, минутное дело, но я всё равно смогу только часа через 2-3 или ближе к 00:00. Либо периодически проверяй почту, либо держи тимвивер на готове, а себя около ПК
>>915721 щас не нужны джуны у фирм зачастую нет ни времени, ни других ресурсов для того чтобы "выращивать" спеца нужны люди способные сразу писать код, который не будет выброшен в тоже время в мидах есть необходимость - до сих пор на крестовую мидловскую позицию приходит иногда всего лишь 6-10 резюме (когда на ява-мида может и под сотню прилететь), причем среди них есть абсолютный нерелейтед, те работодателям вообще не из чего выбирать
>>915586 Дело в том, что в моем понимании "я прочитал кренинбеха" это сесть и начать читать как войну и мир, глава за главой. У меня есть идея, я хочу ее сделать ультракошерной и масштабируемой, но на йоба-приемы и шаблоны натыкаюсь случайно. Сегодня, например, я научился серелизовать структуру, увидев в буст::асио пример с ICMP а вчера я статик-кастом на воид* ее перегонял в чарэррэй. Мне повезло с этим, но тонких мест еще уйма.
>>916171 Проблема гипотетически могла быть и в особенностях реализации заголовочных файлов между платформами. Нередко же VS отклоняется от стандарта, поэтому могла быть ситуация, когда мемори включался в какой-то другой стандартный головочник, хотя по дефолту такого не должно быть. И китайцы работали в VS. Ну это я, очевидно, оправдываю то, что я не открыл скрин, а просто прочитал текст поста. А так ты на 99.9 прав
>>916173 Тебе помогают, а ты говоришь спасибо без уважения.
1. Снёс code::blocks, что пришли с mingw 2. поставил MS VS Express 2010 3. code::blocks компилятор видит 4. но всё ещё пытается линковать mingw32.lib, которой так уже не должно и быть!
>>916246 Если ты вот этот вот >>916165 то сноси нахуй и ставь ту, что поддерживает последний стандарт хоть немного (2015-17). >>916269 Нахуя качать откуда-то кроме как с офф. сайта учитывая что она сейчас полностью бесплатная со всеми нужными фичами есть — хз. Если проект сгенерировала не сама IDE (т.е. шел с исходниками) то скорее всего никак. Иначе просто сотри и тыкай дальше.
А есть какие-нибудь годные книжки по сетевому программированию? Есть какие-нибудь менее фундаметнальные книжки, чем Стивенс? Посмотрел мимолетом пару видео по сокетам,без книжки не разобраться.
Котаны, такой вопрос. Пишу красивый CLI для своего приложения с богатым функционалом и хочу так как красиво как в git'е. Как этого можно добиться? Пока вижу три опции.
1. Руками на основе argc/argv разбираю строку. 2. Использую POSIX-совместимую getopt() 3. Использую расширенный вариант предыдущего функциионала getopt_long().
Хотелось бы узнать, что является best practicies/как сделать поыбстроми, минимизируя число зависимостей. Буст идёт нахуй. Не интересно.
Склеиваю стринг из содержимого двух векторов: for (int i = 0; levelNameVector.size() > i; i++) { path = levelPathVector + "/" + levelNameVector; drawLevel.drawLevels(gui, window, i, levelNameVector, path); }
Позже передаю эту радость в лямбду. void SelectLevel::drawLevels(tgui::Gui& gui, sf::RenderWindow& window, int i, string name, string path) { selectLevel->connect("pressed", [&](){ loadGame(gui, window, path); }); }
При попытке воспользоваться переменной в лямбде - всё нормально, через cout выводит как надо. Однако стоит воспользоваться ею в нужной мне функции loadGame: void loadGame(tgui::Gui& gui, sf::RenderWindow& window, string levelPath) { cout << levelPath; }
>>916519 Обсуждаемые флаги можно назвать как флагами компилятора, так и флагами препроцессора, потому как последний в любом случае является частью компилятора. Ну типа preprocessor definitions же написано. PREPROCESSOR. DEFINITIONS. ФЛАГИ. Чё занудничать
>>916541 У тебя unique_ptr значение как отдаст, довенский хуесос? >>916537 >>916548 Ну откуда нам знать-то, полный код вкинь. Как ты ее инициализируешь там, с оптимизациями ли компилируешь (и нахуя ты эту строку 3 раза копируешь) — сложна, нихуя нипанятна.
>>916537 > selectLevel->connect("pressed", [&](){ loadGame(gui, window, path); }); А если вместо path будет какая-то захаркоженная строка? "C:\\my\path\to\file.txt"?
>>916567 На мой взгляд, анонимная функция запоминает не значение, как ты ожидаешь, а адрес переменной. К моменту вызова коллбэка память path уже очищена. Попробуй, например, выделить через new.
void SelectLevel::drawLevels(tgui::Gui& gui, sf::RenderWindow& window, int i, string name, string path) { char* ppath = new char [512]; sprintf (path.c_str (), ppath); selectLevel->connect("pressed", [&](){ loadGame(gui, window, ppath); }); }
Понятно, что тут будет утечка памяти, но мы же просто хотим найти ответ на вопрос.
>>916575 я тебе уже ответил конч >>916536 >>916577 >На мой взгляд, анонимная функция запоминает не значение, как ты ожидаешь, а адрес переменной. К моменту вызова коллбэка память path уже очищена. Попробуй, например, выделить через new. Это вообще было бы очень тупым багом — он переменную вниз по стеку передает, а std::string имеет встроенный рефкаунтер и может удалится только если ее вернуть из функции наверх.
>>916577 >ppath Хотя если лямбда запоминает адрес, то к моменту вызова коллбэка, опять же, будет запомнен адрес ppath, а сам указатель смоет. Плохая была идея
>>916567 >>916585 Этот дело сказал. Проблема правильная была. Попробуй передавать path по значению selectLevel->connect("pressed", [&, path](){ loadGame(gui, window, path); });
>>916579 >а std::string имеет встроенный рефкаунтер и может удалится только если ее вернуть из функции наверх Он же там коллбэки только инициализирует, а не вызывает. К моменту вызова управление давно поднялось вверх по стеку.
>>916597 >В коде твоём была ошибка Идея должна была быть понятна. Я же без компилятора писал, ошибка тривиальная.
Пацаны, зачем вы такие токсичные. Аноны сюда приходят потому что больше не к кому обратиться, а получают вместо кода потоки желчи. Сравните со stackoverflow
>>916629 Мои слова направлены не против особого духа борд и менталитета, а за большее число строк кода в ответах. Чтобы можно было просто вставить и запустить. Так очевидно лучше.
Сап. Пилю бинарный формат. У меня есть куча ключей, на которые мне нужно впоследствии много раз ссылаться. Подумал, что удобнее всего их будет просто проиндексировать и записать в определенном порядке, а при считывании восстанавливать значения индексов просто по порядку. Но что мне не особо понятно, так это то, в каком виде лучше всего записывать эти самые ссылки, т.е. номера индексов далее по "тексту". Есть идеи? Интересует самый компактный вариант.
gcc 7 уже поддерживает все фичи c++17, которые планируют принять в стандарт. собирай его и тести. я сейчас с ним играюсь, даже порнуху некогда смотреть.
>>916837 > без линукса Никак. phtrhread это системное апи линукса, естественно оно не доступно на других системах, если только они не предлагают свою posix-совместимую реализацию этого апи. Изучи документацию на эту тему к ОС для которой ты пишешь программы.
>>916837 тебе какбэ намекают что нужно написать функции поддержки многопоточности посмотри лучше откуда потребность в них вылезла (дизасмом например) и может быть можно что-то придумать
Нужно в большую строку ( файл 10 мб ) добавить с разных сторон много небольших строк. Как это лучше сделать в с++03, ибо после всех .append(..) в памяти процесса под 100 мб.
Возможный вариант с временным файлом. Записываешь туда сначала начальные строки, потом копируешь исходный файл с помощью splice() (в линуксе, на виндовс вроде TransmitFile можно использовать) потом вписываешь остальное. Заменяешь иходный файл временным. Но хуй знает что получится, и в любом случае от оборудования зависит - если он оне поддерживает DMA то смысла нет так заебываться. Разве что нужно любой ценой оперативную память экономить.
>>917536 Спасибо, анон. А если резервировать память под объект с помощью malloc, то на объекте потом как-то можно конструктор запустить? Boost же как-то реализует пулы (я даже код смотрел, там пулы по sizeof распределяются), неужели на массиве объектов сразу конструкторы запускаются?
>>917670 >стандартно, удобно Стандарта в плюсах на эту тему нет, а цмейк нихуя не удобный, так ещё и тормозит похлеще обычного make и всякого питоноговна.
>>917759 Сменить предметую область и начать писать код который будет работать и который можно будет поддерживать, а не экономить везде на двух инструкциях.
>>917703 Чё бля? CMake использует некоторый бэкэнд, который уже и выполняет сборку. И чем это тебя обычный make не угодил? Или блять хочешь писать m4-макросы и autoconf-скрипты, сука?
>>917837 нет у ней альтернативы если надо кроссплатформу, то проще cmake использовать, чем тащить в исходниках проекта кучу проектных файлов различных версий visual studio и кучу сборочных скриптов под юниксовые операционки
Знание OpenGL - полезный навык для C++-ника в целом? Уволился вот со скучной работы, связанной с формошлепством на Qt, во время передышки перед поиском новой работы хочу бустануть свое, так сказать, "резюме" не в обычном понимании, а скорее в виде набора скилов которыми я располагаю, и мне интересно, насколько целесообразно заморочиться 3D-графикой в целом и OpenGL в частности. В качестве плюсов можно считать возможность вкатиться в геймдев и смежные области, из минусов - возможна дополнительная нагрузка в виде повторения мат анализа, на который я очень успешно забивал болт во время учебы в университете. Что посоветуете?
>>918140 >В качестве плюсов можно считать возможность вкатиться в геймдев /0 Давно таких не видали дуралеев. >>918147 Давай хаскель лучше кчин, он как раз для новичков. Список IDE для плюсов с описанием можешь найти в шапке.
>>918140 OpenGL или нужен или нет. Если вакансия не под ожл разработчика то пользы от его знания мало будет. Матан не нужен, ты возможно с линалом перепутал. Но линал для изучения тоже не нужен. Если хочешь базвордов в резюме накинуть, то возможно лучше за OpneCL (или CUDA) возьмись, если не владеешь. Это в принципе тоже достаточно специализированная тема, но выглядит более широкой. Потом можно уйти в digital signal processing, например.
>>918281 Самая нищенская и одновременно больше всего (по времени) требующая область. Суть как бы в том, что там конкуренция из сотен макак, готовых переезжать в ебеня вроде Новосибирсков и Харьковых, за зарплату 60к рублей за идею и отечественный геймпром, что называется.
У меня мистическая хуйня на винде, я, прямо, кирпичами сру. Играюсь немного, в общем, сервис создает папку в %SystemRoot%/windows32, копирует туда себя и прописывается через CreateService, понятно уже, что это Так вот, на одной машине папка не создается, соответственно, все остальные действия должны возвращать ошибку. Но нет. Я ебу что это. Сервис записан в /CurrentControlSet на несуществующем пути, и мало того, что работает, так еще, блядь, функционал поддерживает полностью (стоп\пауз\старт) Обыскал все папки винды, перезагружался несколько раз. КАК ОН МОЖЕТ СУЩЕСТВОВАТЬ ЧТО ЭТО ЗА НАХУЙ
>>918463 upd Исследование показало, что данным свойством обладает лишь папка system32. Можно создать папку там через CreateFolder, скопировать файлы через CopyFile, и даже запилить там сервис, однако после этого получить доступ в эту папку будет нельзя, причем можно создать папку с таким же названием и конфликтов не будет. Причины и объяснение данного феномена мне все еще неизвестны
>>918449 >Линус ссал тебе наебало make'ом(sic!) >2,5 к рукописных строк мэйкфайла с говном из баша >которые в нормальной системе сборки можно было уложить в 100 Ну да, есть такое. Копрофилия — оно у плюсовиков наследственное от сишников.
>>918469 Я не помню, как называется эта фича, но её придумали мелкомягкие, когда хорошенько соснули DLL hell'а. Суть в том, что если приложение, не являющееся TrustedInstaller'ом, пытается срать в системные папки своими библиотеками и прочим, то на самом деле файлы попадают в отдельное хранилище для этого приложения и не видны никому другому. Что-то вроде overlayfs для каждого отдельного процесса, короче.
В xp (может и не только) сессия админа (именно админа, а не пользователя с админ правами) имеет пид 0, соответственно запустить приложения под его именем нельзя, запускаются под 0й сессией. Можно ли как-нибудь выдрать токен пользовательской сессии адмиистратора?
>>904165 (OP) >C++ Qt Creator/Designer/CodeLite/Code::Blocks/Clion и почему? Выбираю строго из перечисленных вариантов, остальные по тем или иным причинам не доставили.
>>918620 Я не хочу срач. Ну, подскажи плюсы-минусы. Лион должен быть самым интеллектуальным, если судить по Идее, но хз, выглядит каким-то слишком громоздким. Писать планирую с активным использованием Кьюта либо что-то простое для Ардуинки.
>>918140 матанализ тебе не нужен нужны будут матрицы и квартенионы для всяких 3д преобраований, немного школьной физики (если не будешь лезть в имплементации физ движков), пройди какойнибудь курс по алгоритмам на курсере
в харьков гейдев - пайпстудия берет вобще всех но платит нихуя, есть g5, gameloft, plarium это из крупных,еще с полсотни мелочи, лучше какимто чудом найди постоянную удаленку, но практически нереально если ты не сениор\лид с хуевой тучей проектов за плечами
денег в гейдеве нет а мозгоебли полные штаны, так что держись анончик
Вот код копирования бинарных файлов, почему он работает? Всмысле, в конец файла с вероятностью 63/64 будет записываться хотя бы один лишний байт. Причем, если делать проверку на EOF, то окажется, что такие чары есть и внутри файла Как вообще определяется еоф в бинарных файлах?
>>919128 >должен копировать по 64 символа за итерацию Код должен копировать до '\0'. Если у тебя буфер на 5 символов, то при прочих равных и корректных у тебя будет скопировано 4 символа.
Аноны, Страуструп третье издание актуально сейчас? Прост хуево английский знаю, и слышал, что в третьем с++11 не описывают. Критично ли или лучше подыскать альтернативы?
Добрый день. Я учу алгоритмы и структуры данных и для закрепления знаний решаю задачки. Я студент, но это не лаба, так что не спешите посылать на хуй. Имеется опыт со многими ЯП (все высокоуровневые), но ни один не знаю достаточно для трудоустройства (я не спешу).
Гуглить пробовал, но там в основном эта ошибка вызвана использованием массивов, неправильной величины (у меня векторы), или же что-то там с указателями (я высокоуровневый петух и не понимаю), которых у меня в коде вообще нет, только reference авто циклах, слова new тоже нет.
>>919752 Ещё одно, в универе плюсы не учили (первый семестр javascript), самостоятельно я тоже не изучал, просто делал так, как бы делал в других языках (гугл в помощь мне), так что даже, если не найдёте ошибку, можете просто подсказать, что можно было лучше оформить
>>919752 В пятом тесте. В массиве parent, насколько я понял ты надешся что там дерево. Но на самом деле там граф с циклом 92 -> 57 -> 26 -> 16 -> 92, в результате for на 147 строке работает пока не закончится память. Слова new в программе нет, но его используют неявно вектора, когда им нужна новая память под значения (которые ты туда засовываешь в бесконечном цикле).
>>920189 Как я понял, есть я ввожу 5 и 10, то на выходе должен получить все числа от 5 и 10. Так? Но как, если на ввод пойдут числа 10 и 5? В любом случае какие-то условия еще должны быть. Ну или я тупой.
>>920190 На ум приходит использование только двух while циклов, каждый из которых бы проверял диапазон от меньшего к большему и от большего к меньшему. Но это уродство какое-то.
>>920227 Дак в одну сторону (т.е. когда левое число меньше правого) и я написать уже смог, в более понятной форме тем-более. А вот так, чтобы работало сразу в две стороны (ибо ни твой, ни мой кодец не выдают нужных результатов, если левое число больше правого) - это либо использовать дополнительные управляющие констуркции, либо сразу два цикла while. У Липпмана глава о while стоит перед всеми другими управляющими конструкциями, поэтому я и подумал, что оно должно решаться только им.
>>920229 Я думаю что если бы Липпман хотел чтобы программа работала "в обе стороны" то он бы явно указал это. Тащемта с помощью разного рода математических трюков можно этого добиться. Есть вариант подразумевающий UB (основан на предположении о внутреннем представлении отрицательных чисел) http://ideone.com/3yZpjw Вместо сдвига можно использовать возведение в степень и вычисление корня - тогда не будет UB но нужно ебаться с корнями. Но не думаю что Липпман подразумевал что-то подобной в своей задаче.
>>920234 >>920250 Ну ок, аноны. Похоже, это последствия чтения Страструпа если бы 4-ое издание было переведено, я бы его и только его бы и читал, где тот реально мог в своих задачах заставить человека хорошенько выебнуться с решением.
>>920431 Такое бывает, когда ты в сотый раз пытаешься дочитать хоть какую-нибудь книжку по программированию, у тебя уже есть основа и есть какие-то знания, но между ними имеются пробелы и ты читаешь, потому что хочешь запомнить эти пробелы, но не знаешь, где они. Ну и после пары глав Страуструпа Липпманн СЛИШКОМ легкий для прочтения, прям как для даунов написано. Хотя, возможно, дальше все будет лучше с этим.
Впизду этого Липпмана, такое ощущение, что он меня за дауна держит. Реквестирую вопрос об изучении исключительно технического английского языка только для чтения сопутствующей литературы. Слышал, что там только совсем базовая грамматика нужна и основной напор делается на словарный запас специфических терминов. Авось чего кто годного предложит? Пока читаю Стауструпа 4ed переводя по слову.
>>920692 > хочу выучить синтаксис языка > начну с английского >Читаю первые главы книги, повторяю известное > держат за дауна
К слову, у Липпмана и у Страуса ставятся разные цели. Первый просто рассказывает про язык, второй претендует обучить программированию. Читал и то, и то
>>920692 > переводя по слову Погоди, ты настолько плохо знаешь английский? Тогда я тебе сильно не советую пытаться прочитать книгу на английском. Ты, наверно, думаешь, что выбрал наиболее правильный, информативный вариант. Может быть. Но кроме того ты выбрал самый долгий вариант. У тебя это растянется не на один месяц, а может даже на год. Знаю английский на уровне чтения тех.литературы, легко могу объясниться устно в другой англоговорящей стране, но предпочитаю читать фундаментальные книги на русском, потому что в некоторых местах на перевод тоже время тратится, как бы я не изворачивался и не пытался воспринимать информацию сразу на английском, без промежуточного представления в русский язык
>>920711 Я и далее глянул, что там. Все же у меня уже есть какая-то база, вплоть до некоторых моментов в ООП, проверенных на практике. Я до этого Страуструпа как раз таки и читал, 3-е издание и мне его форма изложения нравится куда больше. У него даже база читается весьма забавно - нужно вдумываться в прочитанное, переваривать. Да и выглядит это как минимум более информативно. Структура тоже более понятна. У Липпмана в предисловии написано, что он хочет обучить возможностям языка, которые позволят игнорировать детали и я чувствую, что это ни есть совсем хорошо - т.е. если я серьезно захочу заняться этим делом и найти себе работу кодера, то буду полюбому охеревать от всего, что еще не перенесли на C++11. Хотя, возможно, это просто желание пердолится после pure c >>920712 Не думаю, что верный. Просто вариант. 4-ое вышло в 2013 году и еще никто не занялся переводом. Вот теперь я понимаю, насколько хуево без англ. языка соваться в подобный мир.
Короче, пока просто буду третье издание читать, уверен, оно и сейчас способно многому научить. А С+11 подтяну позже. Есть же еще С++14 и С++17 за горами, я так долго мутузить буду, лучше вообще хоть что-то делать.
>>920792 Универсального решения нет. Изначально хотели сделать чтобы в деструкторе std::thread вызывался detach, если он все еще не заджойнен. Но у этого варианта есть куча недостатков. Выделили два альтернативных варианта - вызывать join() или terminate() - но у них тоже свои недостатки. Вот ПЭЙПЕР есть на эту тему: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2802.html В конечном счете остановились на terminate() - я точно не знаю чего, возможно что в таком случае все проблемы сразу видны. Вообще про проблему не забыли СТАНДАРТНЫЙ КОМИТЕТ получает новые предложения, типа http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0206r0.html Может что и сделают, поближе к 2030.
Здравствуйте. Посоветуйте манул по отладке кода с картинкоми. Не хуйню, где рассказывают как поставить брэкпоинт, а что посерьезней.
Судя по тому, что происходит у меня, когда допуская ошибку, используя std (и по шапке прошлого треда), такой ахуенный вывод ошибок - это норма для мира с++. Как это лечить, стоит начинающему использовать что-то другое, типа boost?
>>921383 Паттерны-хуятерны, модели разработки и прочее я знаю. Именно по языку или каким-нибудь библиотекам, которыми все пользуются. Я так то явобог, но подвернулась вакансия на крестах. Знаю основной синтаксис и довольно много писал на крестах в универе, осилил когда-то польностью шилдта, хоть он и говно. Лабал на qt. Но хотелось бы знать что мне нужно задрочить, а какие знания освежить(на каких могу обосраться)
>>921386 Обычная абстрактная фабрика это моветон, за такую отчепушат во все дыры и оставят у параши. Применение в современном гейдеве имеет только абстрактная синглтон прокси фабрика. Вся индустрия только на ней строится.
>>921390 Ну тебе будет полезно знать STL, это определённо. Зубрить его не надо, но понимать нужно. QT тебе нахуй не нужен, он для интерфейсов только.
Boost ещё может быть полезен, но только в тех случаях, когда STL действительно не хватает. Буст ты до конца жизни не задрочишь. Если геймдев, то DirectX или OpenGL.
А вообще, определись кем ты хочешь стать собственно.
>>921396 Так нет, про вещи относящиеся к гейдеву я и сам знаю что мне нужно знать. Очкую по языку обосраться т.к. на крестах давно не писал, да и вообще раньше его яростно ненавидел. Ну все базовые вещи я знаю, типа конструкторы, деструкторы, указатели, шаблоны, эти ваши вертуольные функции, ООП и т.д. Есть ли какой-нибудь гайд или книга для перекатывающихся с других языков или просто уже имеющих опыт? И еще какой-нибудь с неочивидными и заковыристыми моментами? А то спиздану что-нибудь типа "более высокий приоритет имеет шаблонизированная функция с такими же параметрами", а не наоборот. И меня прям на собесе отпетушат. Многопоточность знать надо? Утилиты сборки типа cmake или вижуал студио сама за меня жепу подотрет?
Наверняка найдёшь что-то полезное, я уверен. Многопоточность скорее всего пригодится. Хотя и не факт. (Особенно блять важно помнить про ебучие указатели и ссылки, вот просто блять помнить как они работают). Сборщик мусора за тебя будет подтирать, так что помнить про удаление и уничтожение экземпляров тебе не нужно, если конечно через new их делать каждый раз не будешь.
Утилиты сборки помнить необязательно, если конечно под линукс делать не собираешься. Вижуал студио или другая IDE за тебя не только подотрёт, но и ещё и заоптимизирует с помощью спермотрюков, если попросишь.
>>904165 (OP) Привет анончик, перекатываюсь из веб макаки в кресты. Возникают синтаксические / best practise вопросы. Может даст кто скайпик / вк уточнять такие нюансы (никаких заёбов и прозьб просмотреть код, только консультация)
>>921559 это я знаю) У меня пара вопросов есть. Есть ли способ записать переменную при обьявлении типа int a = cin>>a; И ещё один. Я работаю в clion и когда запускаю прогу но не ввожу данные и делаю билд опять, приложение зависает в памяти. И приходится убивать его иначе не могу сделать билд, пишет нет доступа к exe.
Зачем ты так делаешь? Ты лучше сначала объяви переменную, а затем уже что-то с ней делай. Но записывать в переменную данные при объявлении типа можно.
int a = 10; int a = getSomeValue(); bool isWorking = example.getState();
>И приходится убивать его иначе не могу сделать билд Ну так в чём проблема? При перекомпиляции он стирает старые скомпилированные файлы в том числе и exe. Завершай приложение перед компиляцией, всё верно он тебе говорит.
>>921570 Смысл в том что открывает файл Clion, но он его не закрывает при билде и он остается висеть в памяти. Я его могу закрыть только через диспетчер. Может это баг самого clion.
>>921509 Саттера как раз наворачиваю. Осилил уже 50 страниц и у меня только один вопрос: Вы что ебанулись писать на плюсах в 2017? Не хватало в этом языке трудностей и неочевидных правил, а теперь еще каждый раз надо в голове держать разверсистые правила вывода типов и когда там моя переменная потеряет const, что там у меня rvalue, а что lvalue или когда указатель потеряет владение объектом и мой временный объект в три хуя на стеке выдолбят. Пиздец, выучите ruby, D, посмотрите как языки для людей должны выглядеть. Почитайте про акка и эрланг, как люди по уму многопоточность делают. Охуеть, пойду дальше дрочить ваши const std::_Simple types<std::_Wrap_alloc<std::_Vec_base_types<Widget, std: :allocator<W1dget>>: :_ Alloc> ::value type> ::value_type *
>>921584 Дык, это типичные классические спермопроблемы новичка — такое происходит всегда и во всех IDE (в том же последнем культяпкреаторе и студии (хотя там мб уже разобрались, я последний раз 10-й пользовался)) когда судорожно что-то постоянно меняешь и ребилдишь без остановки, причем только на шинде, очевидно что-то не так в системе (либо кто-то не учитывает какой-то ее механизм для чего-то). ну еще у того же QML вообще на всех платформах подобная проблема есть. >>921580 Кнопочка "стоп" находится слева внизу, слева от места куда ввод-вывод из соснольки переправляется. Шлепай по ней и не ребилдь как сумасшедший.
Аноны, поясните за пару моментов в OGL. Почему ему работать с треугольниками куда эффективнее, чем с теми же квадратами? Почему при разработке игр и моделирования передвижения игрока по миру чаще всего двигают сам мир, а не персонажа в нем? Разве перемещение всех вершин не более затратная операция, чем перемещение вершин самого игрока?
>>921845 Никто ничего не перемещает. Читай про матрицы преобразований. Каждая матрица умножается на вектор позиции вершины и получается вектор позиции объекта в координатах, которые нужны тебе. Квадрат - два треугольника. Треугольник - минимальный способ нарисовать двухмерную фигуру, а также однозначно определить плоскость ее размещения.
>>909609 Не говори о чем не знаешь, в Qt есть виджеты с opengl ускорением. http://doc.qt.io/qt-5/qopenglwidget.html Тянет где-то пару десятков тысяч квадратов на экране без просадок на моем ноуте. Да даже стандартными средствами Qt можно сделать тетрис и не будет ничего лагать.
Бля,нужен совет, через чё лучше реализовать работу с fibre channel протоколом,тут есть два стула,на одном boost::asio точёный, на другой qt network печёный... Может быть линка на какой-то пример подобной реализация, а то я вообще хз. Если кто знает,может можно как-то посредством буста фрэймы из fc инкапсулировать в ip протокол.
>>921216 Посмотри это: https://youtu.be/-n9Fkq1e6sg Boost сразу не советую, если для тебя вывод ошибок std "охуенный". Можешь попробовать другой компилятор, там сообщения об ошибках разные.
Посоны, у меня незавидное положение, поэтому пишу сюды, куда же еще тут все мои друзья же. Вообщем верстаю проект (клиент-серверное приложение с запросами к БД, и всякой там анальщиной уровня "принять по http json и конвертнуть в местный велосипед") без наставника, из стека: буст (асио) и цэкресткрест 11, либа под sql и тащемта все. Я заранее прикинул хуй к носу, примерно прикинул абстракции там, интерфейсы, вся хуйня. Но мало что тз постепенно обрастало новой поебенью (изначально это вообще был эхо-сервер, лол), так я еще и сам мудак, опыта то нету нихуя. В итоге у меня сейчас в каждый конструктор заезжает по пятаку указателей (да-да, сырых блядь) и вообще я уверен что это все течет как школьница при виде альфача, и когда это выкатится в продакшен то каждые 5 секунд будет сегфолтится. Проект пока небольшой (~5к строчек сырых, т.е. с комментами и скобками), но я в этом пиздеце уже и сам охуеваю, и дальше просто не могу это читать, это уже не код нахуй. Вроде и у класса каждого по полтора метода, вроде и про паттерны слышал, и копипастить с переполненного стека умею. А на выходе ебаное говно. Что делать, ананасы?
>>922349 >А на выходе ебаное говно. Что делать, ананасы? Рефакторить, и не передавать указатели налево и направо.
>и вообще я уверен что это все течет как школьница при виде альфача Ну не совсем всё так плохо. Попробуй, запусти, дай нагрузку. Не забывай деструкторы использовать, если ты что-то через "new" создаёшь. C++ хоть и упрощает выстрел в ногу, но не до такой же степени.
Есть около 1к файлов с разными именами, нужно написать код, который пронумерует все файлы от 1 до последнего с фильтровкой по имени. Например, были файлы: abc, test, а стали 1. abc, 2. test. И еще нужна программа, которая удаляет определённое число знаков сначала имени файла.
Если можно, сам я ++ по чуть-чуть изучаю, но до операции с файлами еще не дошёл.
>>923290 Для твоих целей использовать плюсы не очень умно, лучше ебануть скрипт на питоне. Если уже так хочешь плюсы - твоё дело. Гугли pstreams (удобный хедер для исполнения консольных команд прямо с твоей программы, умеет получать выхлоп команды в отличии от system(), интерфейс как у iostream) Как приблизительно это должно работать? Получаешь содержимое папки: redi::ipstream getDir("ls /path/to/dir"); Затем по одному читаешь из потока названия файлов, копируя каждую строку (кроме тех, которые собираешься удалить) из исходного файла в новый, после чего удаляя исходный файл: redi::opstream rm("rm /path-to-file/file.txt");
>>923313 Мне не обязательно плюсы, просто плюсы - единственное что я смогу сделать из кода в компилируемый файл. Я года 3 назад знал пхп, там я бы смог за 10 минут такую программу написать, но уже всё забыл.
>>923324 набросал тебе первую программу. вторую слишком затратно писать на плюсах, ибо ей придётся копировать почти всё содержимое файла. http://pastebin.com/eAix7Eyn
>>923313 > использовать плюсы не очень умно Часто встречаю замечания по поводу нерациональности, со стороны программиста, использования С++ для работы с ОС. Если кто-то считает, что плюсы и в правду не подходит для решения задач в ОС, объясните начинающему - почему?
>>923359 >почему Cкорость разработки. На условном питоне есть широкая поддержка работы с ОС прямо в стандартной библиотеке. Иными словами, на пейтоне ты напишешь 6 строк, а на с+ 36.
>>923359 По одной простой причине: код на плюсах не кроссплатформенный. Там нет аналога <os> в той же жабе, или питоне. Вместо этого используется winapi или POSIX-вызовы.
>>923366 Извиняюсь, оно с виндой, как оказалось, не дружит. Попробуй версию 0.17, там ещё была совместимость (не факт, что скомпилируется). Если нет - сейчас поищу другую либу и перепишу
>>921845 >Почему ему работать с треугольниками куда эффективнее, чем с теми же квадратами? Треугольник --- примитив растеризации. Квадрат --- два треугла.
>Почему при разработке игр и моделирования передвижения игрока по миру чаще всего двигают сам мир, а не персонажа в нем? Разве перемещение всех вершин не более затратная операция, чем перемещение вершин самого игрока? Потому что отрисовываешь картинку относительно глаз персонажа, а не (0;0;0) мира
>>921845 Почему ему работать с треугольниками куда эффективнее, чем с теми же квадратами?
Вершины треугольника не могут не лежать в одной плоскости (это очевидно). А если взять квадрат из 4х вершин, и случайно подвинуть одну из вершин не перпендикулярно нормали этой плоскости, сломается геометрия (он уже перестает быть плоской фигурой, и чтобы исправить положение, придется его разбивать на треугольники вдоль одной из диагоналей). По этому любые многоугольники треангулируются, так проще - меньше логики (хотя бы в проверках), несколько проще элементы gpu (а значит их можно сделать большее количество за меньшие деньги)
Допустим, есть 2 строки s1 и s2. Требуется определить, "пересекаются" ли они общими частями (как на пикрилейтед). Есть ли что-нибудь в стандартных либах или в бусте, или нужно велосипедить?
В моём компиляторе нет нужной (!) функции в stdmoi!G7fD9hbHDM09/02/17 Чтв 12:51:32#684№929403
В общем, есть файлы, из которых нужно собрать проект. Область: embedded. Моя задача: понять проект, собрать его, написать свою часть кода.
Ребята, которые написали сам код используют gnu компилятор какой-то версии из последних, где есть поддержка c++11. Я использую компилятор от ARM 6.6 - это необходимо. В ARM6.6 есть поддержка с++11, но с некоторыми ограничениями.
Проблема заключается в том, что в проекте используется одна библиотека, где используется метод std::move. В свою очередь, в описании поддержки компилятором от ARM c++11 пишется, что std::move не поддерживается, но есть прямой аналог (то есть дают кусок кода) реализации с помощью static_cast.
То есть проблема: при сборке проекта у меня выбивает ошибку о том, что no member std::move was found, что весьма логично. А что мне делать?
Что нашёл и что непонятно: 1) Если менять функцию прямо в std, то получим undefined behavior. На практике получим ту же ошибку, то есть то, что member was not found 2) Менять компилятор - будет пиздец. А это вообще может быть выходом? 3) Как override функцию в std - может, я неправильно это делаю? В гугле вообще говорят что это бред, да и в принципе будет undefined behavior
большое спасибо, если кто выскажет свои мысли/решения.
Дремлет код крестовый;
Весь рантайм и все баги
Белым снегом замело…
И шаблоны там, по коду,
В семь гигов при компиляции
Поджигают ваш пукан.
На огонь бежит сугробом
Со звездой толпа нюфагов,
Под оконцами стучатся,
И «Слава Бьярне» напевают.
«Крестобляди! Крестобляди!»
Раздается там и тут.
И в нестройном блядском хоре
Так таинственна, чиста,
Так отрадна весть святая
О рождении стандарта…
Шапка: https://github.com/sosachbot/cppthreadhat/wiki
Прошлый: https://2ch.hk/pr/res/892147.html