>>1517472 последние книги старика так себе.. "язык программирования с++, специальное издание" годная книга у него, и то с оговорками.. "дизайн и эволюция" самая интересная, но не для тебя..
>>1517497 Один, ибо у них совсем все тухло. Аналогично шизику, который под яблоко прогает и срет в си-треде и тут иногда, использует боевые картиночки.
А можно в ваших крестах лямбды в <>-скобках хуячить? Например unordered_set<Kluch, [](Kluch&k){return...}, [](Kluch&k1,Kluch&k2){return...;}> чтоб в одну строку создать эту хуергу со своей простенькой хеш-функцией и предикатом тождества.
Я бы такой и не против стать линуксблядью, ну в нём нету нихуя, чтобы пописать музычку, и чтобы ваять дизайнчик в прогах от адобе, короче только кодить в нём.
>>1517322 При желании все стандарты новые С++ позволяют писать без утечек и мне похуй, что вы там себе напридумывали про безопасность. Вы сосете член и даже не стесняетесь.
Есть ли разница между х86 и х64 PE форматом исполняемых файлов? Например, если я сделаю в студии компил под х86, то он определяет IMAGE_NT_HEADERS как IMAGE_NT_HEADERS32, а если под х64, то как IMAGE_NT_HEADERS64. Чо делать то?
>>1517634 Короче, я сам посмотрел и единственная разница в структуре IMAGE_OPTIONAL_HEADER, где некоторые поля внизу инициализируются ULONGLONG вместо DWORD. То есть мне придется писать две версии класса для обработки ПЕшки под две архитектуры?
>>1517646 Епта, это называется абстракция. Можешь потом менять тип данных в куче мест одной строчкой. Плюс позволяет различать значения с разной семантикой, чтобы не складывать яблоки с пчелами (но для этого лучше настоящий strong typing).
>>1517515 Лол, сейчас бы в 2к19 хвалить проприетарный компилятор. Дежурно напоминаю, что msvc пришлось наверстывать поддержку новых стандартов именно из-за clang. Не было бы шланга, сосали бы вы сейчас прямо как пользователи icc
>>1517626 В том-то и проблема, что при желании можно писать с утечками. И не только при желании, можно тупо ошибиться. В этом и суть Rust: он не даёт прострелить колено, отсеивая подобные баги на этапе компиляции
>>1517670 а бы сначала попробовал сделать через перегрузку функции, если не устроило бы, то через специализацию шаблонной функции и в крайнем случае стал бы использовать возможности новых стандартов..
>>1517686 >лалка Типичный расторебёнок. >Дешевые оправдания с помощью былых заслуг Просто ты, манька, сидишь и высираешь в тред про то, что из-за тебя великого кто-то что-то там делает даже. На деле же всем похуй на тебя, юродивый.
>>1517687 >он не даёт прострелить колено, отсеивая подобные баги на этапе компиляции Если он такой ахуенный, то почему его никто не использует кроме пары бородатохипстерофирм? И не пизди, что %FIRMA_NAME% его юзает, педеРАСТ растёт крайне медленно и через лет 5 вообще сдохнет, потому что его создатели его окончательно превратят в говнофункциональную парашу по типу хаскеля.
>>1517693 Через 5 лет в C++ перенесут и borrow checker из раста, и концепты оформят как в расте, и stdlib сделают человеческой как в расте, и std::move превратится в destructive move как в расте. И нихуя у тебя от современного C++ не останется. Ты еще не понял, что растобляди уже победили: или rust победит, или C++ по сути станет таким же, как rust.
Самое забавное, что растобляди всячески агитируют за прогрессивные технологии и всячески радуются тому, что они появляются в других языках, в тоже время C++-сектанты как таксисты старой формации - протестуют против убера.
>>1517713 >Ты главное не нервничай Мне-то самому rust больше нравится, только что ты тут агитируешь аки проповедник? Тут люди серьезные сидят и у нас на крестах работа повязана, старые проекты, что, могут и на шее ярмом быть, но они есть, так что я тебя не понимаю, зачем ты тут полемику начинаешь.
>>1517736 >Да. Можешь еще как лох на макросах и if/else. Я в итоге шаблоноеблей ограничился. >>1517732 Да тред посмотри, он внутри него, ржавчиной растет.
>>1517322 >Юзайте пикрил А как в расте low-level acces делают безопасно? Там я могу такой на понтах взять и тупо по адрессу 0x228 обратиться и записать что-то?
>>1517720 Ты понимаешь, что ты уже который тред агитируешь не за раст, а за собственную распиздатость? Ты молодец, весь такой прогрессивный и охуенный, создай себе тред и сиди в нем
>>1517578 Кодить это необходимость, а не смысл жизни, тупая ты никчемная овца. Это как умение пользоваться молотком, отверткой, плоскогубцами, паяльником.
>>1517594 > Очередные программситы с винтом на 80гб в треде рофл
Очередная чмоха, сейчас будет рассказывать, что ради логотипчика любимой корпорации нужно непременно тратить бабло и увеличивать вычислительные мощностя, пусть того и требует лишь идеешечка с компилятором.
>>1517515 >Бьерн хвалит msvc компиль. Он очень тормозной. Даже со stdafx компилит в разы медленнее, чем mingw. Из плюсов - больше ворнингов ловит по дефолту, но сообщения об ошибках гораздо хуже, чем у GCC.
Так блэт, что у вас там за хуйня с новыми стандартами? Приставку Legacy к старым итераторами присрали, а новые не завезли? Хозмаг переезжает, не закрыв вход охуевающим покупателям?
>>1517687 >В этом и суть Rust: он не даёт прострелить колено, отсеивая подобные баги на этапе компиляции Обсудили же в прошлом треде. Он это делает, только пока ты данные располагаешь в виде дерева. Единственная альтернатива этому - использовать индексы и Rc (умные указатели) вместо ссылок, из-за чего вся магия раста сразу теряется, он перестает ловить ошибки во время компиляции, и становится ничем не лучше крестов.
>>1517825 >из-за чего вся магия раста сразу теряется, он перестает ловить ошибки во время компиляции, и становится ничем не лучше крестов И тут ты такой приносишь пример, где компилятор не детектит ошибку
Жил-был СТРАУСТРУП. Шел обычный, скучный день. СТРАУСТРУП занимался рутинными вещами, такими как ебля своей трехсоткиллограмовой матери в зад. Только успев кончить матери в пердак и вынуть измазанный в говне хуй, СТРАУСТРУП услышал стук в дверь. Не заметив, что его мать умерла от сердечного приступа еще 3 дня назад, он пошел открывать дверь и вышел на веранду. На веранде никого не было. СТРАУСТРУП, было, уже начал подозревать СТЕПАНОВА в очередной подъебке, но вдруг, из под крыльца что-то вылетело и понеслось на него. От перевозбуждения СТРАУСТРУП уронил скрепленнеые скотчем очки на пол и смиренно ждал, что будет дальше. ЛЯМБДА, с огромной скоростью пролетела мима СТРАУСТРУПА, квадратной скобкой отпихнула его и заползла в дом, крепко заперев дверь. ЛЯМБДА ясно дала понять, что она приняла дом в качестве аргумента, но отказывается возвращать функцию, которая принимает ПИЗДЮЛИ в качестве аргумента и возвращает дом. ЛЯМБДА заползла на стул перед компьютером и свернувшись в уютный клубок, зашла на ДВАЧ. СТРАУСТРУП знал ЛЯМБДУ. По крайней мере, это слово он точно слышал, но не знал, что оно значит. Он очень удивился, когда недавно узнал, что ЛЯМБДУ включили в НОВЫЙ СТАНДАРТ, принятый полгода назад. СТРАУСТРУП понял, что надо выгнять ЛЯМБДУ из дома, потому что желание в очередной раз залезть на мамочку было слишком велико. Будучи первоклассным инженером, СТРАУСТРУП начал искать решение проблемы. Для разминки он решил повторить таблицу умножения до 12 на 12. Он 2 часа стоял на одном месте и смотрел в никуда, потея как свинья. Пока он боролся с таблицей умножения, из за угла вышел измазанный в говне АНДРЕЙ АЛЕКСАНДРЕСКУ и осмотрелся. Рядом стояли несколько зданий, включая психбольницу для буйнопомешанных и тюрьму. АНДРЕЙ задумался и понял, что в округе нет ни одного настолько больного и гнилого человека, чтобы продать ему свою книгу. Небрежно посвистывая, АНДРЕЙ удалился. СТРАУСТРУП закончил разминку и начал думать, как прогнать ЛЯМБДУ. Вдруг его осенило. Его дом был скомпилирован последней версией GNU G++, которая поддерживает ЛЯМБДУ. Именно поэтому, ЛЯМБДА и смогла проникнуть к нему в дом. СТРАУСТРУП понял, что ему нужна более старая версия G++, которая не поддерживала ЛЯМБДУ и тогда, при попытке компиляции дома, ЛЯМБДУ выкинет вместе с СООБЩЕНИЯМИ ОБ ОШИБКАХ. Но старую версию было негде взять. СТРАУСТРУП нанял ФУНКЦИОНАЛЬЩИКА СО ШТАНГОЙ за 5 тысяч рублей. Так как компьютера у них не было, ФУНКЦИОНАЛЬЩИК вначале написал на бумажке компьютер в 1 строчку НА ХАСКЕЛЕ:
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] -> [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ИЗДАЧ.
>>1517931 >СТРАУСТРУП занимался рутинными вещами, такими как ебля своей трехсоткиллограмовой матери в зад. Тоже что ли видели то видео? Ебать я тогда ахуел.
>>1517965 ‹‹Записываю витал-икону+наши хромосомы из выделений в присос =кровь хромосомы::горизонт жидкостей тела=убить как собаку, разложенную до голого гена =ТВ/спазм// Я разочарован в объёмной инокуляции гидромашины::бесконечный круговорот масс плоти::исчезаю с телом машинной природы ТоК::‹‹высасываю порно нервный газ бойроида// Душа/грамма самосокрушения до квантовой трагедии NDRO// Выход=преступник внутренней-системы-органов›› Определяет++мазо=траффик::от ToKAGE, скапливающихся в городе Городе Трупов// Душа/грамм их разжижают внутренние жидкости тела++себя, что вызывает в цифровом вампире функцию насилия::чудовнще разрастающееся запечатлено в голограмме пса и реверберации// Жестокость замученной памяти/
Я так и решил оставить карьеру, когда сменив две галеры и придя работать в третью, увидел что там то же одни педерасты и либаралы и прочие подвиды хипстеров. Презираю всех вас, чмошек ебанных.
Кто, блядь, притащил на двачи ебаный термин "бумер". В этой стране эквивалентом американских бумеров является слово "совок". Именно совки это та пидарасня, которая ненавидит молодых и успешных либералов, потому что в их возрасте совки сосали хуи по всем фронтам и им завидно, что все, за что они боролись, современная молодежь имеет по умолчанию.
У питона есть urllib для работы с вебом. Есть ли среди дефолтных либ с++ аналоги? Если нет, то как тогда можно работать с SMTP, FTP, HTML, JSON итп? Что можно почитать на эту тему?
>>1518042 В С++ нет дефолтных либ для этих задач. Либо используй какой-нибудь curl, либо подрбуй boost. Можешь сам, конечно, на сокетах навелосипедить или заюзать платформозависимую хуйню тибо winnet с std либы, но это порочно.
>>1518052 >на сокетах навелосипедит У меня раньше был фетиш на то, что я делал велосипеды под все и дрочил на них. У меня был свой класс строки, была своя либа запросов, было все свое, но мне было стыдно это постить на гитхаб, так как это было говно уровня HippoString string = new HippoString("anus");
Хочу сам написать. Что можно читануть на эту тему? Ну вот, например, хочу получить html этой страницы и вывести его в консоль. С чего вообще тут начать? >>1518055 Мне пойдет.
>>1518056 >Ну вот, например, хочу получить html этой страницы и вывести его в консоль. С чего вообще тут начать? в современном мире это может быть проблематично, тк контент многих сайтов генерится динамически на клиенте при помощи js но в качестве тренировки тебе можно начать просто с реализации либы которая реализовывала бы client http, те клиентскую часть протокола http
>>1518036 нужно отталкиваться от того, под винду тебе это надо, или под юниксы, или кроссплатформенное решение из кроссплатформы, к примеру, многим нравится cpprestsdk от майкрософт в нем есть http client, websocket client, ouath client, json и обертка для асинхронки.. по итогу это позволяет работать (с клиентской стороны) с современным интернетом, где много данных гоняется поверх http (+webcocket)
Бляяяяяяядь!!! Какого хуя даже в boost нет нормальной очереди?!?!?! В boost::lockfree::queue хуй ты положишь string, потому что нетривиальные конструкторы-деструкторы, матерей всех ебал! Неужели таки самому писать?!?!?!?!??!?!! Да нахуй тогда сдались ваши кресты ВШИВЫЕ, когда я на Сишке люблю чистые прямолинейные велосипеды писать, но не на крестах блядь из говна и палок запутанную хуету всякую.
>>1518164 Я не ради того свой пет-прожект с няшной чистой сишечки на ваши ублюдские грязные кресты переношу, чтоб с поинтерами пердолиться в перемешку с говноабстракциями. Так-то я все вообще красиво сделаю, но вопрос нахуя тогда гигабайтные либы тащить??? Когда один хуй надо через маллокать буфер, класть в него .c_str() и аналогичную хуету при извлечении. При чем ебаная .pop() еще возвращается с ничем, вместо того чтоб дождаться, ЧТО БЛЯДЬ ЛОГИЧНЕЕ НАХУЙ!!!!!
>>1518188 Да я в курсе, что lockfree и означает не блокировку потока процедурой .pop() при пустой очереди. Но ведь других вариантов и не завезли! Спрашивается, какого хуя? Разве не логично, чтоб поток-producer запушил туда столько null, сколько потоков-consumer, чтоб каждый попнул свое послание нахуй и за-join-ился? Я теперь, как мудак, должен рассчитывать на UB, что раз пусто, то скорее всего больше не будет, потому что producer в среднем быстрее обработчика? Хуита какая-то, ответственно заявляю-с, однако.
>>1518215 Да, и именно из-за этого ничего хорошего ждать там не стоит. Если пытаться угождать всем и сразу — всегда получаются вот такие уёбища как stl/boost/java spring/итд. >>1518217 Что сказать-то? Если делаешь гуйню на нём то уже только его использовать и можно (он сам на себе завязан с ног до головы), если хочешь лайтово и перформансно — это точно не про Qt.
>>1518176 >Когда один хуй надо через маллокать буфер, класть в него .c_str() и аналогичную хуету при извлечении. в modern с++ предполагается что буфер памяти будет представляться как std::vector<std::byte>
>>1518208 >нормальные библиотеки (вроде folly) FBString.h о, да, детка не изменяй традициям! каждая уважающая себя компания пищая на крестах должна иметь свой класс строки
>>1518239 Т.е. тебя не смущает, что у них там вообще всё окружение своё (как и у всех), а свои строки смущают? >каждая уважающая себя компания пищая на крестах должна иметь свой класс строки Т.е. ещё тебя не смущает тот факт, что даже в, блядь, джаве такое встречается?
>>1518119 >2к19, а в ваш ссаный STL все еще не завезли многопоточную очередь да использовали стандартные контейнеры stl в многопоточке вовсю, четверть века уже используют просто оборачивали в примитивы синхронизации, кто то писал классы-обертки для этого сейчас то же самое на изи делают, но уже со стандартной многопоточкой..
Есть два стула: возвращать unique_ptr с результатом в случае его наличия или возвращать bool флаг наличия результата, а сам результат записывать через параметр по ссылке. На какой сам сядешь, на какой мать Страуструпа посадишь? То есть std::unique_ptr<T> zalupa(); или bool zalupa(T &resultat);
>>1518251 да это известная шутеечка про свой класс строки в каждой крестовой фирме.. но, в оправдание, мотивация то этого велосипедостроения была оправданна по соображениям производительности (особенно в геймдейве это людей раздражало) хотя щас то все вроде более менее норм, тк семантика перемещения есть и string_view есть.. так что и стандартная строка тоже норм стала..
>>1518274 Какие преимущества? Я вижу потенциальную утечку, но это при неправильном использовании, разумеется. Если по указателю память выделена, но не стал записывать в юник_птр.
>>1518239 >каждая уважающая себя компания пищая на крестах должна иметь свой класс строки Бывает, что у компании своя строка, да еще и в сторонних либах, которые эта компания использует, в каждой по своей версии строк и умных указателей.
>>1518256 насколько я понимаю, в современном c++ типа модно возвращать значение (с передачей владения) через unique_ptr, заодно nullptr будет говорить об ошибке, еще плюс этого что можно возвращать полиморфные типы.. есть еще второй вариант через std::optional, он удобный в том случае когда не возврат значения не является ошибкой, и еще удобный тем что дальше ты работаешь напрямую с объектом (а не косвенно через укзатели, будьто и умные указатели) может есть и еще какие новые способы возврата значения..
>>1518274 >Возвращу сырой поинтер это очень хуевое решение, очень оно имеет пользу в одном случае - это когда из твоего контейнера есть необходимость показать наружу его потроха, к примеру, как в std::vector метод data()
>>1518279 такой подход тоже использовался в крестах возвращали std::pair, первый член - данные, второй - валидны или нет очевидный минус этого что данные (в отличие от std::optional всегда должны быть, те всегда должен создаваться возвращаемый объект)
>>1518283 >может есть и еще какие новые способы возврата значения.. Стандартный способ еще до 11 стандарта - своя обертка, внутри которой указатель на данные, которая работает как value-тип. Вроде std::string и почти любого класса Qt (причем pimpl тут не обязателен).
>>1518286 к примеру, результат вставки insert в множество возвращал пару где second было удачно ли завершилась вставка, а first - возвращала позицию вставки, это было оправданно тк итераторы stl - легкие объекты, зачастую это всего лишь указатели..
>>1518286 >такой подход тоже использовался в крестах А я этот псевдокодкод на чем написал по-твоему?
>>1518284 Зависит от ситуации. Если писать коллекции для библиотеки, которая торчит везде - да, какой нибудь дебил обязательно отстрелит ногу всем. Если внутренняя залупа для проекта — то документации хватит с головой.
>>1518289 ну это то понятно типа out-параметр обычный, но тк это ссылка, то он должен быть проинициализирован, поэтому пропехивают пустой объект в обрабатывающую функцию, а тот с ней работает проблема такого подхода очевидна - в случает ошибки или отстутвия результата, все равно приходится "тратится" на создание пустого объекта..
>>1518218 Тебя с этой хуйней в прошлом треде обоссали, шизик. Там получишь внятную ошибку в рантайме с хорошим стектрейсом. А в C++ от этой ошибки можно защититься только с помощью санитайзеров
>>1518301 >А в C++ от этой ошибки можно защититься только с помощью санитайзеров Можешь сделать проверку в рантайме без всяких санитайзеров, так же как в расте, никто не запрещает.
>>1518299 >в ситуации отсутствия механики перемещения это же приводит к копированию внутренних данных, которые обернуты этим классом? Да, но в том же Qt это нормально работает. Если тебе не нужна какая-то суперпроизводительность, то почему бы и нет.
>>1518301 > Там получишь внятную ошибку в рантайме с хорошим стектрейсом Будто я на крестах не могу в рантайме зарегать свой обработчик ошибок с блэкджеком, шлюхами и стектрейсом длиннее твоего. В очередной раз растоманя обосралась. Вот потом такие дебилы и не могут use after free от null pointer dereference отличить.
>>1518311 Не пали контору этому коробочнику. Он думает, что если в стандарте нету, то все, нельзя и язык говно. Хотя язык здесь вообще не причем, это просто дополнительный инструментарий Сам же вообще нихуя не знает, как все это внутри устроено. Я уверен на 100% что этот школьник совершенно не знает кресты, насмотрелся в ютубе на сойбоев, начитался проплаченных на хабре статей про ржавоговно и пришел срать в тред.
>>1518316 >А куда девается компиляторная чудо-магия? Я и в джаве могу на красивые стектрейсы посмотреть. Она возможна, но не в общем случае. Bounds checking - это частный случай проблемы остановки, так что с этим все грустно. В джаве со стектрейсами все хорошо, но там сложнее добиться такого же memory footprint, latency и throughput, как в rust и c++. Ну и NullPointerException вылетает не в том месте, где null реально появился.
>>1518311 >Можешь сделать проверку в рантайме без всяких санитайзеров, так же как в расте, никто не запрещает. А можешь и не сделать.
>>1518325 >Будто я на крестах не могу в рантайме зарегать свой обработчик ошибок с блэкджеком, шлюхами и стектрейсом длиннее твоего >мечтает о большом, длинном стектрейсе Ох уже эти комплексы у секты свидетелей небитого стека
>не могут use after free от null pointer dereference отличить Не надоело срать под себя и смывать чужую мочу с лица?
>>1518362 >пук маня не в курсе, что серьезные дяди сперва профилируют и пишут бенчмарки, и только потом оптимизируют. Внезапно bounds check можно заоптимайзить и в расте, и джаве, и в js, если очень хочется. Удивительно, правда?
>>1518339 Вот и подтверждение моей правоты. 0 аргументов, 0 опровержений, одни оскорбления. Попрошу тебя уйти из этого треда, ты совершенно некомпетентен.
>>1518278 >faster threads help their slower peers Прости, но ты вообще не понимаешь, о чем речь. Совершенно очевидно, что в общем случае queue.pop не может быть wait free.
auto it = a.begin(); ... b.push_back(std::move(*it)); a.erase(it); // Допустимо ли ерасить итератор после мувинга? Это всё ещё итератор на тот же элемент контейнера, пускай сам элемент уже и не валиден?
>>1518520 Сделал два сравнения. В общем, итератор до мува равен итератору после мува, но в то же время итератор до ераса не равен итератору после ераса. Надеюсь, что это не UB и этих данных достаточно, чтобы полагать, что допустимо ерасить итератор после мувинга.
C++ какой-то ебаный· Добавили перегрузку оператора кавычки, добавили ебучий спейшип оператор· Когда это говно закончится? Я хочу обратно свой ванильный C++·
Почему move-семантику называют именно семантикой? Это что, очередная попытка повысить ЧСВ за счет охуенно умных слов?
И что вообще значит это слово семантика применительно к проганью? Мб есть места где есть объяснения для даунов. Не уверен, что до конца вник в суть термина. Вот еще вдогонку: "++hui;" и "hui=hui+1;" - это семантически эквивалентные выражения?
>>1518749 > это семантически эквивалентные выражения? Не совсем. >Это что, очередная попытка повысить ЧСВ за счет охуенно умных слов? Не совсем. >Почему move-семантику называют именно семантикой? Ну не совсем.
>>1518757 >i -= -1; Очевидно это не совсем правильно. Для начала надо создать RAII для числовых вычислений, затем при помощи умного указателя инициализировать переменную i с определенным значением и инициаилизировать единичку, чтобы из соображений безопасности не было утечек мозгов в пендостан.
>>1518749 >"++hui;" и "hui=hui+1;" - это семантически эквивалентные выраже Нет, твой хуй может как угодно переопределить эти операторы. Даже в случае инта там возможно будет разный ассемблерный код, если отключить все оптимизацию.
>>1516856 И снова я тут, тестовое успешно сделал, написал к нему 25 тестов, отправил сорцы и документацию компании. Спустя день позвонили и попросили меня скинуть готовый .exe файл и тут я охуел. Собрал эксешник, три раза скидывал его этой ебаной эйчарше, но только спустя 2 часа до нее дошло что письма с прикреплёнными эксешниками блокируются почтовым сервисом. В итоге они дали мне какой-то хостинг куда я должен был залить программу, что я и сделал. Спустя еще час они написали мне что не смогли скомпилировать мой проект и запустить эксешник. Я хуй знает чему можно научится в фирме, которая с инструкцией по сборке не может собрать программу, и при тестах на линукс команды работает на винде. Уже и хуй знает как от них тактично отказаться, чтобы репутацию среди других компаний не портить.
>>1518780 Да им скорее всего впадлу разворачивать окружение для сборки, поэтому и попросили exe. Скинул бы им wannacry ради лулзов, HR можно даже попросить антивирус выключить - и сука выключит
>>1518914 >Да им скорее всего впадлу разворачивать окружение для сборки >exe >>1518780 >и при тестах на линукс команды работает на винде Да нет, там всё куда хуже. Начальник смены — старший заместитель младшего руководителя среднего инженегра — Пидорасов Андрей Хуилович не для того сидит 40 лет на своёи заводе.
>>1518977 Ладно, раз ты тупой, то придется объяснять. В первом случае у тебя будет выполняться только тело оператора++, а во втором - создастся временный объект, к нему прибавится единица и он будет присвоен левой части выражения. Хорошо если перемещением, но что-то мне подсказывает, что здесь будет копирующее присваивание без std::move. Чуешь? Семантически это нихуя не эквивалентные выражения.
>>1518749 >Вот еще вдогонку: "++hui;" и "hui=hui+1;" - это семантически эквивалентные выражения? Зависит от определения операторов ++ и +, они могут любую хуйню творить, даже кофе заваривать. Эквивалентные ли они для примитивных типов данных -- уже другой вопрос. >>1519027 Это еще не значит, что семантика одинаковая, т.к. компилятор оптимизирует автоматически. Т.е. де юре происходит вся та хуйня, которую описал анон выше, а де факто бинарный код одинаковый.
>>1519032 Да блять понятно что для примитивных. Мб еще придеретесь к тому, что на системе с копилером должен англ язык быть установлен, чтобы код вводить?
int a=0; ++a;
и
int a=0; a=a+1;
Синтаксически написано по разному с использованием разных операторов, а логически инкремент a
Вообще забавляет как такой казалось бы базовый вопрос насадил на бутылку весь тред
>>1519001 Ты можешь за базар пояснить свой? Почему не эквивалентные, если итог в обоих случаях - инкремент? Что подразумевает собой семантичексая эквивалентность операций тогда
>>1519079 Ты не знаешь разницу между постфиксным и префиксным ++ но уже пытаешься в 8й класс информатики >чем является append семантически для строки Если ты не пытаешься залить жиром просто выкатись на хуй отсюда
>>1518749 Ну смотри. Есть три выражения a = b; c = d; e = f; Синтаксис один и тот же. Однако в первом случае у тебя в a будет копия b, потому что его operator= ведет себя так как будто b значение. Во втором случае у тебя c и d станет одним и тем же, потому что тип d, точнее его оператор=, ведет себя так, как будто d как ссылка (что не обязательно значит что d это ссылка или указатель, это может быть класс с перегруженными операторами и счетчиком ссылок, или вообще что угодно) В третьем случае у тебя f превратится в e, а само использование f станет опасным. Потому что = в этом случае означает перемещение.
Т.е. написано одно и то же, а делается совсем разное. Что написано - синтаксис, что делается - семантика >Вот еще вдогонку: "++hui;" и "hui=hui+1;" - это семантически эквивалентные выражения? Правильный ответ: неизвестно, потому что мы не видим имплементацию этих операторов
>>1518914 У них вакансия С/C++ джун и у них нет блять окружения для сборки проекта из 2 файлов? Зачем они вообще эти языки указали в вакансии, я так понял я вообще первый за всю их историю кто пишет на крестах, иначе я не знаю как обьяснить ситуацию с эксешником. >>1518822 Тестовое не сложное, есть стена из блоков произвольной формы прямоугольной только, есть набор блоков, задача определить можно ли построить стену из этих блоков или нет, блоки можно ставить горизонтально или вертикально.
>>1517305 (OP) Выручайте анонасы. >Дано натуральное k. Определить, k-ую цифра последовательности 110100100010000100000, в корой выписаны подряд степени 10. Нужно делать без циклов и т.д. На просторах интернета нашел такое решение >Если 8*k - 7 точный квадрат натурального числа, то единичка, иначе нолик. Источник: Формула суммы последовательных натуральных чисел. Плюс голова. Не надо только говорить "но ведь источник есть, что понять не можешь?". Нет, не могу, к сожалению. Сижу битый час, не могу понять откуда эта формула взялась и как она работает. Т.е. прошу вас 1) объяснить смысл формулы 2)показать иное решение без этой формулы, если это возможно ну и как говорилось используя лишь if/else и стандартные функции вроде корня/квадрата
>>1519620 > Определить, k-ую цифра последовательности 110100100010000100000, в корой выписаны подряд степени 10. Ты сначала русский или английский язык выучи, а потом за c++ берись.
Есть вектор. Он заполняется пользователем. После заполнения, юзеру предлагают ваести два числа - х и у. Далее прога сравнивает число х со всеми числами в векторе и вылаёт результат. Как заставить прогу сравнивать именно Х именно со всеми элементами вектора?
Сап ананасы! Вкатываюсь в cpp и попал мне в руки один нерабочий кусок говна код.
Игра экшон, суть токова. Есть базовый класс world в котором все объекты хранятся в векторе из поинтеров. std::vector<worldObject> worldObjects;
Добавление объектов происходит таким образом: \tvoid AddObject(worldObject newObj) \t{ \t\tworldObjects.push_back(newObj); \t} \t Дестрой таким: \tvoid RemoveObject(worldObject newObj) \t{ \t\tauto it = std::find_if(worldObjects.begin(), worldObjects.end(), [&](GameObjPtr in) { return (in==newObj); }); \t\tworldObjects.erase(it); \t} \t Успешно напихав туда все новосозданные объекты
Приложение валится при итерации внутри world \t\tfor (auto it : worldObjects) \t\t{ \t\t\tit->Update(this); // <- ТУТ с ошибкой "Exception thrown: read access violation. it was 0xFFFFFFFFFFFFFFFF." \t\t}
Посему вопрос, насколько вообще разумно использовать std::vector для таких целей(динамический массив указателей)? Что лучше подойдет для таких целей? И чому происходит подобное?
>>1519781 >насколько вообще разумно использовать std::vector для таких целей(динамический массив указателей)? Других динамических массивов не завезли. Правда, если тебе нужно именно постоянно добавлять-удалять элементы и похуй на доступ по индексу можешь попробовать std::list. Хотя, если в твоём векторе мало элементов — не надо. > И чому происходит подобное? Потому что ты где-то в it->Update() удалил объект и распидорасил итератор по которому шёл, из-за каждой операции вставки/удаления массив полностью переаллоцируется в другом месте и ты пинаешь труп. Гугли iterator invalidation.
>>1519784 Он ещё в for берет не по ссылке, из-за чего происходит каст до worldObject, а для него может быть косячный Update. Хотя у него и добавление/удаление так же сделано. >>1519781 Погугли как правильно вызывать виртуальные методы наследников.
>>1519885 Reinterpret_cast в сочетании с виртуальными таблицами может давать очень весёлый результат. Вообще я его только с тривиальными типами использую. мимопроходил-кун
>>1517305 (OP) Что подразумевают под знанием/опытом работы с бустом? Там ведь дохуя библиотек, если я работал с hana или asio, можно писать есть опыт использования буста?
>>1520057 Я очень долго думал на эту тему, пришел к выводу что это: 1. Ты можешь собрать и прилинковать буст к твоему проекту 2. Ты не боишься читать документацию с этими адовыми шаблонами 3. Ты хоть примерно знаешь список библиотек в бусте и зачем они нужны.
Блять! Как настроить этот ебучий Qt creator? Какого хуя, когда я создаю консольное приложение с++ и собственно ввожу код, мне ошибками подсвечивается почти каждая строка? Мб я криворукий и что-то не поставил? Мб стоит накатить Eclipse?
>>1520060 >Ты можешь собрать и прилинковать буст к твоему проекту Хедер-онли хану то. Ну а так наверное так и есть, странно что компании не указывают какие конкретно либы из буста они используют, один раз только видел что нужен опыт с асио, остальным будто похуй. С Qt кстати аналогичная ситуация, может они там эмбед на кьюбасе ебошат, чем им мои знания виджетов помогут я не знаю.
>>1520060 >1. Ты можешь собрать и прилинковать буст к твоему проекту find_package(Boost REQUIRED) include_derictories(${Boost_INCLUDE_DIR}) target_link_libraries(huitaname ${Boost_LIBRARIES})
Или надо как мужыг с зовода, руками в швиндовый прожект вижуал говностудии каждый путь добавить?
>>1520470 Дополню сам себя Сам бы хотел vcpkg и в проде использовать, нотам пока как то непросто сделать несколько версий одной либы и хз как это всё не только на рабочей станции держать но и на билд сервере.
Сап. Начал читать книгу про параллельное программирование (из шапки, не помню автора), назрел вопрос. В задаче, например, вектор 1000 чисел умножить на скаляр, или, хуй знает, любую другую функцию сделать, есть несколько вариантов решения. Первый, в c++11, это простой пул тредов, типа на 4 ядра положить вычисление по 250 элементов. Второй - использовать openmp, там параллельнуть for. Третий, маст хев на мой взгляд, c++17 и for_each с execution_policy, но 17 кресты есть не на всех специфических компиляторах. Что скажешь, анон, какой подход лучше?
>>1520510 >чисел умножить на скаляр, или, хуй знает, любую другую функцию сделать, есть несколько вариантов решения. Для обучения реализуй всё руками, в проде если есть возможность используй стандартные средства а не костыли. Кстати интересная хуйня, что даже на 16 ядрях ускорение будет где-то в 4 раза, а не в 16, связано это с кэшами ядер, сеньор-помидор вообще говорил что вообще ускорения не должно быть
>>1520546 Вот https://pastebin.com/F6X8e6zHдаже отрыл пример и еще раз затестил, на 8 ядрах >однопоток 390мс >многопоток 83мс на 3 ядрах ситуация аналогичная. Если кому интересно, вот как это обьяснил тот самый сеньор Для умных >Короче говоря весь вопрос в том, какое отношение сложности задачи в тактах ЦПУ и необходимого потока обмена с оперативной памятью >Собственно в этом примере это между 3 и 4 на вашем железе на 64-битных машинных словах >Если компилятор таки достанет SIMD-инструкции, будет точно не больше 2 Для дебилов >Ну давай как метафору о том, что такое bottleneck - представь, что у тебя 8 работяг лопатами раскидывают асфальт на дороге, который им подвозят общим самосвалом >Если 4 работяги достаточно проворны, остальным просто не остается асфальта >Более того, есть достаточно неприятное правило о том, что этот bottleneck при адекватной реализации почти всегда в памяти, и ускоряться будет если либо большая сложность вычисления на одном элементе памяти (в том числе потому, что ЦПУ не справляется с заказом асфальта заранее) (это касается только типовых 86-64)
>>1520510 На 1000 чисел у тебя оверхед от запуска тредов будет больше, чем полезная работа. Лучше SIMD использовать, благо сейчас и в GCC и в clang платформонезависимые векторы есть, а уж SSE на простых циклах из коробки должно идти.
Я правильно понимаю, что если я делаю шаблонный класс, то ни о каких наследниках/интерфейсах и прочей динамической лабуды быть не может? Строго, либо статический, либо динамический полиморфизм?
Возник у меня вопрос системного характера, поэтому иду с ним сюда, в обитель самого высокоуровневого из низкоуровневых
Кто-нибудь из местных может рассказать, как работает scheduler/cron в windows/linux соответственно. Интересует минимальный принцип работы
Единственное мое предположение (при моем уровне знаний) состоит в том, что программа просто в цикле проверяет, не соответствует ли системное время запланированному и если оно соответствует, то выполняет задачу.
Но этого не может быть, потому что не может быть никогда, потому что тогда программа сжирала бы всё процессорное время холостым кручением в бесконечном цикле и мы нихуя не смогли бы сделать.
Тогда вопрос, как же это все-таки работает? Схожий вопрос: как работает что-то вроде setTimeout() в JavaScript
Очень интересует именно как это реализовано, буду счастлив если кто-то подскажет.
Требуется написать программу, которая считывает из входного файла числа и записывает их в массив, с последующей обработкой. Беда в том, что во входном файле могут быть не только числа, но и текст.
Подскажите хороший способ проверки типа данных при считывании, желательно с наглядным примером.
Почему std::thread создаётся запущенным? Как создать поток, который сразу после конструктора будет спящим, пока я его явно не запущу - так чтобы компьютер вовсе на него не переключался для проверки мьютекса в начале потока? beginthread же позволяет создать спящий поток вроде бы.
>>1520655 я бы обернул в отдельный класс, который принимает лямбду в конструкторе, а отдельным методом содает std::thread, но возможно достаточно и указателей (толковых) на std::thread для твоей цели
>>1520652 Я пытаюсь считать вроде ifstream fin; float array[z][z] fin.open("in.txt"); fin>>array[x][y];
Я знаю, что можно отследить мусор по значениям на манер -0 или -.002301, но думал, что можно как-то поизящнее это сделать просто определив тип содержимого.
>>1520871 Осторожнее с этой хуйней. Она от локали зависит, и будет брать разделитель дробной части из локали. То есть если в тексте "3.14", а в локали разделитель запятая, то будет ошибка конвертирования.
>>1520772 Да ёпт. Смотри состояние fin после считывания. Если ок, то ты в во float считал корректное значение до разделителя, если нет - то мог что-то записать, но до разделителя осталось ещё что-то и в целом считывание не прошло.
Сап pr. В общем, есть код. При вводе '|' программа закрывается. Как сделать так, чтобы при вводе '|' (или другого символа) программа предлагала ввести значения c и у? И второй вопрос, как сравнить введённое значение с последним элементом вектора (после сортировки по возрастанию)? Типы данных и всё такое уже менял - не работает. Перед return ставить else - тоже. Пробовал: if (x != '/') while(cin >> x) else cin >> y; cin >> z; Но это тоже не работоспособно. Где я обосрался?
>>1520951 Тебе к тому же анону, который выше не может отличить строку от числа при считывании.
Так считываешь char в double, поток ввода помечается ошибкой и этот double пустой, ты пытаешься его писать в вектор.
Либо считывай в char и, если это число, перегоняй в double, либо на каждом шаге спрашивай, продолжать ли ввод, либо прерывай поток через ctrl-Z(или ctrl-C, от ОС зависит).
>>1520998 А, так ты ж написал, что у тебя однократно будет выводиться только что введённый массив. Хочешь много раз заполнять/выводить массив - пихай цикл ещё сверху.
>>1521062 Попробую. Я пишу вот что: пользователь вводит массив чисел. Потом этот массив выводится в консоль. Затем юзер вводит два целых числа и программа проверяет больше они или меньше всех чисел, которые в массиве. Типа если больше, то выводится "число х больше всех ранее введённых чисел" и наоборот, если меньше. Собственно второй вопрос вытекает из предыдущего абзаца: как сравнить вводимое число с v.end(), если я не знаю, каким по счёту будет конечное? С самым маленьким всё просто v[0]
>>1520957 >>1521083 а вообще страуструп продолжает бормотать мантры которые он еще в "дизайне и эволюции с++" писал: а именно все завязано на статической системе типов, на возможности определять пользовательские системы типов, определять у них операторы.. на возможности задавать отношения между типами, те наследование о том что связка конструктор-деструктор оказалось очень мощной, позволившей реализовать абстакции, заменяющие реалиацию gc или посчета ссылок в самом языке, вынести эти абстракции на уровень библиотек и исходного кода.. и, касетельно к тому видео, он говорит про то что абстрагирование в с++ "бесплатно", класс с реализованными невиртуальными членами-функциями ничем не отличается по производительности от того если ты бы реализовал структуру со свободными функциями, обрабатывающими эту структуру.. и, как всегда, он начал бормотать про то что реализация виртуальных функций сделала максимально производительной, что что если вы руками будете это делать (как это делают в си до сих пор), то будет так же по скорости.. опять же говорил что никто вас в языке не заставляет все члены-функции делать виртуальными, а только необходимые.. опять же бормотал про то что реализация обобщенного программирования в языке (в отличие от тех же явы или шарпа) тоже абсолютно бесплатна с точки зрения производительности..
>>1520957 >Zero-Overhead >платишь только за то, что пользуешь Замануха. Формально-то принцип соблюдается, но зачастую весьма затруднительно сказать, что ты на самом деле используешь. А уж когда дело дойдет до расплаты, то торговаться никто не с тобой не станет - заплатишь ссполна, сколько конпелятор пожелает.
>>1520713 динамический полиморфизм - это использование виртуальных функций, а не наследование статический полиморфизм - это когда ты используешь шаблонные функции (в которых происходит вывод аргументов шаблона), а не когда ты определяешь шаблонный класс
>>1520589 динамический полиморфизм - это использование виртуальных функций, а не наследование статический полиморфизм - это когда ты используешь шаблонные функции (в которых происходит вывод аргументов шаблона), а не когда ты определяешь шаблонный класс
>>1521095 >что ты на самом деле используешь ты всегда сможешь увидеть результат кодогенерации - препроцессированный код, код после раскрытия шаблонов, ассемблерный листинг объектного модуля, соответствующими средставами
А как занопать достаточный промежуток времени без цикла? asm("nop;") работает, но for (int i=100000;i>0;i--) asm("nop;") даёт не тот же самый результат (и другую задержку), что и for (int i=50000;i>0;i--) asm("nop;nop;"), а мне это выполнение цикла вовсе не нужно. Я конечно могу забить, оставив 64 последовательных нопа в асм-цикле, но может быть есть более красивая и выразительная конструкция?
>>1521181 Оно вроде как выключает поток и передаёт нить выполнения другим, а на виндоусе это подходит только если интервал в несколько миллисекунд. Я же не просто так бесконечный цикл прикручиваю.
>>1521069 Ну ты же проходишься по массиву для его вывода. Пройдись точно так же для введенных x, y. И да, cin >> x, x != '/' это не то же самое, что cin >> x && x != '/'.
>>1520561 >>Короче говоря весь вопрос в том, какое отношение сложности задачи в тактах ЦПУ и необходимого потока обмена с оперативной памятью Другими словами, если слишком быстро обрабатывать данные, то твоя задача станет упрётся в пропускную способность памяти, а не скорость процессора. Это... логично, можешь даже сам посчитать. Взять какой-нибудь IACA, посмотреть сколько тактов уходит на одну итерацию и сколько за одну итерацию ты обрабатываешь данных, посмотреть на свою память и в конце концов посчитать теоретический максимум.
Но когда у тебя обработка относительно весомая и ты именно cpu-bound, вот тут треды-то и нужны будут. Просто твой комментарий с "связано это с кэшами ядер" вызвал у меня некоторые сомнения.
Алсо, создание/уничтожение тредов тяжёлая операция, лучше считай время внутри функции.
>>1521302 >Просто твой комментарий с "связано это с кэшами ядер" вызвал у меня некоторые сомнения. Да я нуфаг, пытался кратко передать смысл без глубокого понимания темы, виноват.
>>1521322 Да нет, это ты хуй пойми чем читаешь, тебе анон все правильно ответил. Если бы ты ещё вникал и понимал, что есть шаблонный класс, то не было бы у тебя этого вопроса.
А в си++ нельзя чтобы 2 разных класса содержали поля с указателями друг на друга? Ну, например: class Road{Car r;}; class Car{Road r;}; int main(){ Road road; Car car; road.r=car; car.r=road; } Верно-ли что только изменением кода классов эту программу пофиксить не получится?
>>1517543 у линя концепция совсем другая, тут нет КОМБАЙНОВ, вроде адоба и прочих раздутых утоплеников. Каждая программулина делает только одну задачу. Функционал больших прог достигается скручиванием этих мелких прог в скриптах. Да сложно, да непривычно и придётся учится пользоваться ПеКа просто заново. НО! функционал такой что нахуй эту ёбаную Шинду с дебилами живущими на ней, а уж темболее яблопидоров и андроидодегенератов. Алсо, для всяких дизайнов и музычки софта хватает, ты просто не искал нихуя. Ну и да, в крайних случаях вайн вам поможет. БЕГИТЕ С МЕЛКОМЯГКОЙ ПОМОЙКИ!!! я прост сам начал недавно сетями заниматься, как бы вам сказать, плохие вещи реально есть, их много. Пиздец с безопасностью, ГЛОБАЛЕН
Кто-нибудь может может дать ссылки на реальные опенсурс проекты, где все сделано правильно по гайдлайнам итд, по которым ньюфаг может составить хоть какое-то представление о реальной разработке.
>>1521450 Нет, ты выебываешься и не хочешь погуглить немного. Тебе анон верно ответил, для каждого инстанса твоего шаблонного класса сгенерится свой обычный плюсовый код как для обычного класса. А кто мешает тебе в обычном классе использовать динамический полиморфизм? Но зачем - это другой вопрос.
>>1521489 Ты хочешь абстрактный проект в вакууме чтобы получить картину реальной разработки? Ебанутый? В любом проекте будут свои костыли или ебанутая архитектура. Только не смей залазить в какие-нибудь гигантские проекты или проекты от крупных компанией - там полный пиздец, не найдёшь того, что ищешь.
>>1521533 > Ты хочешь абстрактный проект > ссылки на реальные опенсурс проекты > В любом проекте будут свои костыли или ебанутая архитектура > где все сделано правильно по гайдлайнам Я спросил про реальные проекты с правильной архитектурой еще скажи что таких нет, а ты мне про велосипеды пишешь.
>>1517305 (OP) Блять шесть лет, ебаных шесть лет потратил на эти кресты и знаете что. За это время не смогли высрать ни одной вменяемой IDE, которая бы не лагала и предоставляла приемлимый автокомплит и реафакторинг, просто нет. Блять, за что мне такое наказание.
>>1521710 >>1521700 Пробовал проект больше 200 строк открыть или шаблоны поделать, эта хуета от JB начинает как не в себя жрать все ресурсы. Проблема вот в этом, фичи есть, работает медленно пиздос. Смузиебский QtCreator работает кое-как (много левых ошибок).
>>1521716 Ну, может ты на каком-то старье работаешь, я таких проблем не испытывал с поделиями от JetBrains. И вообще, они на Жабе написаны, так что все логично. Вот что реально хуево написано, это VScode, типа простой и нетребовательный, а в реале написан через жопу, и на Линуксе при подсоединении через ssh невозможно работать, все лагает. Ненавижу таких криворуких уебанов.
>>1521721 >Вот что реально хуево написано, это VScode, типа простой и нетребовательный, а в реале написан через жопу, и на Линуксе при подсоединении через ssh невозможно работать, все лагает. Ненавижу таких криворуких уебанов.
Вот тут согласен, а еще у меня под линупсом от него глаза вытекают, хуй знает почему.
>>1521731 Умел еще до твоего рождения, пихаешь хоть весь Adobe Font Folio в ~/.fonts и настраиваешь свой Consolas с Segoe UI в PyCharm, и суешь Arno Pro и Helvetica Neue в XeLaTeX, и урчишь довольно.
>>1521735 В чем состоит пердолинг, дебилушка? Раньше тебе может и нужно было поебаться с настройкой антиалиазинга и прочего ануслизионга, сейчас ты тупо кидаешь шрифты в папку, даже устанавливать не надо, как в мастдае. Или ты хочешь, чтобы тебе коммерческие шрифты вместе в бесплатной бубунтой поставлялись? В тот ли попен-сорс ты зашел, петушок?
>>1521738 я не вижу смысла тратить время на это красноглазое говно, сорян. У меня из коробки все работает, мне не надо выебываться КАКОЙ Я КРУТОЙ ЛУНИКСОИД ПРОЕБЫВАЮ ВРЕМЯ НА ХУЙНЮ.
>>1521731 >Луникс не умеет в шрифты в линуксе ты можешь выставить dpi в системе, равным ppi твоего монитора после этого взять растровый шрифт, это будет terminus, и использовать его в редакторах это позволит буквам гореть пиксель в пиксель
>>1521489 например, реализация стандартной библиотеки плюсов в проекте clang: https://github.com/llvm/llvm-project/tree/master/libcxx особенно то что появилось в 17м стандарте, а именно реализацию типа string_view, реализацию std::filesystem, типов any, variant и optional..
если сидишь на компиляторе майрософт, то можешь глянуть и их реализацию стандартной библиотеки, но она постарше, с другой стороны, код для новых возможностей библиотеки так же свеженаписанный..
Вектор при изменении своих размеров вызывает деструкторы для элементов, что испортило мне все элементы. Понятно для чего так сделано - но я использую деструктор немного не по назначению. Элементы - структуры, чтобы избежать вызова деструкторов я в структуру добавил соответствующий флаг.
Вектор при перемещении элементов может использовать конструктор копирования/перемещения и два соответствующих оператора присваивания. Как правильно сделать, чтобы он скопировал все поля структуры, но при этом ещё и поставил соответствующий флаг? Я оставил operator=(&) =default (чтобы не копировать весь список полей вручную), и написал operator=(&&) с установкой нужного флага. Тем не менее вектор не компилируется, ему не хватает конструктора копирования.
Есть полная статья про перегрузки операторов? Для пример, есть перегрузка оператора сложения. Я могу поставить во всех местах, значения, (константные) ссылки или &&-ссылки. В чём разница между этими вариантами и какой смысл ставить ссылки, если даже без них не вызывются конструкторы или операторы присваивания? Особенно интересно про операторы присваивания и конструкторы. По идее пустой конструктор и оператор присваивания почти эквивалентны move-конструктору, но вектор их не кушает, например. Почему оно не жрёт "T static operator+(T a, T b)", хотя это наиболее интуитивный вид перегрузки сложения, например?
Я сейчас создал класс где есть все возможные операторы присваивания и конструкторы. И вектор при изменении своих размеров использует T(const T&) несмотря на наличие move-операторов. Для чего? А если я его удаляю, он использует T(T&&). Не могу сказать, что такое поведение интуитивно понятно. Мне казалось он должен пробовать в очерёдности T(const T&&), T(T&&), T(const T&), T(T&) - так вроде как будет эффективнее в плане быстродействия, а он берёт сначала 3 вариант, а затем 2.
>>1522037 Нет конечно. Спасибо, это помогло - теперь верно и предсказуемо работает как мой идеалогически неверный код, так и тестовый пример. Интересно, каким образом я должен был догадаться про noexcept. Избегаю исключений во всех случаях, больная концепция. Должно быть наоборот - по умолчанию вообще всё noexcept, и только в случае если что-то кидает исключения - только тогда на него надо явно прописать "yesexcept".
>>1522103 Если ты сравниваешь с c-style двумерным массивами - то они оба хранятся в одном куске памяти. А если с vector<vector<type>> - то у него каждая строка хранится в своем куске памяти, из-за чего доступ будет медленнее при загрузке в кэш процессора, для понимания почитай подробнее, хоть того же Таненбаума.
А так, если у тебя не невероятные объемы данных и делаешь для себя - то можешь вектор векторов использовать, будет удобнее.
>>1522123 Медленнее в том случае, когда будешь последовательно проходиться по всем элементам и менять строку. Но вряд ли кто-то из нас это заметит. Вот нвидия-кун мб и должен о таком париться, думаю.
>>1522132 Ебаный рот этатваказино блядь. В былые времена вся суть поместилась бы на полторы странички салфетки. Нет блядь, хотим жрать говно, хотим 4к видио на полтора часа.
>>1522202 А хулi ты ну тот "ты", который постил видос хотел, когда постил, а? Впечатлил тебя видос, ну напиши, блядь, хотя бы чем, почему. Осилил весь видос? - запили краткий конспект.
А так, тупо видосиками перекидываться - этож шитпостинг, нахуй, все равно что сисечки-писечки сюда из вконтактика репостить.
Кто, нахуй блядь, в здравом уме, полтора часа хуй пойми заведомо чего будет смотреть вообще?
>>1522207 Тут есть такой момент, что зумеры только видосы умеют воспринимать нынче. Реально, студенты тупо смотрят видосы по любой теме, текст читать неспособны.
>>1522239 че? александреску умный мужик, но тут он какой то трешовый талк запилил нафиг надо хардкордить стандартный std::sort? внутри у него все нормально - быстрая сортировка (с оптимизацией худшего случая, между прочим), плюс щас в стандарте есть stable_sort, partitional_sort, sort_heap для частных случаев насколько я понял, он пытается минимизировать количество сравнений и свопов, и именно такие специализированные сортировки будут работать быстрее std::sort для "тяжелых" объектов но нахуя? гораздо проще держать в контейнере не объекты, а указатели на них (умные указатели), и все, на оптимизацию количества свопов пофиг да и не стоит забывать про механику перемещения, щас внутри стандартных алгоритмов объекты муваются (при наличии такой возможности) а не копируются
>>1522251 Читаешь книгу, прикладываешь 70% усилий. Ебешься с закладками, заметками, с бездушной простыней текста. @ Смотришь няшный видосик на 2x промотке, наслаждаешься эмоциями докладчика, вопросы аудитории проясняют непонятные моменты. Уровень усилий - 30% для тех же знаний @ Проклятые зумеры не хотят страдать как диды страдали без пеницилина
>>1522362 Двачую, вообще не могу читать книги, использую их как справочники. Вон там с цппкона видосиков на целый год хватит, а потом еще зальют. Кроме того, ученые доказали, что на слух информация воспринимается лучше, чем зрительно.
А теперь не лаба01. Насколько реально написать компайл тайм компилятор? Из чего-то си подобного в апи для уже существующего генератора ассемблера для виртуальной машины.
>>1522362 >Читаешь книгу, прикладываешь 70% усилий. Ебешься с закладками, заметками, с бездушной простыней текста. Два слова: порог вхождения. Чтение - это навык, и умеющий читать, прикладывая 5% усилий, затратит минут пять на чтение блогпоста, в котором будет то же самое, что в полуторачасовом докладе. Основной плюс чтения - оно позволяет моментально скипать уже тебе известное, введения, заключения, быстро переходить к сути. Чем менее ты тупой, тем больше ты получаешь профитов от чтения. Большинство людей тупые. Тупые деды не страдали, они ходили в университет и слушали там лекции. >>1522374 > Кроме того, ученые доказали, что на слух информация воспринимается лучше, чем зрительно. Теперь все программисты переходят на программирование на слух.
>>1522409 и два чую, и нет чисто ознакомиться видос лучше. вникать уже легче читая. тут недавно скидывали плейлист с лекциями. Чувак половину времени ебланит и отвечает на вопросы студентиков.
Аноны, подскажите пожалуйста. Можно ли на C++ или C# бесследно прочитать память процесса? То есть, сделать это так, чтобы, условно, часть кода в самом этом самом процессе, или же сторонний код не заметил, что я это сделал. Хочу написать код для взаимодействия программы на языке внутри компьютерной игры, чтобы он отправлял данные в программу, запущенную на десктопе
>>1522409 > Основной плюс чтения - оно позволяет моментально скипать уже тебе известное, введения, заключения, быстро переходить к сути. Чем менее ты тупой, тем больше ты получаешь профитов от чтения. Если мы говорим про значительный объем материала, то по книге учиться значительно хуже, потому что книг, которые хорошо сделаны, как учебный материал, можно по пальцам пересчитать. Именно по этой причине нужны универы - большинство авторов книг банально не умеют писать интересно.
Про шортриды тоже самое - если написано скучно, то ебал я в рот читать даже просты вещи. Так недолго и выгореть, в C++ и так приятного мало, а если меня говночтиво от александреску будет дизморалить своей унылостью, то я точно писать код перестану
>>1522409 > Теперь все программисты переходят на программирование на слух. Ты жопу с пальцем перепутал. И да, на видосиках так-то и зрительный контакт имеется. Да и скипать видосики быстрее, чем переворачивать страницы, лазить туда-сюда в оглавление итд.
>>1522556 если тебе нравится поделие ебнутых мозилла-фанатиков (которые убивают щас второй свой браузер), то, пожалуйста, изучаи и пиши на раст, без проблем но зачем срать в крестотред? это раздражает
Напишите функцию count, которая возвращает количество совпадений (вхождений) в целевом вложенном списке. Вложенный список, это когда внутри списка есть еще списки.
молю вас объясните мне что такое "совпадения(вхождения" и "Целевой вложенный список" вернее что такое вложенный я знаю, а целевой это как?
>>1522723 Я так понял, что принимаешь ты rvalue, но внутри это уже lvalue, потому и нужно делать std::move. Думаю, что без этого бы ты не смог использовать дважды этот аргумент - он же неявно мувнется и уже будет невалидным.
>>1522848 Поменяй int на double 4 и 4.0 имеет разные типы, int и double соответсвенно Если хочешь использовать именно с плавающей точкой, то пиши это явно
Доброе время суток. Столкнулся с проблемой работы sleep. На 1 скрине sleep не работает, все числа выводятся мгновенно при достижении конца цикла. На втором скрине всё работает, надпись выводит каждую 1 секунду. Среда Qt Creator
Прошу объяснить почему всё так, желательно адекватными терминами, или терминами которые я смогу загуглить. Большое спасибо.
>>1522960 Скорее всего дело в том, что cout использует буфер для вывода, можешь попробовать в первом варианте std::cout << data << std::flush сделать, хотя я хуй знает
>>1522960 >Прошу объяснить почему всё так, желательно адекватными терминами, или терминами которые я смогу загуглить. 1. Вывод текста буферизируется иногда. Предположим, ты записываешь данные в файл - вместо того, чтобы записывать по одному байту насилуя жёсткий диск - он сохраняет некоторую очередь для записи, и потом пишет всё сразу одной пачкой. Вышеуказанный flush по идее должен принудительно эту очередь отсылать в консоль для вывода. 2. Я не уверен насчёт sleep-а с маленькой буквы, но Sleep(1), это подождать 1 миллисекунду (в действительности там 3-7, что зависит от операционной системы и других вещей, но всё-равно мало). Ты можешь на глаз отличить 50 мс (это 1/20 секунды) от мгновенного вывода? Я не могу.
Есть код, который выводит данные из файла (x и y). Эти переменные должны использоваться в формуле, но как нормально прописать для этого счётчик? То есть программа должна брать за одну итерацию значение х и у первой строки, выводить результат (например х + у), брать вторые переменные и т.д. Кстати точное количество переменных неизвестно, Мб их вектором посчитать и вывести пользователю, чтобы он сам вводил границу цикла рассчёта?
>>1522968 >>1522972 >>1522996 Огромное спасибо за ответы. Действительно, используя flush всё работает. Ещё буду разбираться в теме, ведь теперь знаю куда копать. Спасибо ещё раз
Анон, объясни понять, откуда появляется мусор после запятой при делении числа float на 10. Задача перебрать и сложить все цифры 5-значного числа без перевода числа в строковый формат. Например, число 79813. Делаю следующим образом: делю число на 10 (получаю 7981.3). Далее вычитаю это число само из себя, переведенное в int:
digit=result-int(result)
Так вот, в данном конкретном примере программа выдает не 3, а 2. Потому что какого-то хуя результат приведенного выше выражения - 0.299805. Откуда берется эта погрешность и как от нее избавляться?
>>1523798 Спасибо, буду изучать. В своей проге (на codeabbey задачки решаю) просто добавил 0.1 к изначальному значению и задачу выполнил, но сомневаюсь, что это правильное решение, лол.
>>1523793 Какой-то сложный у тебя пример. Вот проще. Ошибка чисел с плавающей запятой про которую просто везде написано, в любой книжке и в любой статье с использованием дробных чисел. >Откуда берется эта погрешность Представь, что у тебя есть только обычные десятичные дроби, а тебе нужно записать 1/3 или 1/7. Вот и компьютер пишет 0.142857142857, но это ни разу не 1/7 и сколько бы он не старался, он 1/7 с абсолютной точность >как от нее избавляться? Не использовать float и double, там где тебе не нужны дробные числа и использовать символьную арифметику или другое представление чисел (например, в виде пары целочисленных числителя и знаменателя). Использовать float только когда ты понимаешь что тебе нужен именно float, во всех остальных случаях (в ситуации по умолчанию) использовать double. >Задача перебрать и сложить все цифры 5-значного числа без перевода числа в строковый формат >digit=result-int(result) У тебя очень неинтуитивный способ высчитывать число. Если так хочется сделать через него, можно было бы написать digit=N-(N/10)*10 и это бы сработало во всех случаях (N и digit типа int; делить именно на 10, не на 10.0 или 10.0f) выдавая 3. Но вообще вот такое решение больше напрашивается на ум: https://ideone.com/XEBmbd
>>1517305 (OP) Есть OpenBlocks+miniGW, нужно загрузить текстуру в формате png. Подключаю libpng в виде: #include "png.h" Но при компиляции выдает ошибки в виде: undefined reference to `png_sig_cmp' Как заставить его видеть библиотеку?
Где можно про смаке с нуля прочитать, чтобы максимально для даунов было? Хотел попробовать либу для qt poppler, а там, видимо, миллион зависимостей, которые авторы нигде не указали, или указали где-то совсем в жопе, что я просто не нашел.
Узнал, что std::future продлевает жизнь локальных переменных внутри std::async. // future from an async() std::future<int> f2 = std::async(std::launch::async, []{ return 8; }); Типа если помимо return 8; там что-то насоздано, то оно будет живо, пока f2 жив. Kakov pizdec. uuuu suuuuka я из-за этого ловлю охуительные постэффекты
>>1524342 Обновляешь легаси? Похвально. 1<->1 соответсвия не будет, смотри, что делает код и ищи похожий функционал в STL. Попробуй начать с filesystem
>>1524543 собрал через visual studio который пришлось для этого ставить, получил заветные lib файлы, теперь ругается на undefined reference to `@__security_check_cookie@4'| я так понял нужна ещё библиотека bufferoverflowU.lib буду и её искать
>>1524554 не мучайся, поставь студию и вцпкг. А не ебись с этим говном типа КОК БЛОКС, которое вообше никто никогда и нигде не использует. Откуда вы все его высираете вообще
Почему в Qt mouseMoveEvent работает только при нажатии мыши? Хотел приклеить QGraphicsItem к курсору мыши, чтобы он следовал за курсором, пока я не нажму кнопку мыши, но что то не получается.
>>1524747 Выполняешь миллиард итераций пустого цикла, а потом миллиард итераций пустого цикла с нужной инструкцией/операцией. Замеряя время при этом. Вычитаешь одно из другого и делишь на миллиард. Повторяешь 100 раз и усредняешь.
>>1524889 Компилятор «оптимизировал» это, выкинув обращения, т.к. потом переменные нигде не используются. Пытался что-то родить через non-volatile, не поехало.
>>1524976 Возьми любую либу для бенчмарканья, раздели код на ключевые фазы и напиши на них бенчмарки. >>1524994 На пике хуйня какая-то, либо гугли гайды по этому профайлеру, либо бери другой, либо вообще бенчмаркай всё руками (самый точный вариант).
P.S. Кста модер саси додик хуй ты меня забанишь за анрелейтед
>>1524973 Поставь переменным volatile (всем, и для счётчика цикла, и нужным для замера). Пропиши вручную через asm два цикла, пустой и с нужными инструкциями. Выключи оптимизацию через -O0, хотя вот это уже очень плохая идея. Во всех этих случаях он не станет оптимизировать.
>>1524972 Идея использовать движок не такая плохая, не придётся ебаться с графическими апи, с загрузкой анимаций разных форматов, с физическими движками и линейной алгеброй. Вручную без наработок застрелишься. И всё ещё очень сложно сделать качественный разнообразный город в плане контента, где не только статичные стены, но ещё и всякие двери, окна есть. А чтобы разрушаемый, так это вообще. Просто так из коробки физический движок не потянет по идее, нужно надстройки поверх него писать, чтобы после разрушения строение архивировалось в статичную модель или ещё что-то такое.
>>1525356 А нахуя мне избыточную информацию хранить? В теории могли бы добавить по аналогии с шарпом условный size_t, который на х64 будет 8 байт занимать, при этом в моей программе диапазон значений будет от 1 до 6, хватит и одного байта, и вот вопрос нахуй мне эта длина восьмибайтовая надо. В плюсах ты не платишь за то что не используешь если на Qt не пишешь ахахах
>>1525452 А в чём проблема передать размер массива вторым параметром? Можно еще дохуя избыточной информации хранить для удобства, но это в концепцию языка не вписывается.
Аноны, как осваивать многопоток? Вот перечитываю Concurrency in Action, хотя всего месяца 3 прошло с момента когда я ее закончил. Вроде бы и не лениво учился, запоминал детали, переписывал то что работает там псевдокод по большей части, а теперь понял что в голове пусто, даже синтаксис std::packaged_task не смог вспомнить без цппрефа. Подскажите идею для программы, в которой можно будет нормально применить многопоток в идеале это какой-то проект с гуем, но сойдет что угодно
>>1525555 >огопоток это МЮТЕКС ЗАЛОЧИЛ\ Бля ну спросят у меня что за std::memory_order_relaxed а я такой >НУ БЛЯЯ Я Ж ЧИТАЛ Да и даже на мьютексы что-то полезное же можно накодить. Вот ты анончик где-то в самописных проектах применял многопоток не на уровне auto result = std::async()?
>>1525557 > Бля ну спросят у меня что за std::memory_order_relaxed а я такой Ответь, что вся эта параша работает только на ARM архитектуре.
> Вот ты анончик где-то в самописных проектах применял многопоток Из того, что вспомню на память - пара атомарных счетчиков\флагов, которые читаются и модифицируются из разных тредов. Например log-level для логировалки.
Парочка хэштаблиц, защищенных shared_mutex'ами, т.к. в них 1 запись в пятилетку, зато чтений 100500 в секунду.
Ну а архитектура у нас сделана по принципу, есть слушающий тред, в пайп приходят команды. Этот тред спавнит новый тред на каждую команду. А внутри команд уже делается всякая хуйня. Есть глобальный вектор "обьектов-созданных-командами" и внутри этих обьектов есть так же треды, в которых обьекты живут.
Короче, я хуевый обьяснитель, но общая идея дизайна нашего говна в том, что у нас shared-ресурсов - только вот пара атомиков и пара хэштаблиц, все остальное локально. Тредов много, но никаких рейсов и прочего нет.
>>1525559 >Ответь, что вся эта параша работает только на ARM архитектуре. Не понял, откуда информация? В книге не упоминалось вроде-бы, можешь пояснить или ссылку дать? Или это момент когда теория расходится с реальностью? За остальную инфу спасибо, наверное буду стандартные контейнеры тред-сейф делать, потом может что-то в голову прийдет
>>1525560 где-то читал, что большая часть всей это мемори-модел-хуйни просто не работает на интеле в связи с архитектурными особенностями. Т.е. что бы ты там не прописывал - все равно будет sequental.
>>1525562 >-хуйни просто не работает на интеле в связи с архитектурными особенностями. Т.е. что бы ты там не Надо в годболте поиграться с этим всем, сомневаюсь что это так на самом деле но и поспорить не осмелюсь
>>1525648 Сам придумай же. Интуиция подсказывает мне, что нету - там же очень большое количество вариантов решения может быть, если все нужно найти. Можно просто на каждом шаге выбирать клетку с минимальным количеством вариантов и перебирать варианты, проверяя не образуется ли ошибки при дальнейшем разгадывании. Я сам вручную решаю таким способом минут за 5-8 любую, то есть компьютер там справится где-то за миллисекунду для судок из задачников, где всего одно решение.
>>1525633 Да, что-то я спиздел немного. В msvc stl весь заголовок 500 строк, но это вместе с шаблонной дриснёй вроде специализации для нулевого размера, всякими deduction guides и кучей препроцессора. Если всё это выкинуть и убрать их ебанутое форматирование, останется строк 100.
>>1525751 mouse_event или postmessage/sendmessage с событием WM_LBUTTONDOWN. Но это не сработает с некоторыми играми и некоторыми прошаренными программами - там нужно уже добавлять виртуальной устройство с фиктивным драйвером, и тут проще использовать уже написанный vJoy, который умеет эмулировать мышку. Возможно, я наврал во всех пунктах, не воспринимай серьёзнее чем наводку с дивана.
>>1525332 В общем собрал я и всё заработало, только проблема что zlib можно собрать в x64 а libpng в конфигурации только x32, это можно как-нибудь пофиксить в VS2019?
>>1525865 Ты через vcpkg собирал? Там же можно указать libpng:x64-windows или что-то вроде этого. Если через cmake, то скорее всего проебался с генератором
Нужна помощь. На практике выдали задание,на стартовой форме приложения должно быть динамическое(подтягивать из БД) штатное расписание предприятия.Как это сделать? Проект пилю в Rad studio xe2
https://pastebin.com/8EuBGwB0 Смотрю примеры многопотока, в описании сказано, что здесь возможен рейс за баланс, т.к. потоки могут постучаться одновременно, но за 1000 прогонов отрицательного баланса не было ни разу. Грешил на одноядерный celeron, но онлайн-компиляторы выдают то же самое. ЧЯДНТ?
>>1526231 там условие if (balance >= хуйня) - может быть труевым, но в процессе выполнение тела может невалидным, и логика будет сломана.
И вообще, с точки зрения C++ - вся эта программа это Undefined Behavior, т.к. в разных тредах можно писать только в атомарные переменные или локи делать.
>>1526240 Так я и жду этого UB, дальше по примеру как раз идут мьютексы и атомики (правильный вариант программы), но каждый раз все отрабатывает нормально и без них.
>>1526231 Проверка if (a>3) a-=7 не атомарна. Тебе просто повезло из-за особенностей архитектуры.
Твой пример не падает, но если добавить побольше вычитаний, например так: https://pastebin.com/YpKH4MpP При N=10000 всё работает верно. При N=100000 оно уже ломается. Такая ошибка даже хуже, чем если бы оно всегда ломалось. На каком-нибудь arm оно будет ломаться при других условиях.
Программа не проходит тест. Пишет превышение максимального времени. Но что то тут не так. Сначала превышение времени было на 8 тесте. Я покорректировал программу и она стала выполняться за 0.02 секунды вместо секунды. На следубщем тесте оптять превышение времени. Мне кажется где то она входит в есконечный цикл, хотя такого не должно быть. Мне кажется я накосячил в написании. Может переменная переполняется и становится нулем? Типы взял максимаьные. Вроде не должно. Поэтому вопрос как найти ошибку
>>1526267 Эти ошибки обычно о том, что ты даун теоретически обращаешься к несуществующему элементу массива (то есть индекс выходит за рамки). +1 тут не причем. Проблема скорее всего в индексах.
>>1526294 У меня есть более важный вопрос. Как ускорить программу? Найти ошибки в алгоритме? А то ебанное превышение времени. Я вот удивляюсь почему тесты так резко меняются. Время выполнения 2 сотых на одном и больше секунды на следующем
>>1526304 Ну во первых, рад студио это кусок говна для дидов. Во вторых - там должны быть коннекторы к БД (по кр. мере в СБилдере были, когда я его тысячелетие назад трогал).
>>1526315 Спасибо. Действиткльно тип нужно поменять. Еще я забыл единицу вычесть. Эта формула вернет колличество элементов, в которых значение на единицу больше чем в других. То есть двум элементам будет соответствовать номера 0 и 1, поэтому нужно вычесть
Как в VS2019 в зависимости от конфигурации определять define. Т.е. по умолчанию там Release, Debug, я создаю свою, например Test и хочу чтобы при этом режиме в коде что-то вроде: #ifdef TESTDEF ... #else ... #endif
написать прогу на C++Аноним17/12/19 Втр 23:31:52#590№1549789
Здорова, хелпаните Ввести массив целых чисел X(N). Определить среднее геометрическое положительных элементов, кратных трем, и записать его в начало массива, переместив элементы массива вправо (вспомогательный массив не создавать). Выдать на печать исходный и преобразованный массив. на C++
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред:
•