Это копия, сохраненная 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред:
• >>1512466 (OP)
Блять, твердый знак забыл. Совсем ебанулся уже.
педеРаст, уходи
Имеется в виду, что прямого доступа к указателям нет. Можно сделать ссылку или передать переменную в владение другой переменной
Байтослесарь порвался. Иди память подчисти, да висящие ссылочки ручками поудаляй : )
последние книги старика так себе.. "язык программирования с++, специальное издание" годная книга у него, и то с оговорками.. "дизайн и эволюция" самая интересная, но не для тебя..
Ебанутый, честное слово.
Один, ибо у них совсем все тухло. Аналогично шизику, который под яблоко прогает и срет в си-треде и тут иногда, использует боевые картиночки.
unordered_set<Kluch,
[](Kluch&k){return...},
[](Kluch&k1,Kluch&k2){return...;}>
чтоб в одну строку создать эту хуергу со своей простенькой хеш-функцией и предикатом тождества.
Бьерн хвалит msvc компиль. Линуксоблядей попрошу выйти из треда. Microsoft топ-1 контора мира, уже совсем скоро сожрет всю индустрию целиком.
Когда в венду завезут способ ускорения, кроме переустановки системы?
> Линуксоблядей попрошу выйти из треда
Я бы такой и не против стать линуксблядью, ну в нём нету нихуя, чтобы пописать музычку, и чтобы ваять дизайнчик в прогах от адобе, короче только кодить в нём.
При желании все стандарты новые С++ позволяют писать без утечек и мне похуй, что вы там себе напридумывали про безопасность. Вы сосете член и даже не стесняетесь.
Короче, я сам посмотрел и единственная разница в структуре IMAGE_OPTIONAL_HEADER, где некоторые поля внизу инициализируются ULONGLONG вместо DWORD. То есть мне придется писать две версии класса для обработки ПЕшки под две архитектуры?
То что я прозвал unsigned char Architektoм, при этом что это обычный тип, а не класс.
>static_assert
Кстати, а вообще ветвить код в функции в зависимости от типа переданного шаблонцозавра порочно? Так делают истинные гуру?
Епта, это называется абстракция. Можешь потом менять тип данных в куче мест одной строчкой. Плюс позволяет различать значения с разной семантикой, чтобы не складывать яблоки с пчелами (но для этого лучше настоящий strong typing).
оп-растоблядь
Если ты посмотришь, то и до этого так перекатывали, педеRUST-борщехлёбушка. Дрессируй лучше себя, чтобы не срать в треды.
Лол, сейчас бы в 2к19 хвалить проприетарный компилятор. Дежурно напоминаю, что msvc пришлось наверстывать поддержку новых стандартов именно из-за clang. Не было бы шланга, сосали бы вы сейчас прямо как пользователи icc
Дешевые оправдания с помощью былых заслуг. Если рантше перекатывали, то чего перестали, лалка?
В том-то и проблема, что при желании можно писать с утечками. И не только при желании, можно тупо ошибиться. В этом и суть Rust: он не даёт прострелить колено, отсеивая подобные баги на этапе компиляции
а бы сначала попробовал сделать через перегрузку функции, если не устроило бы, то через специализацию шаблонной функции и в крайнем случае стал бы использовать возможности новых стандартов..
>лалка
Типичный расторебёнок.
>Дешевые оправдания с помощью былых заслуг
Просто ты, манька, сидишь и высираешь в тред про то, что из-за тебя великого кто-то что-то там делает даже. На деле же всем похуй на тебя, юродивый.
>он не даёт прострелить колено, отсеивая подобные баги на этапе компиляции
Если он такой ахуенный, то почему его никто не использует кроме пары бородатохипстерофирм? И не пизди, что %FIRMA_NAME% его юзает, педеРАСТ растёт крайне медленно и через лет 5 вообще сдохнет, потому что его создатели его окончательно превратят в говнофункциональную парашу по типу хаскеля.
>Настолько похуй, что не могу тебя о этом не уведомить
На будущее - чтобы продемонстрировать безразличие, лучше не отвечать
растоблядь
Через 5 лет в C++ перенесут и borrow checker из раста, и концепты оформят как в расте, и stdlib сделают человеческой как в расте, и std::move превратится в destructive move как в расте. И нихуя у тебя от современного C++ не останется. Ты еще не понял, что растобляди уже победили: или rust победит, или C++ по сути станет таким же, как rust.
>продемонстрировать безразличие
Я безразличен к твоим действиям, но небезралично потешаюсь с твоей тупости.
Один ты тут нервничаешь
Он по сути конкурирует с с++. И говорить, что его никто не использует, неправильно - просто язык относительно молодой.
Если borrow checker перенесут на с++, то он превратится в монстра без обратной совместимости. А раст останется чистым и аккуратным
>Ты главное не нервничай
Мне-то самому rust больше нравится, только что ты тут агитируешь аки проповедник? Тут люди серьезные сидят и у нас на крестах работа повязана, старые проекты, что, могут и на шее ярмом быть, но они есть, так что я тебя не понимаю, зачем ты тут полемику начинаешь.
А где Rust ?
> То есть мне придется писать две версии класса для обработки ПЕшки под две архитектуры?
Да. Можешь еще как лох на макросах и if/else.
>Юзайте пикрил
А как в расте low-level acces делают безопасно? Там я могу такой на понтах взять и тупо по адрессу 0x228 обратиться и записать что-то?
Ты понимаешь, что ты уже который тред агитируешь не за раст, а за собственную распиздатость? Ты молодец, весь такой прогрессивный и охуенный, создай себе тред и сиди в нем
Кодить это необходимость, а не смысл жизни, тупая ты никчемная овца. Это как умение пользоваться молотком, отверткой, плоскогубцами, паяльником.
> Очередные программситы с винтом на 80гб в треде рофл
Очередная чмоха, сейчас будет рассказывать, что ради логотипчика любимой корпорации нужно непременно тратить бабло и увеличивать вычислительные мощностя, пусть того и требует лишь идеешечка с компилятором.
Для этого и придумывали if constexpr. Только не вздумай потом писать в else-блоке !std::is_same<T,T>
Хотя в будущем C++20 вроде как можно будет такое писать искаропки
Уже так и сделал.
Как будто в расте нельзя дрочить голые указатели с маллоками. Уноси своё раздутое говно.
many thanks you for help
>Бьерн хвалит msvc компиль.
Он очень тормозной. Даже со stdafx компилит в разы медленнее, чем mingw. Из плюсов - больше ворнингов ловит по дефолту, но сообщения об ошибках гораздо хуже, чем у GCC.
Да, нищий студентик, твое мнение о профессиональной разработке всем очень важно.
>В этом и суть Rust: он не даёт прострелить колено, отсеивая подобные баги на этапе компиляции
Обсудили же в прошлом треде. Он это делает, только пока ты данные располагаешь в виде дерева. Единственная альтернатива этому - использовать индексы и Rc (умные указатели) вместо ссылок, из-за чего вся магия раста сразу теряется, он перестает ловить ошибки во время компиляции, и становится ничем не лучше крестов.
>А раст останется чистым и аккуратным
Ага, менять синтаксис языка в минорных релизах - сама чистота и аккуратность.
>из-за чего вся магия раста сразу теряется, он перестает ловить ошибки во время компиляции, и становится ничем не лучше крестов
И тут ты такой приносишь пример, где компилятор не детектит ошибку
башем который идет вместе с гитом
Может, кому для мотивации поможет.
Когда в жопу ебаться перестанешь
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] -> [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ИЗДАЧ.
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] -> [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ИЗДАЧ.
дзен заключается в понимании того что гигиенические макросы на плюсах - это шаблоны
теперь уебывай
suum cuique
>СТРАУСТРУП занимался рутинными вещами, такими как ебля своей трехсоткиллограмовой матери в зад.
Тоже что ли видели то видео? Ебать я тогда ахуел.
ну и хуле
‹‹Записываю витал-икону+наши хромосомы из выделений в присос =кровь хромосомы::горизонт жидкостей тела=убить как собаку, разложенную до голого гена =ТВ/спазм// Я разочарован в объёмной инокуляции гидромашины::бесконечный круговорот масс плоти::исчезаю с телом машинной природы ТоК::‹‹высасываю порно нервный газ бойроида// Душа/грамма самосокрушения до квантовой трагедии NDRO// Выход=преступник внутренней-системы-органов›› Определяет++мазо=траффик::от ToKAGE, скапливающихся в городе Городе Трупов// Душа/грамм их разжижают внутренние жидкости тела++себя, что вызывает в цифровом вампире функцию насилия::чудовнще разрастающееся запечатлено в голограмме пса и реверберации// Жестокость замученной памяти/
> педераст и либирал.
Я так и решил оставить карьеру, когда сменив две галеры и придя работать в третью, увидел что там то же одни педерасты и либаралы и прочие подвиды хипстеров. Презираю всех вас, чмошек ебанных.
Проиграл с ''С++'' треда.
>Что за видео?
Он про видео, где СТРАУСТРУП занимался рутинными вещами, такими как ебля своей трехсоткиллограмовой матери в зад.
>Кто, блядь, притащил на двачи ебаный термин "бумер".
Никто вроде, тут только миллениалы и зумеры (но это не точно).
>У питона есть urllib для работы с вебом. Есть ли среди дефолтн
Это троллинг, да? Ты специально давишь на это, ирод?
В С++ нет дефолтных либ для этих задач. Либо используй какой-нибудь curl, либо подрбуй boost. Можешь сам, конечно, на сокетах навелосипедить или заюзать платформозависимую хуйню тибо winnet с std либы, но это порочно.
К сожалению в крестах демократия, одобренных Партией либ мало, гугли типа "c++ json library"
>на сокетах навелосипедит
У меня раньше был фетиш на то, что я делал велосипеды под все и дрочил на них. У меня был свой класс строки, была своя либа запросов, было все свое, но мне было стыдно это постить на гитхаб, так как это было говно уровня HippoString string = new HippoString("anus");
>>18055
Мне пойдет.
>Ну вот, например, хочу получить html этой страницы и вывести его в консоль. С чего вообще тут начать?
в современном мире это может быть проблематично, тк контент многих сайтов генерится динамически на клиенте при помощи js
но в качестве тренировки тебе можно начать просто с реализации либы которая реализовывала бы client http, те клиентскую часть протокола http
Берешь пиздон и мажешься реквестом
>Хочу сам написать. Что можно читануть на эту тему?
https://ru.wikipedia.org/wiki/Синдром_неприятия_чужой_разработки
нужно отталкиваться от того, под винду тебе это надо, или под юниксы, или кроссплатформенное решение
из кроссплатформы, к примеру, многим нравится cpprestsdk от майкрософт
в нем есть http client, websocket client, ouath client, json и обертка для асинхронки..
по итогу это позволяет работать (с клиентской стороны) с современным интернетом, где много данных гоняется поверх http (+webcocket)
Какие кресты? Тут теперь филиал б-га РАСТА на Земле.
Да при чем тут? Учусь я, а как лучше всего это делать? Правильно, руками.
Не умею читать, сорри.
> ничем не лучше
Лучше, там в рантайме в случае бага будет вполне определенная ошибка, а не неведомое нечто (UB).
Потому что комитет на комитете, и много реализаций. А не одна, как в твоем языкнейм.
хуй сосать и в жопу долбиться
Я не ради того свой пет-прожект с няшной чистой сишечки на ваши ублюдские грязные кресты переношу, чтоб с поинтерами пердолиться в перемешку с говноабстракциями. Так-то я все вообще красиво сделаю, но вопрос нахуя тогда гигабайтные либы тащить??? Когда один хуй надо через маллокать буфер, класть в него .c_str() и аналогичную хуету при извлечении. При чем ебаная .pop() еще возвращается с ничем, вместо того чтоб дождаться, ЧТО БЛЯДЬ ЛОГИЧНЕЕ НАХУЙ!!!!!
>>18169
Неужели так сложно сделать это
https://pastebin.com/bxcwjmac
в крестовом стиле и положить для меня в STL???
Да я в курсе, что lockfree и означает не блокировку потока процедурой .pop() при пустой очереди. Но ведь других вариантов и не завезли! Спрашивается, какого хуя? Разве не логично, чтоб поток-producer запушил туда столько null, сколько потоков-consumer, чтоб каждый попнул свое послание нахуй и за-join-ился? Я теперь, как мудак, должен рассчитывать на UB, что раз пусто, то скорее всего больше не будет, потому что producer в среднем быстрее обработчика? Хуита какая-то, ответственно заявляю-с, однако.
Но ведь boost - это та самая околостандартная библиотека, фичи которой со временем прирастают к STL, не?
Расслабься, пилят еще стандарт. На 17 еще год минимум сидим.
Да, и именно из-за этого ничего хорошего ждать там не стоит. Если пытаться угождать всем и сразу — всегда получаются вот такие уёбища как stl/boost/java spring/итд.
>>18217
Что сказать-то? Если делаешь гуйню на нём то уже только его использовать и можно (он сам на себе завязан с ног до головы), если хочешь лайтово и перформансно — это точно не про Qt.
>качать цмейк гуй
>устанавливать цмейк гуй
>запускать цмейк гуй
>нажимать на кнопку в цмейк гуй
>вместо cd hui; cmake .
Шиндушатники как обычно.
A non-blocking algorithm is lock-free if there is guaranteed system-wide progress, and wait-free if there is also guaranteed per-thread progress.
https://en.wikipedia.org/wiki/Non-blocking_algorithm
>Когда один хуй надо через маллокать буфер, класть в него .c_str() и аналогичную хуету при извлечении.
в modern с++ предполагается что буфер памяти будет представляться как std::vector<std::byte>
>нормальные библиотеки (вроде folly)
FBString.h
о, да, детка
не изменяй традициям!
каждая уважающая себя компания пищая на крестах должна иметь свой класс строки
возможно, глупый вопрос, но зачем класть обязательно shared_ptr, почему просто не unique_ptr?
Мне нужна нормальная очередь.
Т.е. тебя не смущает, что у них там вообще всё окружение своё (как и у всех), а свои строки смущают?
>каждая уважающая себя компания пищая на крестах должна иметь свой класс строки
Т.е. ещё тебя не смущает тот факт, что даже в, блядь, джаве такое встречается?
Наверное, можно и unique_ptr.
>2к19, а в ваш ссаный STL все еще не завезли многопоточную очередь
да использовали стандартные контейнеры stl в многопоточке вовсю, четверть века уже используют
просто оборачивали в примитивы синхронизации, кто то писал классы-обертки для этого
сейчас то же самое на изи делают, но уже со стандартной многопоточкой..
То есть
std::unique_ptr<T> zalupa();
или
bool zalupa(T &resultat);
да это известная шутеечка про свой класс строки в каждой крестовой фирме..
но, в оправдание, мотивация то этого велосипедостроения была оправданна по соображениям производительности (особенно в геймдейве это людей раздражало)
хотя щас то все вроде более менее норм, тк семантика перемещения есть и string_view есть.. так что и стандартная строка тоже норм стала..
красноглазый полудурок в очередной серет в штаны в прямом эфире, ничего не понимая, но виновата шинда
Какие преимущества? Я вижу потенциальную утечку, но это при неправильном использовании, разумеется. Если по указателю память выделена, но не стал записывать в юник_птр.
>Какие преимущества?
Простой и понятный код.
> Я вижу потенциальную утечку
Ну так и юзай раст, лол.
Алсо, есть ещё гениальный вариант в стиле go-вна с кортежом
if (auto [huita, err] = zalupa(); err != nullptr) { pizdos(); }
>каждая уважающая себя компания пищая на крестах должна иметь свой класс строки
Бывает, что у компании своя строка, да еще и в сторонних либах, которые эта компания использует, в каждой по своей версии строк и умных указателей.
насколько я понимаю, в современном c++ типа модно возвращать значение (с передачей владения) через unique_ptr, заодно nullptr будет говорить об ошибке, еще плюс этого что можно возвращать полиморфные типы..
есть еще второй вариант через std::optional, он удобный в том случае когда не возврат значения не является ошибкой, и еще удобный тем что дальше ты работаешь напрямую с объектом (а не косвенно через укзатели, будьто и умные указатели)
может есть и еще какие новые способы возврата значения..
>Возвращу сырой поинтер
это очень хуевое решение, очень
оно имеет пользу в одном случае - это когда из твоего контейнера есть необходимость показать наружу его потроха, к примеру, как в std::vector метод data()
такой подход тоже использовался в крестах
возвращали std::pair, первый член - данные, второй - валидны или нет
очевидный минус этого что данные (в отличие от std::optional всегда должны быть, те всегда должен создаваться возвращаемый объект)
>может есть и еще какие новые способы возврата значения..
Стандартный способ еще до 11 стандарта - своя обертка, внутри которой указатель на данные, которая работает как value-тип. Вроде std::string и почти любого класса Qt (причем pimpl тут не обязателен).
к примеру, результат вставки insert в множество возвращал пару где second было удачно ли завершилась вставка, а first - возвращала позицию вставки, это было оправданно тк итераторы stl - легкие объекты, зачастую это всего лишь указатели..
>такой подход тоже использовался в крестах
А я этот псевдокодкод на чем написал по-твоему?
>>18284
Зависит от ситуации. Если писать коллекции для библиотеки, которая торчит везде - да, какой нибудь дебил обязательно отстрелит ногу всем. Если внутренняя залупа для проекта — то документации хватит с головой.
ну это то понятно
типа out-параметр обычный, но тк это ссылка, то он должен быть проинициализирован, поэтому пропехивают пустой объект в обрабатывающую функцию, а тот с ней работает
проблема такого подхода очевидна - в случает ошибки или отстутвия результата, все равно приходится "тратится" на создание пустого объекта..
>А я этот псевдокодкод на чем написал по-твоему?
на ободке своей сигары, очевидно же!
потом выкурил ее, и понял, что все это только дым!
не очень понимаю
в ситуации отсутствия механики перемещения это же приводит к копированию внутренних данных, которые обернуты этим классом?
Тебя с этой хуйней в прошлом треде обоссали, шизик. Там получишь внятную ошибку в рантайме с хорошим стектрейсом. А в C++ от этой ошибки можно защититься только с помощью санитайзеров
>А в C++ от этой ошибки можно защититься только с помощью санитайзеров
Можешь сделать проверку в рантайме без всяких санитайзеров, так же как в расте, никто не запрещает.
>в ситуации отсутствия механики перемещения это же приводит к копированию внутренних данных, которые обернуты этим классом?
Да, но в том же Qt это нормально работает. Если тебе не нужна какая-то суперпроизводительность, то почему бы и нет.
>Там получишь внятную ошибку в рантайме
А куда девается компиляторная чудо-магия? Я и в джаве могу на красивые стектрейсы посмотреть.
Верну поинтер, но в функцию, по ссылке буду передавать логгер. Короче, как у тебя, но наоборот. Сам не догадался что-ли?
> Там получишь внятную ошибку в рантайме с хорошим стектрейсом
Будто я на крестах не могу в рантайме зарегать свой обработчик ошибок с блэкджеком, шлюхами и стектрейсом длиннее твоего. В очередной раз растоманя обосралась. Вот потом такие дебилы и не могут use after free от null pointer dereference отличить.
Не пали контору этому коробочнику. Он думает, что если в стандарте нету, то все, нельзя и язык говно. Хотя язык здесь вообще не причем, это просто дополнительный инструментарий Сам же вообще нихуя не знает, как все это внутри устроено. Я уверен на 100% что этот школьник совершенно не знает кресты, насмотрелся в ютубе на сойбоев, начитался проплаченных на хабре статей про ржавоговно и пришел срать в тред.
Не понел.
>А куда девается компиляторная чудо-магия? Я и в джаве могу на красивые стектрейсы посмотреть.
Она возможна, но не в общем случае. Bounds checking - это частный случай проблемы остановки, так что с этим все грустно.
В джаве со стектрейсами все хорошо, но там сложнее добиться такого же memory footprint, latency и throughput, как в rust и c++. Ну и NullPointerException вылетает не в том месте, где null реально появился.
>>18311
>Можешь сделать проверку в рантайме без всяких санитайзеров, так же как в расте, никто не запрещает.
А можешь и не сделать.
>>18325
>Будто я на крестах не могу в рантайме зарегать свой обработчик ошибок с блэкджеком, шлюхами и стектрейсом длиннее твоего
>мечтает о большом, длинном стектрейсе
Ох уже эти комплексы у секты свидетелей небитого стека
>не могут use after free от null pointer dereference отличить
Не надоело срать под себя и смывать чужую мочу с лица?
>А можешь и не сделать.
В этом суть С++. Проверки небесплатные. Хочешь - делаешь, не хочешь - не делаешь.
Сразу видно, что о бенчмарках ты только слышал, отсюда и фразы "не платишь за то, что не используешь".
Аргументация уровня /b
Хотя, что еще ожидать от челика, который постоянно промахивается тредом, получает струю урины в лицо, и снова приходит за свежей струей
>пук
маня не в курсе, что серьезные дяди сперва профилируют и пишут бенчмарки, и только потом оптимизируют. Внезапно bounds check можно заоптимайзить и в расте, и джаве, и в js, если очень хочется. Удивительно, правда?
Серьезные дяди достаточно обучаемы, чтобы не срать там, где их не просят. Однако все те же серьезные дяди упорно продолжают срать.
Вот и подтверждение моей правоты. 0 аргументов, 0 опровержений, одни оскорбления. Попрошу тебя уйти из этого треда, ты совершенно некомпетентен.
Что такое рантайм?
>faster threads help their slower peers
Прости, но ты вообще не понимаешь, о чем речь.
Совершенно очевидно, что в общем случае queue.pop не может быть wait free.
...
b.push_back(std::move(*it));
a.erase(it); // Допустимо ли ерасить итератор после мувинга? Это всё ещё итератор на тот же элемент контейнера, пускай сам элемент уже и не валиден?
Сделал два сравнения. В общем, итератор до мува равен итератору после мува, но в то же время итератор до ераса не равен итератору после ераса. Надеюсь, что это не UB и этих данных достаточно, чтобы полагать, что допустимо ерасить итератор после мувинга.
Официальный сайт выдаёт 404
https://www.semanticscholar.org/paper/Dragon:-A-Static-and-Dynamic-Tool-for-OpenMP-Hernandez-Liao/be9a77e3d67f49ba966cd4e5b6ad23b92e4383f4
не используй новые фичи? можешь даже новые стандарты не включать
Итератор -можно, на него move не влияет.
Почему move-семантику называют именно семантикой? Это что, очередная попытка повысить ЧСВ за счет охуенно умных слов?
И что вообще значит это слово семантика применительно к проганью? Мб есть места где есть объяснения для даунов. Не уверен, что до конца вник в суть термина.
Вот еще вдогонку: "++hui;" и "hui=hui+1;" - это семантически эквивалентные выражения?
> это семантически эквивалентные выражения?
Не совсем.
>Это что, очередная попытка повысить ЧСВ за счет охуенно умных слов?
Не совсем.
>Почему move-семантику называют именно семантикой?
Ну не совсем.
>i -= -1;
Очевидно это не совсем правильно.
Для начала надо создать RAII для числовых вычислений, затем при помощи умного указателя инициализировать переменную i с определенным значением и инициаилизировать единичку, чтобы из соображений безопасности не было утечек мозгов в пендостан.
>"++hui;" и "hui=hui+1;" - это семантически эквивалентные выраже
Нет, твой хуй может как угодно переопределить эти операторы.
Даже в случае инта там возможно будет разный ассемблерный код, если отключить все оптимизацию.
И снова я тут, тестовое успешно сделал, написал к нему 25 тестов, отправил сорцы и документацию компании. Спустя день позвонили и попросили меня скинуть готовый .exe файл и тут я охуел. Собрал эксешник, три раза скидывал его этой ебаной эйчарше, но только спустя 2 часа до нее дошло что письма с прикреплёнными эксешниками блокируются почтовым сервисом. В итоге они дали мне какой-то хостинг куда я должен был залить программу, что я и сделал. Спустя еще час они написали мне что не смогли скомпилировать мой проект и запустить эксешник. Я хуй знает чему можно научится в фирме, которая с инструкцией по сборке не может собрать программу, и при тестах на линукс команды работает на винде. Уже и хуй знает как от них тактично отказаться, чтобы репутацию среди других компаний не портить.
В чём заключала задача для тестового задания? Насколько сложно? Можешь примерно почувствовать?
Внимательно посмотри на сигнатуру erase.
Да им скорее всего впадлу разворачивать окружение для сборки, поэтому и попросили exe. Скинул бы им wannacry ради лулзов, HR можно даже попросить антивирус выключить - и сука выключит
>Да им скорее всего впадлу разворачивать окружение для сборки
>exe
>>18780
>и при тестах на линукс команды работает на винде
Да нет, там всё куда хуже. Начальник смены — старший заместитель младшего руководителя среднего инженегра — Пидорасов Андрей Хуилович не для того сидит 40 лет на своёи заводе.
Ладно, раз ты тупой, то придется объяснять.
В первом случае у тебя будет выполняться только тело оператора++, а во втором - создастся временный объект, к нему прибавится единица и он будет присвоен левой части выражения. Хорошо если перемещением, но что-то мне подсказывает, что здесь будет копирующее присваивание без std::move.
Чуешь? Семантически это нихуя не эквивалентные выражения.
>Вот еще вдогонку: "++hui;" и "hui=hui+1;" - это семантически эквивалентные выражения?
Зависит от определения операторов ++ и +, они могут любую хуйню творить, даже кофе заваривать. Эквивалентные ли они для примитивных типов данных -- уже другой вопрос.
>>19027
Это еще не значит, что семантика одинаковая, т.к. компилятор оптимизирует автоматически. Т.е. де юре происходит вся та хуйня, которую описал анон выше, а де факто бинарный код одинаковый.
Да блять понятно что для примитивных. Мб еще придеретесь к тому, что на системе с копилером должен англ язык быть установлен, чтобы код вводить?
int a=0;
++a;
и
int a=0;
a=a+1;
Синтаксически написано по разному с использованием разных операторов, а логически инкремент a
Вообще забавляет как такой казалось бы базовый вопрос насадил на бутылку весь тред
Ты можешь за базар пояснить свой?
Почему не эквивалентные, если итог в обоих случаях - инкремент?
Что подразумевает собой семантичексая эквивалентность операций тогда
Хотя бы потому что операторы можно переопределить как угодно.
Давай возьмем пример чуть посложнее, раз уж ты необучаемый.
Посмотри пикрелейтед и пойми, в чем разница между += (чем является append семантически для строки) и var = var + increment;
Ты не знаешь разницу между постфиксным и префиксным ++ но уже пытаешься в 8й класс информатики
>чем является append семантически для строки
Если ты не пытаешься залить жиром просто выкатись на хуй отсюда
Ну смотри. Есть три выражения
a = b;
c = d;
e = f;
Синтаксис один и тот же. Однако в первом случае у тебя в a будет копия b, потому что его operator= ведет себя так как будто b значение.
Во втором случае у тебя c и d станет одним и тем же, потому что тип d, точнее его оператор=, ведет себя так, как будто d как ссылка (что не обязательно значит что d это ссылка или указатель, это может быть класс с перегруженными операторами и счетчиком ссылок, или вообще что угодно)
В третьем случае у тебя f превратится в e, а само использование f станет опасным. Потому что = в этом случае означает перемещение.
Т.е. написано одно и то же, а делается совсем разное. Что написано - синтаксис, что делается - семантика
>Вот еще вдогонку: "++hui;" и "hui=hui+1;" - это семантически эквивалентные выражения?
Правильный ответ: неизвестно, потому что мы не видим имплементацию этих операторов
Нет, ты говоришь про оператор++(инт).
>Вы на мамкин вопрос "Почему обосрал трусы" также отвечать будете "Это не трусы, это стринги"?
Да, так и буду делать.
the_pidor
У них вакансия С/C++ джун и у них нет блять окружения для сборки проекта из 2 файлов? Зачем они вообще эти языки указали в вакансии, я так понял я вообще первый за всю их историю кто пишет на крестах, иначе я не знаю как обьяснить ситуацию с эксешником.
>>18822
Тестовое не сложное, есть стена из блоков произвольной формы прямоугольной только, есть набор блоков, задача определить можно ли построить стену из этих блоков или нет, блоки можно ставить горизонтально или вертикально.
хм, прочитав твой пост мне захотелось написать программу которая бы переводила в машинный код "ты пидор".
Выручайте анонасы.
>Дано натуральное k. Определить, k-ую цифра последовательности 110100100010000100000, в корой выписаны подряд степени 10.
Нужно делать без циклов и т.д. На просторах интернета нашел такое решение
>Если 8*k - 7 точный квадрат натурального числа, то единичка, иначе нолик.
Источник: Формула суммы последовательных натуральных чисел. Плюс голова.
Не надо только говорить "но ведь источник есть, что понять не можешь?". Нет, не могу, к сожалению.
Сижу битый час, не могу понять откуда эта формула взялась и как она работает. Т.е. прошу вас 1) объяснить смысл формулы 2)показать иное решение без этой формулы, если это возможно ну и как говорилось используя лишь if/else и стандартные функции вроде корня/квадрата
> Определить, k-ую цифра последовательности 110100100010000100000, в корой выписаны подряд степени 10.
Ты сначала русский или английский язык выучи, а потом за c++ берись.
Как заставить прогу сравнивать именно Х именно со всеми элементами вектора?
int x, y;
std::cin >> x >> y;
for( const auto &v : vector )
{
if( v > x ) { std::cout << v << ' '; }
}
Спасибо, анон.
Игра экшон, суть токова. Есть базовый класс world в котором все объекты хранятся в векторе из поинтеров.
std::vector<worldObject> worldObjects;
Добавление объектов происходит таким образом:
void AddObject(worldObject newObj)
{
worldObjects.push_back(newObj);
}
Дестрой таким:
void RemoveObject(worldObject newObj)
{
auto it = std::find_if(worldObjects.begin(), worldObjects.end(), [&](GameObjPtr in) { return (in==newObj); });
worldObjects.erase(it);
}
Успешно напихав туда все новосозданные объекты
Приложение валится при итерации внутри world
for (auto it : worldObjects)
{
it->Update(this); // <- ТУТ с ошибкой "Exception thrown: read access violation. it was 0xFFFFFFFFFFFFFFFF."
}
Посему вопрос, насколько вообще разумно использовать std::vector для таких целей(динамический массив указателей)? Что лучше подойдет для таких целей? И чому происходит подобное?
Пикрандом
Игра экшон, суть токова. Есть базовый класс world в котором все объекты хранятся в векторе из поинтеров.
std::vector<worldObject> worldObjects;
Добавление объектов происходит таким образом:
void AddObject(worldObject newObj)
{
worldObjects.push_back(newObj);
}
Дестрой таким:
void RemoveObject(worldObject newObj)
{
auto it = std::find_if(worldObjects.begin(), worldObjects.end(), [&](GameObjPtr in) { return (in==newObj); });
worldObjects.erase(it);
}
Успешно напихав туда все новосозданные объекты
Приложение валится при итерации внутри world
for (auto it : worldObjects)
{
it->Update(this); // <- ТУТ с ошибкой "Exception thrown: read access violation. it was 0xFFFFFFFFFFFFFFFF."
}
Посему вопрос, насколько вообще разумно использовать std::vector для таких целей(динамический массив указателей)? Что лучше подойдет для таких целей? И чому происходит подобное?
Пикрандом
Ухбля как форматирование то распидорасило
>насколько вообще разумно использовать std::vector для таких целей(динамический массив указателей)?
Других динамических массивов не завезли. Правда, если тебе нужно именно постоянно добавлять-удалять элементы и похуй на доступ по индексу можешь попробовать std::list. Хотя, если в твоём векторе мало элементов — не надо.
> И чому происходит подобное?
Потому что ты где-то в it->Update() удалил объект и распидорасил итератор по которому шёл, из-за каждой операции вставки/удаления массив полностью переаллоцируется в другом месте и ты пинаешь труп. Гугли iterator invalidation.
Reinterpret_cast в сочетании с виртуальными таблицами может давать очень весёлый результат. Вообще я его только с тривиальными типами использую.
мимопроходил-кун
U N D E F I N E D B E H A V I O R
Что подразумевают под знанием/опытом работы с бустом? Там ведь дохуя библиотек, если я работал с hana или asio, можно писать есть опыт использования буста?
Я очень долго думал на эту тему, пришел к выводу что это:
1. Ты можешь собрать и прилинковать буст к твоему проекту
2. Ты не боишься читать документацию с этими адовыми шаблонами
3. Ты хоть примерно знаешь список библиотек в бусте и зачем они нужны.
Как настроить этот ебучий Qt creator? Какого хуя, когда я создаю консольное приложение с++ и собственно ввожу код, мне ошибками подсвечивается почти каждая строка? Мб я криворукий и что-то не поставил? Мб стоит накатить Eclipse?
>Ты можешь собрать и прилинковать буст к твоему проекту
Хедер-онли хану то. Ну а так наверное так и есть, странно что компании не указывают какие конкретно либы из буста они используют, один раз только видел что нужен опыт с асио, остальным будто похуй. С Qt кстати аналогичная ситуация, может они там эмбед на кьюбасе ебошат, чем им мои знания виджетов помогут я не знаю.
Использовать Qt ты можешь вообще в любой иде, просто создай в креаторе цмейк проект и открывай хоть студией, хоть цлионом, хоть эклипсом.
>1. Ты можешь собрать и прилинковать буст к твоему проекту
find_package(Boost REQUIRED)
include_derictories(${Boost_INCLUDE_DIR})
target_link_libraries(huitaname ${Boost_LIBRARIES})
Или надо как мужыг с зовода, руками в швиндовый прожект вижуал говностудии каждый путь добавить?
>Хана
>> Продакшен
А что не так с ханой? Выглядит интересно, гетерогенные контейнеры, компайл-тайм алгоритмы, одни профиты же.
Хана это круто с академической точки зрения, и я бы с удовольствием посмотрел, какие проблемы в проде ей решают. Не более того.
накати mingw тулчейн из инсталлера кутипараши, и используй его
Назови хоть 1 IDE не поддерживающую cmake, додик блядь.
И как такую задачу решить? Перебором только?
>Или надо как мужыг с зовода, руками в швиндовый прожект вижуал говностудии каждый путь добавить?
Для домашних поделок есть vcpkg (nuget с крестами не очень дружит), а в ентерпрайзе 100500 версий прописывается через props файлы
Дополню сам себя
Сам бы хотел vcpkg и в проде использовать, нотам пока как то непросто сделать несколько версий одной либы и хз как это всё не только на рабочей станции держать но и на билд сервере.
Доклад же есть с CPP Russia про вцпкг
Первый, в c++11, это простой пул тредов, типа на 4 ядра положить вычисление по 250 элементов. Второй - использовать openmp, там параллельнуть for. Третий, маст хев на мой взгляд, c++17 и for_each с execution_policy, но 17 кресты есть не на всех специфических компиляторах.
Что скажешь, анон, какой подход лучше?
Это clang форматтер или типа того парсит твое говно на лету, где-то в настройках среды настраивается
>чисел умножить на скаляр, или, хуй знает, любую другую функцию сделать, есть несколько вариантов решения.
Для обучения реализуй всё руками, в проде если есть возможность используй стандартные средства а не костыли.
Кстати интересная хуйня, что даже на 16 ядрях ускорение будет где-то в 4 раза, а не в 16, связано это с кэшами ядер, сеньор-помидор вообще говорил что вообще ускорения не должно быть
>й помидор
Я это сам тестил с разными флагами компиля и он охуевал с того что вообще какая-то оптимизация идёт
Вот https://pastebin.com/F6X8e6zH даже отрыл пример и еще раз затестил,
на 8 ядрах
>однопоток 390мс
>многопоток 83мс
на 3 ядрах ситуация аналогичная. Если кому интересно, вот как это обьяснил тот самый сеньор
Для умных
>Короче говоря весь вопрос в том, какое отношение сложности задачи в тактах ЦПУ и необходимого потока обмена с оперативной памятью
>Собственно в этом примере это между 3 и 4 на вашем железе на 64-битных машинных словах
>Если компилятор таки достанет SIMD-инструкции, будет точно не больше 2
Для дебилов
>Ну давай как метафору о том, что такое bottleneck - представь, что у тебя 8 работяг лопатами раскидывают асфальт на дороге, который им подвозят общим самосвалом
>Если 4 работяги достаточно проворны, остальным просто не остается асфальта
>Более того, есть достаточно неприятное правило о том, что этот bottleneck при адекватной реализации почти всегда в памяти, и ускоряться будет если либо большая сложность вычисления на одном элементе памяти (в том числе потому, что ЦПУ не справляется с заказом асфальта заранее)
(это касается только типовых 86-64)
На 1000 чисел у тебя оверхед от запуска тредов будет больше, чем полезная работа. Лучше SIMD использовать, благо сейчас и в GCC и в clang платформонезависимые векторы есть, а уж SSE на простых циклах из коробки должно идти.
По-твоему Qt только в QtCreator компилируется? Добавил инклюды, прилинковал библиотеки и готово
Еще moc и uic надо запустить. Вообще мне обычного мейка для небольших проектов с qt хватает.
Кто-нибудь из местных может рассказать, как работает scheduler/cron в windows/linux соответственно. Интересует минимальный принцип работы
Единственное мое предположение (при моем уровне знаний) состоит в том, что программа просто в цикле проверяет, не соответствует ли системное время запланированному и если оно соответствует, то выполняет задачу.
Но этого не может быть, потому что не может быть никогда, потому что тогда программа сжирала бы всё процессорное время холостым кручением в бесконечном цикле и мы нихуя не смогли бы сделать.
Тогда вопрос, как же это все-таки работает?
Схожий вопрос: как работает что-то вроде setTimeout() в JavaScript
Очень интересует именно как это реализовано, буду счастлив если кто-то подскажет.
Подскажите хороший способ проверки типа данных при считывании, желательно с наглядным примером.
я бы обернул в отдельный класс, который принимает лямбду в конструкторе, а отдельным методом содает std::thread, но возможно достаточно и указателей (толковых) на std::thread для твоей цели
Они же запускаются раз в минуту. Делаешь, если упрощенно, sleep(60000) и все.
Я пытаюсь считать вроде
ifstream fin;
float array[z][z]
fin.open("in.txt");
fin>>array[x][y];
Я знаю, что можно отследить мусор по значениям на манер -0 или -.002301, но думал, что можно как-то поизящнее это сделать просто определив тип содержимого.
Почему это в вашей шараге не проходят?
https://en.cppreference.com/w/cpp/string/basic_string/stol
Спасибо, зая!
Осторожнее с этой хуйней. Она от локали зависит, и будет брать разделитель дробной части из локали. То есть если в тексте "3.14", а в локали разделитель запятая, то будет ошибка конвертирования.
Да ёпт.
Смотри состояние fin после считывания. Если ок, то ты в во float считал корректное значение до разделителя, если нет - то мог что-то записать, но до разделителя осталось ещё что-то и в целом считывание не прошло.
В общем, есть код. При вводе '|' программа закрывается. Как сделать так, чтобы при вводе '|' (или другого символа) программа предлагала ввести значения c и у? И второй вопрос, как сравнить введённое значение с последним элементом вектора (после сортировки по возрастанию)?
Типы данных и всё такое уже менял - не работает. Перед return ставить else - тоже.
Пробовал:
if (x != '/')
while(cin >> x)
else
cin >> y;
cin >> z;
Но это тоже не работоспособно.
Где я обосрался?
Бьерн говорит, что Си не нужен даже в эмбеддеде. Всех шизанов ака сектантов ака линуксоблядей и прочих пидоров попрошу выйти из треда.
Тебе к тому же анону, который выше не может отличить строку от числа при считывании.
Так считываешь char в double, поток ввода помечается ошибкой и этот double пустой, ты пытаешься его писать в вектор.
Либо считывай в char и, если это число, перегоняй в double, либо на каждом шаге спрашивай, продолжать ли ввод, либо прерывай поток через ctrl-Z(или ctrl-C, от ОС зависит).
Да это хуйня, мне надо при вводе / остановить поток, а компилятор расценивает это как остановку работы программы
Конечно не нужно, для кофеварок Oak сделали еще в 1991 году.
А, так ты ж написал, что у тебя однократно будет выводиться только что введённый массив.
Хочешь много раз заполнять/выводить массив - пихай цикл ещё сверху.
Попробую.
Я пишу вот что: пользователь вводит массив чисел. Потом этот массив выводится в консоль. Затем юзер вводит два целых числа и программа проверяет больше они или меньше всех чисел, которые в массиве. Типа если больше, то выводится "число х больше всех ранее введённых чисел" и наоборот, если меньше.
Собственно второй вопрос вытекает из предыдущего абзаца: как сравнить вводимое число с v.end(), если я не знаю, каким по счёту будет конечное? С самым маленьким всё просто v[0]
>>21083
а вообще страуструп продолжает бормотать мантры которые он еще в "дизайне и эволюции с++" писал: а именно все завязано на статической системе типов, на возможности определять пользовательские системы типов, определять у них операторы..
на возможности задавать отношения между типами, те наследование
о том что связка конструктор-деструктор оказалось очень мощной, позволившей реализовать абстакции, заменяющие реалиацию gc или посчета ссылок в самом языке, вынести эти абстракции на уровень библиотек и исходного кода..
и, касетельно к тому видео, он говорит про то что абстрагирование в с++ "бесплатно", класс с реализованными невиртуальными членами-функциями ничем не отличается по производительности от того если ты бы реализовал структуру со свободными функциями, обрабатывающими эту структуру..
и, как всегда, он начал бормотать про то что реализация виртуальных функций сделала максимально производительной, что что если вы руками будете это делать (как это делают в си до сих пор), то будет так же по скорости.. опять же говорил что никто вас в языке не заставляет все члены-функции делать виртуальными, а только необходимые..
опять же бормотал про то что реализация обобщенного программирования в языке (в отличие от тех же явы или шарпа) тоже абсолютно бесплатна с точки зрения производительности..
>Zero-Overhead
>платишь только за то, что пользуешь
Замануха.
Формально-то принцип соблюдается, но зачастую весьма затруднительно сказать, что ты на самом деле используешь. А уж когда дело дойдет до расплаты, то торговаться никто не с тобой не станет - заплатишь ссполна, сколько конпелятор пожелает.
динамический полиморфизм - это использование виртуальных функций, а не наследование
статический полиморфизм - это когда ты используешь шаблонные функции (в которых происходит вывод аргументов шаблона), а не когда ты определяешь шаблонный класс
динамический полиморфизм - это использование виртуальных функций, а не наследование
статический полиморфизм - это когда ты используешь шаблонные функции (в которых происходит вывод аргументов шаблона), а не когда ты определяешь шаблонный класс
>что ты на самом деле используешь
ты всегда сможешь увидеть результат кодогенерации - препроцессированный код, код после раскрытия шаблонов, ассемблерный листинг объектного модуля, соответствующими средставами
>ты всегда можешь написать бенчмарк в джаве, померить футпринт или увидеть ir код соответствующими средствами
asm("nop;") работает, но for (int i=100000;i>0;i--) asm("nop;") даёт не тот же самый результат (и другую задержку), что и for (int i=50000;i>0;i--) asm("nop;nop;"), а мне это выполнение цикла вовсе не нужно.
Я конечно могу забить, оставив 64 последовательных нопа в асм-цикле, но может быть есть более красивая и выразительная конструкция?
Если у тебя платформа линукс, то там есть есть функция nanosleep.
Оно вроде как выключает поток и передаёт нить выполнения другим, а на виндоусе это подходит только если интервал в несколько миллисекунд. Я же не просто так бесконечный цикл прикручиваю.
ну окей, если у тебя известно количество нопов - можешь ебануть какую-нить адову кодогенерацию миллиарда нопов через BOOST_PP_REPEAT. Но бля
Ну ты же проходишься по массиву для его вывода. Пройдись точно так же для введенных x, y.
И да, cin >> x, x != '/' это не то же самое, что cin >> x && x != '/'.
>>Короче говоря весь вопрос в том, какое отношение сложности задачи в тактах ЦПУ и необходимого потока обмена с оперативной памятью
Другими словами, если слишком быстро обрабатывать данные, то твоя задача станет упрётся в пропускную способность памяти, а не скорость процессора. Это... логично, можешь даже сам посчитать. Взять какой-нибудь IACA, посмотреть сколько тактов уходит на одну итерацию и сколько за одну итерацию ты обрабатываешь данных, посмотреть на свою память и в конце концов посчитать теоретический максимум.
Но когда у тебя обработка относительно весомая и ты именно cpu-bound, вот тут треды-то и нужны будут. Просто твой комментарий с "связано это с кэшами ядер" вызвал у меня некоторые сомнения.
Алсо, создание/уничтожение тредов тяжёлая операция, лучше считай время внутри функции.
> но зачастую весьма затруднительно сказать, что ты на самом деле используешь
Лол, если ты ньюфаг вкатывальщик, то да.
Спасибо, что разъяснил и так понятные мне вещи, но вопрос был совершенно иной. Читай в следующий раз глазами, а не жопой.
>Просто твой комментарий с "связано это с кэшами ядер" вызвал у меня некоторые сомнения.
Да я нуфаг, пытался кратко передать смысл без глубокого понимания темы, виноват.
Да нет, это ты хуй пойми чем читаешь, тебе анон все правильно ответил.
Если бы ты ещё вникал и понимал, что есть шаблонный класс, то не было бы у тебя этого вопроса.
Ну, например:
class Road{Car r;};
class Car{Road r;};
int main(){
Road road; Car car;
road.r=car; car.r=road;
}
Верно-ли что только изменением кода классов эту программу пофиксить не получится?
Вечно забываю что сраный движок любит жрать \* (звездочки)
Ну, надеюсь по контексту понятно где они должны быть.
Почитай про forward declaration.
Но вообще такие циклические ссылки обычно до добра не доводят, так что будь аккуратнее с ними.
Поэтому придумали weak_ptr
Алсо, для всяких дизайнов и музычки софта хватает, ты просто не искал нихуя. Ну и да, в крайних случаях вайн вам поможет.
БЕГИТЕ С МЕЛКОМЯГКОЙ ПОМОЙКИ!!!
я прост сам начал недавно сетями заниматься, как бы вам сказать, плохие вещи реально есть, их много. Пиздец с безопасностью, ГЛОБАЛЕН
Очередной шизик за струей мочи в лицо подьехал
Я ночью уставший писал. Для жопочтецов еще раз повторяю вопрос:
> Строго, либо статический, либо динамический полиморфизм?
Нет, пиши как хочешь. Просто в этом обычно мало смысла, ведь каждый инстанс шаблона будет иметь свою иерархию.
да шел бы ты нахуй умник
> для всяких дизайнов и музычки софта хватает
Нету нихуя. Для данного сегмента задач линь не пригоден.
И все-же это свойство языка, а не заговор ньюфагов-вкатывальщиков.
Нет, ты выебываешься и не хочешь погуглить немного.
Тебе анон верно ответил, для каждого инстанса твоего шаблонного класса сгенерится свой обычный плюсовый код как для обычного класса. А кто мешает тебе в обычном классе использовать динамический полиморфизм?
Но зачем - это другой вопрос.
Это крестотред, дурачок, у нас уже внучки есть.
Ты хочешь абстрактный проект в вакууме чтобы получить картину реальной разработки? Ебанутый?
В любом проекте будут свои костыли или ебанутая архитектура. Только не смей залазить в какие-нибудь гигантские проекты или проекты от крупных компанией - там полный пиздец, не найдёшь того, что ищешь.
> Ты хочешь абстрактный проект
> ссылки на реальные опенсурс проекты
> В любом проекте будут свои костыли или ебанутая архитектура
> где все сделано правильно по гайдлайнам
Я спросил про реальные проекты с правильной архитектурой еще скажи что таких нет, а ты мне про велосипеды пишешь.
Блять шесть лет, ебаных шесть лет потратил на эти кресты и знаете что. За это время не смогли высрать ни одной вменяемой IDE, которая бы не лагала и предоставляла приемлимый автокомплит и реафакторинг, просто нет.
Блять, за что мне такое наказание.
Ну и VS + ReSharper.
Ну, может ты на каком-то старье работаешь, я таких проблем не испытывал с поделиями от JetBrains. И вообще, они на Жабе написаны, так что все логично.
Вот что реально хуево написано, это VScode, типа простой и нетребовательный, а в реале написан через жопу, и на Линуксе при подсоединении через ssh невозможно работать, все лагает. Ненавижу таких криворуких уебанов.
>Вот что реально хуево написано, это VScode, типа простой и нетребовательный, а в реале написан через жопу, и на Линуксе при подсоединении через ssh невозможно работать, все лагает. Ненавижу таких криворуких уебанов.
Вот тут согласен, а еще у меня под линупсом от него глаза вытекают, хуй знает почему.
Умел еще до твоего рождения, пихаешь хоть весь Adobe Font Folio в ~/.fonts и настраиваешь свой Consolas с Segoe UI в PyCharm, и суешь Arno Pro и Helvetica Neue в XeLaTeX, и урчишь довольно.
В чем состоит пердолинг, дебилушка?
Раньше тебе может и нужно было поебаться с настройкой антиалиазинга и прочего ануслизионга, сейчас ты тупо кидаешь шрифты в папку, даже устанавливать не надо, как в мастдае.
Или ты хочешь, чтобы тебе коммерческие шрифты вместе в бесплатной бубунтой поставлялись? В тот ли попен-сорс ты зашел, петушок?
я не вижу смысла тратить время на это красноглазое говно, сорян. У меня из коробки все работает, мне не надо выебываться КАКОЙ Я КРУТОЙ ЛУНИКСОИД ПРОЕБЫВАЮ ВРЕМЯ НА ХУЙНЮ.
К чему ты это написал вообще? Всем похуй на тебя и на твой быдлоэкспириенс. Речь шла о технологии.
хорошо
>Луникс не умеет в шрифты
в линуксе ты можешь выставить dpi в системе, равным ppi твоего монитора
после этого взять растровый шрифт, это будет terminus, и использовать его в редакторах
это позволит буквам гореть пиксель в пиксель
Но луникс всё равно не умеет в шрифты
например, реализация стандартной библиотеки плюсов в проекте clang:
https://github.com/llvm/llvm-project/tree/master/libcxx
особенно то что появилось в 17м стандарте, а именно реализацию типа string_view, реализацию std::filesystem, типов any, variant и optional..
если сидишь на компиляторе майрософт, то можешь глянуть и их реализацию стандартной библиотеки, но она постарше, с другой стороны, код для новых возможностей библиотеки так же свеженаписанный..
class MyClass
{
public:
static constexpr int def = -1;
MyClass()
: m_val(def) {}
private:
m_val;
};
[/code]
Так можно делать? Порядок инициализации не нарушен? А если перенести m_val в самый вверх?
Понятно для чего так сделано - но я использую деструктор немного не по назначению. Элементы - структуры, чтобы избежать вызова деструкторов я в структуру добавил соответствующий флаг.
Вектор при перемещении элементов может использовать конструктор копирования/перемещения и два соответствующих оператора присваивания. Как правильно сделать, чтобы он скопировал все поля структуры, но при этом ещё и поставил соответствующий флаг?
Я оставил 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.
Нет конечно. Спасибо, это помогло - теперь верно и предсказуемо работает как мой идеалогически неверный код, так и тестовый пример.
Интересно, каким образом я должен был догадаться про noexcept. Избегаю исключений во всех случаях, больная концепция. Должно быть наоборот - по умолчанию вообще всё noexcept, и только в случае если что-то кидает исключения - только тогда на него надо явно прописать "yesexcept".
это современные гайдлайны, что мув ктор\оператор и деструктор должны быть ноэксепт. Решарпер на это ругается, например
Если ты сравниваешь с c-style двумерным массивами - то они оба хранятся в одном куске памяти.
А если с vector<vector<type>> - то у него каждая строка хранится в своем куске памяти, из-за чего доступ будет медленнее при загрузке в кэш процессора, для понимания почитай подробнее, хоть того же Таненбаума.
А так, если у тебя не невероятные объемы данных и делаешь для себя - то можешь вектор векторов использовать, будет удобнее.
Медленнее в том случае, когда будешь последовательно проходиться по всем элементам и менять строку.
Но вряд ли кто-то из нас это заметит. Вот нвидия-кун мб и должен о таком париться, думаю.
>Должно быть наоборот
Ньюфага забыли спросить, лол.
То-то в жабе в каждой функции нужно определять ее throws.
Машинлёрнинг, десктоп, мультимедиа ещё.
Ебаный рот этатваказино блядь.
В былые времена вся суть поместилась бы на полторы странички салфетки.
Нет блядь, хотим жрать говно, хотим 4к видио на полтора часа.
Уёбки блядь.
А хулi ты ну тот "ты", который постил видос хотел, когда постил, а?
Впечатлил тебя видос, ну напиши, блядь, хотя бы чем, почему.
Осилил весь видос? - запили краткий конспект.
А так, тупо видосиками перекидываться - этож шитпостинг, нахуй, все равно что сисечки-писечки сюда из вконтактика репостить.
Кто, нахуй блядь, в здравом уме, полтора часа хуй пойми заведомо чего будет смотреть вообще?
Тут есть такой момент, что зумеры только видосы умеют воспринимать нынче.
Реально, студенты тупо смотрят видосы по любой теме, текст читать неспособны.
че?
александреску умный мужик, но тут он какой то трешовый талк запилил
нафиг надо хардкордить стандартный std::sort? внутри у него все нормально - быстрая сортировка (с оптимизацией худшего случая, между прочим), плюс щас в стандарте есть stable_sort, partitional_sort, sort_heap для частных случаев
насколько я понял, он пытается минимизировать количество сравнений и свопов, и именно такие специализированные сортировки будут работать быстрее std::sort для "тяжелых" объектов
но нахуя? гораздо проще держать в контейнере не объекты, а указатели на них (умные указатели), и все, на оптимизацию количества свопов пофиг
да и не стоит забывать про механику перемещения, щас внутри стандартных алгоритмов объекты муваются (при наличии такой возможности) а не копируются
Читаешь книгу, прикладываешь 70% усилий. Ебешься с закладками, заметками, с бездушной простыней текста.
@
Смотришь няшный видосик на 2x промотке, наслаждаешься эмоциями докладчика, вопросы аудитории проясняют непонятные моменты. Уровень усилий - 30% для тех же знаний
@
Проклятые зумеры не хотят страдать как диды страдали без пеницилина
Двачую, вообще не могу читать книги, использую их как справочники. Вон там с цппкона видосиков на целый год хватит, а потом еще зальют. Кроме того, ученые доказали, что на слух информация воспринимается лучше, чем зрительно.
Насколько реально написать компайл тайм компилятор? Из чего-то си подобного в апи для уже существующего генератора ассемблера для виртуальной машины.
>Читаешь книгу, прикладываешь 70% усилий. Ебешься с закладками, заметками, с бездушной простыней текста.Gt
>Читаешь книгу, прикладываешь 70% усилий. Ебешься с закладками, заметками, с бездушной простыней текста.
Два слова: порог вхождения. Чтение - это навык, и умеющий читать, прикладывая 5% усилий, затратит минут пять на чтение блогпоста, в котором будет то же самое, что в полуторачасовом докладе.
Основной плюс чтения - оно позволяет моментально скипать уже тебе известное, введения, заключения, быстро переходить к сути. Чем менее ты тупой, тем больше ты получаешь профитов от чтения.
Большинство людей тупые. Тупые деды не страдали, они ходили в университет и слушали там лекции.
>>22374
> Кроме того, ученые доказали, что на слух информация воспринимается лучше, чем зрительно.
Теперь все программисты переходят на программирование на слух.
и два чую, и нет
чисто ознакомиться видос лучше.
вникать уже легче читая.
тут недавно скидывали плейлист с лекциями.
Чувак половину времени ебланит и отвечает на вопросы студентиков.
Zero-cost abstractions
Scope-based resource lifetimes
Generics retain overloading
Rust feature highlights: all of the above but with a usable type system.
Ваши оправдания?
> Основной плюс чтения - оно позволяет моментально скипать уже тебе известное, введения, заключения, быстро переходить к сути. Чем менее ты тупой, тем больше ты получаешь профитов от чтения.
Если мы говорим про значительный объем материала, то по книге учиться значительно хуже, потому что книг, которые хорошо сделаны, как учебный материал, можно по пальцам пересчитать. Именно по этой причине нужны универы - большинство авторов книг банально не умеют писать интересно.
Про шортриды тоже самое - если написано скучно, то ебал я в рот читать даже просты вещи. Так недолго и выгореть, в C++ и так приятного мало, а если меня говночтиво от александреску будет дизморалить своей унылостью, то я точно писать код перестану
Ну не тролль, пожалуйста. Хотелось бы освоить плюсы, так как они охуенны, но скилла просто не хватает
> Теперь все программисты переходят на программирование на слух.
Ты жопу с пальцем перепутал. И да, на видосиках так-то и зрительный контакт имеется. Да и скипать видосики быстрее, чем переворачивать страницы, лазить туда-сюда в оглавление итд.
Какая ОС? Если винда, то гугли MSDN ReadProcessMemory. Никакая ОСь не позволит тебе делать что-либо бесследно. Дальше сам.
если тебе нравится поделие ебнутых мозилла-фанатиков (которые убивают щас второй свой браузер), то, пожалуйста, изучаи и пиши на раст, без проблем
но зачем срать в крестотред?
это раздражает
Вложенный список, это когда внутри списка есть еще списки.
молю вас объясните мне что такое "совпадения(вхождения" и "Целевой вложенный список" вернее что такое вложенный я знаю, а целевой это как?
из кернел драйвера
void f2(Pizda &&p){ f1(std::move(p)); }
Вопрос: почему в f2 при вызове f1 нужно вызвать std::move, ведь p и так уже rvalue-ссылка?
Я так понял, что принимаешь ты rvalue, но внутри это уже lvalue, потому и нужно делать std::move.
Думаю, что без этого бы ты не смог использовать дважды этот аргумент - он же неявно мувнется и уже будет невалидным.
rvalue references - это lvalue
Внутри f2 p является lvalue
Поменяй int на double
4 и 4.0 имеет разные типы, int и double соответсвенно
Если хочешь использовать именно с плавающей точкой, то пиши это явно
Блин. Глупая ошибка. Спасибо
Для начала, приучи себя не игнорировать ворнинги компилятора.
Ох уж эти шиндовые бидолаги. Вам до сих пор юникода не завезли чтоли?
А как же новый кодек для av1?
На 1 скрине sleep не работает, все числа выводятся мгновенно при достижении конца цикла. На втором скрине всё работает, надпись выводит каждую 1 секунду. Среда Qt Creator
Прошу объяснить почему всё так, желательно адекватными терминами, или терминами которые я смогу загуглить. Большое спасибо.
Code 1
#include <iostream>
#include <stdio.h>
#include <unistd.h>
using namespace std;
int main()
{
int number;
cin >> number;
for (number;number<50;number++)
{
cout << number << " ";
sleep(1);
}
}
Code 2
#include <iostream>
#include <stdio.h>
#include <unistd.h>
using namespace std;
int main()
{
for (int i;i<50;i++)
{
cout << "Hello" << endl;
sleep(1);
}
}
На 1 скрине sleep не работает, все числа выводятся мгновенно при достижении конца цикла. На втором скрине всё работает, надпись выводит каждую 1 секунду. Среда Qt Creator
Прошу объяснить почему всё так, желательно адекватными терминами, или терминами которые я смогу загуглить. Большое спасибо.
Code 1
#include <iostream>
#include <stdio.h>
#include <unistd.h>
using namespace std;
int main()
{
int number;
cin >> number;
for (number;number<50;number++)
{
cout << number << " ";
sleep(1);
}
}
Code 2
#include <iostream>
#include <stdio.h>
#include <unistd.h>
using namespace std;
int main()
{
for (int i;i<50;i++)
{
cout << "Hello" << endl;
sleep(1);
}
}
всё
Скорее всего дело в том, что cout использует буфер для вывода, можешь попробовать в первом варианте std::cout << data << std::flush сделать, хотя я хуй знает
А, выше уже ответили
>Прошу объяснить почему всё так, желательно адекватными терминами, или терминами которые я смогу загуглить.
1. Вывод текста буферизируется иногда. Предположим, ты записываешь данные в файл - вместо того, чтобы записывать по одному байту насилуя жёсткий диск - он сохраняет некоторую очередь для записи, и потом пишет всё сразу одной пачкой. Вышеуказанный flush по идее должен принудительно эту очередь отсылать в консоль для вывода.
2. Я не уверен насчёт sleep-а с маленькой буквы, но Sleep(1), это подождать 1 миллисекунду (в действительности там 3-7, что зависит от операционной системы и других вещей, но всё-равно мало). Ты можешь на глаз отличить 50 мс (это 1/20 секунды) от мгновенного вывода? Я не могу.
Кстати точное количество переменных неизвестно, Мб их вектором посчитать и вывести пользователю, чтобы он сам вводил границу цикла рассчёта?
потому что reference collapse
а все отсосал
Бьерн говорит, что нужно знать минимум 5 языков программирования, иначе ты не можешь называть себя даже макакой.
Интересно, сколько япов знает нвидия-кун?
Sleep используется в винде и работает от миллисекунд. sleep в библиотеке unistd работает от секунд
да не пизди, небось алгоритм Чудновского в голове крутишь и по цифре выговариваешь в беспалевном темпе
Знаю - только С++.
Платили деньги за: Повершелл, Питон, ПХП (зашкварился в начале вкатывания), C#.
Ебучий конец, отдельно его понмнишь, но когда доходишь от начала, он куда то съебывается постоянно
Как так блять получается что сппкон основной в тот же вечер выкладывает, а тут за ким то хуем полгода ждать
Не буди в нем синдром вахтера
Задача перебрать и сложить все цифры 5-значного числа без перевода числа в строковый формат. Например, число 79813.
Делаю следующим образом: делю число на 10 (получаю 7981.3).
Далее вычитаю это число само из себя, переведенное в int:
digit=result-int(result)
Так вот, в данном конкретном примере программа выдает не 3, а 2. Потому что какого-то хуя результат приведенного выше выражения - 0.299805.
Откуда берется эта погрешность и как от нее избавляться?
Ах да, естественно, я все выражение с вычитанием умножаю на 10.
Спасибо, буду изучать.
В своей проге (на codeabbey задачки решаю) просто добавил 0.1 к изначальному значению и задачу выполнил, но сомневаюсь, что это правильное решение, лол.
Какой-то сложный у тебя пример. Вот проще. Ошибка чисел с плавающей запятой про которую просто везде написано, в любой книжке и в любой статье с использованием дробных чисел.
>Откуда берется эта погрешность
Представь, что у тебя есть только обычные десятичные дроби, а тебе нужно записать 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
operator% вам о чем-нибудь говорит, молодой человек?
Добавь новый счётчик и выкинь вектор
Есть OpenBlocks+miniGW, нужно загрузить текстуру в формате png.
Подключаю libpng в виде:
#include "png.h"
Но при компиляции выдает ошибки в виде:
undefined reference to `png_sig_cmp'
Как заставить его видеть библиотеку?
Не понял.
Билеты там за бабло вообще-то, поэтому просят не шарить.
// future from an async()
std::future<int> f2 = std::async(std::launch::async, []{ return 8; });
Типа если помимо return 8; там что-то насоздано, то оно будет живо, пока f2 жив.
Kakov pizdec. uuuu suuuuka я из-за этого ловлю охуительные постэффекты
Я думал, что то, что в скоупе, остаётся в скоупе, вот, что я думал.
Это копия, сохраненная 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.