Это копия, сохраненная 10 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2410386 (OP)
Просто говорю
Стл это функциональщина та ещё
>>2451705 →
>зачем-то вынесли стандартные классовые методы в отдельные функции
Ооп-дурачок.
Зачем ты его обзываешь, ведь все правильно пишет. Алгоритмы должны быть интегрированы в классы, либо как шарпе, нужно добавить возможность расширения классов из вне.
Нахуй вы на 1500 перекатили, чмошники? До 2500 хотя бы досидели.
Предлагаешь например дублировать алгоритм сортировки для каждого контейнера?
ты че пёс
Не слышал о таких.
Стоит переходить на жабу
Работы для джуна на крестах нет. На расте тем более. Учи шарп, за ним будущее. Чудесный язык.
> Он же наверняка в конструкторе выделяет память под данные динамически.
Нет. На этом все свои рассуждения можешь нахуй отправлять.
> И зачем так грубо?
А как ещё с дегенератами, неспособными освоить БАЗУ перед тем как задавать тупые вопросы?
>Нет.
>>452148
>дегенератами, неспособными освоить БАЗУ
https://en.cppreference.com/w/cpp/string/basic_string/basic_string
Крестовик срет под себя. Реально.
Я просто не понимаю, как ещё это может работать. Варианта всего три: статический массив с фиксированной длиной, VLA-массив в стеке и динамический массив. Массив с фиксированной длиной точно не вариант, а VLA не позволит произвольно менять длину массива. Ну и в чём я не прав?
VLA вроде нет в стандарте без расширений компилятора
Чтоб ты свой мог написать. А написать ты можешь любую хуйню, она от этого не станет стандартным поведением языка.
А по умолчанию там что тогда, лол
¯\_(ツ)_/¯
Ты говоришь, что память не выделяется динамически. Ок, вот выделил ты в стеке массив размера N. А потом попытался считать из потока строку длиной 2*N. Как будешь увеличивать массив?
>Вот создал я объект класса string.
Там short string optimization, короткие хранятся на стеке, длинные в куче. Соответственно где хранятся данные зависит от длинны строки конструктора.
Толсто.
Ну, например, память забита и фрагментирована так, что куска памяти длиннее мегабайта нет. А я пытаюсь прочитать текст из файла размером 1.5 мегабайта.
Если это возможная для тебя ситуация, то проверяй.
https://en.cppreference.com/w/cpp/memory/allocator/allocate
Если у тебя строка из коробки, то аллокатор среды выполнения может кидать bad_alloc и его надо ловить. Если ты написал свой аллокатор и подсунул его в конструктор строки, то можешь разруливать всё в аллокаторе без кидания исключений наружу.
Есть книги и статьи про изменения в новых стандартах.
Да в принципе никак. Увидел какую-то новую конструкцию - почитал, потыкал в неё. Язык невозможно выучить ни брутфорсом ни академически. Каждый год вываливают очередную спорную фишкуи потом её в трёх следующих стандартах доделывают, где-то расслабляют, где-то делают потуже.
Не платишь за то, что не используешь, всё стандартно.
Пиздец, а как использовать этот ворох функционала? Как выбирать нужные инструменты из такого количества говна?
Qml - миф, его не существует.
>Как выбирать нужные инструменты из такого количества говна?
google: как сделать хуету
google: хуета работает не правильно
google: как сделать хуету без ебалы
google: хуета примеры
2ch: сегодня делал хуету через ебалу убил 2 часа нихуя не работает сделал через пиздорвань с первого же примера гугла сразу заработало. ебалобляди оправдывайтесь.
Пиздец, а есть гайд, чтобы макакой с гуглом не стать? У меня, конечно, есть пару идей на эту тему, но их озвучивать пока что не стану.
>макакой с гуглом
Ты в любом случае ей будешь, только макакой с книгой/наставником/курсами/доками итд. Ты никогда не сможешь знать все с чем работаешь, кроме случаев когда ты 20 лет пишешь микропенисы на жабе и сидишь на 1 работе.
Я же тебе ответил, что есть книги, петух
Плюс статьи на сайтах modernescpp, fluentcpp и т. п.
Настроение плохое
> Почему по qml почти нет инфы в интернете?
По нему есть исчерпывающая дока с дохулионом примеров, как и для прочего куте. Какая инфа тебе ещё нужна блеать, ты эту читать пробовал?
Получается, кресты тот самый язык из пророчества, что объединит все языки и платформы.
Да.
Зачем будущее, когда уже в настоящем, стоило создать тред, как в нем сразу 60 порванных срак макак и ничего больше. Как видно, С++ и так доминирует на недостижимой высоте.
Толсто.
Поддержка компиляции картинок в C++60, к C++75 можно уже компилировать экзешники в другие экзешники.
>C++75 можно уже компилировать экзешники в другие экзешники.
Я б так развлекался. Находил бы циклы и смотрел бы заворожённо на эту эволюцию хтонического пиздеца.
Все равно пиздить!
шизоид, какое отношение паттерны программирования имеют к тому, что сюжетка и геймплей в играх нынче говно?
Прямое. ООП это корпорастия, а корпорастия не может в творчество, в искусство по определению, производя только говнище вместо игр.
std::string s = "Hello world"
и
std::string s = "Hello world"s
?
24к где-то
На самом деле во втором тоже один конструктор из-за copy elision.
Смысла - ну только если для авто
auto s = "Hello World"s;
> В чём разница между
> std::string s = "Hello world"
> std::string s = "Hello world"s
Тут разницы нет особо, а вот между "Hello\0world" и "Hello\0world"s разница будет ощутимая.
Если только ты хочешь включить в строку нулевой символ. "123\0456"s сделает тебе строку длинной 8 байт.
Ну одна строчечка то ессно не соберется
using namespace std::string_literals;
>а вот между "Hello\0world" и "Hello\0world"s разница будет ощутимая.
Это интересно. Надо попробовать.
Двач - познавательный.
Вернее 7
У тебя написано не \0 а \07
Nyet.
Python language reference: ~130 pages,
C language reference: ~500 pages,
Java language ~650 pages,
C++14 language reference: ~1400 pages.
А при чем тут референс? Они заявляют что он неполный - нет описания nightly фич, которые находятся в статусе проработки.
Базовые фичи-то они не меняют, а про них и референс. Не про стдлибу.
language reference (справочник языка)
Это сколько примерно страниц занимает описание всех языковых конструкций (лексем?).
У Питона скорее всего спецификация побольше, а у плюсов поменьше, но 1000 страниц для последнего стандарта вполне реально.
Это типо справочника для вкатуна с другого языка программирования. Он эти конструкции по смыслу уже знает, но выглядеть в разных языках программирования они могут по-разному.
498x498, 0:01
Поясните где лежит указатель на динамически выделенную память для объекта Стринг?
Стринг 22 символа серет в стек, а потом резко переобувается и начинает срать в кучу, где лежит указатель на массив чаров который находится в куче?
стринг это 2 числа и указатель. тот самый, который указывает на строковые данные в куче
Вычислить "где конкретно" не так просто как кажется из-за правил POD
Вот норм статьи на русском.
Обзор о размещении в памяти: http://scrutator.me/post/2014/01/29/objects_memory_layout_p1.aspx
И про конкретно строки: http://scrutator.me/post/2014/09/02/cpp_strings_basics.aspx
>Python language reference: ~130 pages,
>C++14 language reference: ~1400 pages.
Зачем единичку перед 400 приписал? Чтобы пожирнее вбросить?
uint64_t ptr = (uint64_t) *ptr2;
Есть одна тян строка x, так я вытаскиваю указатель на массив чаров этой строки из кучи, можно как-то это сделать в одну строчку без второго указателя?
Я просто пытаюсь выучить ебаные указатели.
Блядь, долгоносик звёзды пожрал, ну я думаю вам и так понятно.
>строка x, так я вытаскиваю указатель на массив чаров этой строки из кучи, можно как-то это сделать в одну строчку без второго указателя?
&x[0] должно работать
Удобная абстракция. При этом ты абсолютно на 100% понимешь что тебе сгенерирует компилятор. Чего нельзя сказать о шаблонах. Хотя шаблоны тоже неплохи. Главное применять всё это там, где это оптимально, и не применять там, где в этом нет смысла.
x[0] - ссылка на нулевой символ в строке (char&). Сравни &x и &x[0] - адреса будут разные.
>>Сравни &x и &x[0]
&x это адрес указателя на объект, а &x[0] это адрес объекта. Похоже ты ещё хуже меня знаешь указатели, лол.
Так падажжи ебана, тебе же нужен был указатель на массив чаров. Если x это char*, то че тебе надо-то? А если x это string, то я всё правильно сказал.
> пик 2
Вот же дегенераты, рассуждающие о языке, которого не знают. Схуяли в их больном мозгу должно получиться 10, если там инт копируется? Пользоваться массивами учат ещё в самом начале, а этот даунёнок про какую-то память пишет и не знает основ. А с оптимизациями вообще эти 3 строчки нахуй удалятся компилятором, потому что они нихуя не делают.
Так x2 же это ссылка, там всё правильно написано, если предположить, что оптимизации нет, а память действительно будет перевыделена.
> Так x2 же это ссылка
Да, ссылка на скопированный инт, чел. Ахуеть, да? vec{2} всегда возвращает инт, а не ссылку на него. С кем я вообще в одном треде сижу?
>vec[2] всегда возвращает инт
А тут ты обосрался
https://cplusplus.com/reference/vector/vector/operator%5b%5d/
> ссылка на скопированный инт
Более того, ссылка на копию может получится, только если это ссылка на const. С кем я в одном треде сижу?
Вот draft С++14 ISO/IEC на 1368 страниц. Думаешь там 70% это графомания? Добавь ещё к этой портянке c++17 и 20.
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
Чтобы было видно "приколы/странности/неочевидности" языка. А не "как называется функция ассоциированная с объектом" и прочие тупости по стандарту языка.
Типо такого https://cpp.godbolt.org/z/4oW9PcGfx
> Схуяли в их больном мозгу должно получиться 10
С того что напиши гребаную программу и запусти ее.
Попробуй не использовать недокомпиляторы.
У тебя x это string*, а я подразумевал string. Естественно, результат другой. Посмотри мой код с пастебина, и все станет понятно.
Так я не об этом. Ты не понял, у тебя тип другой, поэтому и операторы работают по-другому. Для string оператор [ ] переопределен, и возвращает ссылку на символ (char&). Дальше ты берешь его адрес оператором & - и это указатель на саму си-строку в памяти. А то же самое выражение, примененное к указателю на строку (string*), не делает ничего.
P.S.: не "всё улетает в кучу", а только сами данные. Объект string, если не создавать его через new, будет в стеке всё время.
>Вот draft С++14 ISO/IEC на 1368 страниц.
Ты питон language reference вместе с library reference считал?
Что не работает-то? У тебя строка длинная, поэтому она в куче, а не внутри объекта. Это подтверждается тем, что &s и &s[0] совсем разные, на скрине же видно. Этот "кусок массива" на экране не имеет отношения к самой строке, это мусор внутри объекта string - можешь проверить сам. Может быть, всё это было бы понятнее, если бы ты выводил не char, а шестнадцатиричное представление байтов. Запусти этот код у себя и поэкспериментируй: https://pastebin.com/q2xaF0fW
>Что не работает-то?
Твой код не может вывести строку. В основном это не работает, ещё он не может найти её в куче, но это уже второстепенно.
Посмотри внимательно мои скрины выше: короткая строка - внутри объекта (видно по данным, выведенным на экран и по адресам), длинная строка - в куче, адрес опять же на экране. Но ты скорее всего троллишь тупостью.
>в куче, адрес опять же на экране
напиши уже new чтобы полностью обосраться, хотя у тебя и так ничего не работает, куда ещё дальше срать.
>Зачем так жить, если языковые конструкции могут быть непонятны без гугления даже тем, кто на этом языке десяток лет пишет
Потому что Плюсы - язык-выгребная яма, миллиарды котылей и тонны бесполезного функционала, который нужен лишь 0.00001% людей. Выше по треду даже шутили, что программа на любом языке является синтаксически верной программой на C++50. Но даже такому говноязыку не могут райти замену и приходится его использовать. Вся гадежда на Раст, но шансов мало.
Первая идея хранить буффер, но я не уверен, что если я передам этот буфер потом в async read, то данные не сотрутся.
>>453587
Как же вы заебали в говне копаться. Говорю без особой злости, просто заебали.
Я вот отношусь к С++ как к Си с классами.
Ну и stl помаленьку пользую, когда надо что-то быстро захучить, а оптимизировать под задачу лениво или не нужно.
Ну зачем спорит, если всё давно разжёвано - https://stackoverflow.com/questions/29859796/c-auto-vs-auto
>>string ps = new string("");
>>string& s = ps;
Какой же ты дебил, просто пиздец, ты чё реально только в стеке можешь найти массив? Попробуй что-то попроще, с++ это явно не для тебя.
Сказала чмоня которая не может повторить то что я делаю в две строчки, лол. А я ещё надеялся что тут подскажут как сделать это в одну строчку.
>>453391
>uint64_t ptr2 = (uint64_t) x+2;
>uint64_t ptr = (uint64_t) *ptr2;
А это что за йоба?
> так я вытаскиваю указатель на массив чаров этой строки из кучи
Про c_str() слышал?
Пока только вы меня троллите тупостью, я им блядь про указатели , а они мне индексный оператор.
Ну раз стринг, то в таком случае так >>453923 делать нельзя. Во-первых, это нечитаемый кринж, а во-вторых, ты после разыменования указателя на string присваиваешь другому указателю не адрес, а данные, хранящиеся по этому адресу, преобразованные к типу указателя.
Запускать хоть свой код пробовал?
Ну учи, учи, хорошо учишь
User 123
А ха ха. У тебя Винда нелицензионная что-ли?
Или специальная учётная запись для двачей?
>хочется перед микрософтом штаны снимать.
>в системе дохуя левых системных процессов
>не удаляемая Кортана
>не удаляемый Заshitник Windows
>миллиарды телеметрии
>ряяяяя я написал user123 и меня тепеь не узнают
Лол
Все правильно. Не хочется самому снимать. Это унизительно.
Поэтому доверяем самое сокровенное космонавту.
А про меня Microsoft знает всё. Опасаюсь что даже больше, чем я сам. И что? Пущай уважают кодера старого программиста.
Купил ключ на ебае лет пять назад, рублей за 300 вроде. Раньше сидел на Windows 7 90 day trial, постоянно сбрасывая счётчик.
>>454006
А хули делать, Ну посидел я на Раче, чёт надоело гуглить Как правильно какать и настраивать этот велосипед под себя. Больше всего бесит что 99% софта под линукс написано на всяком говне, бог им дал божественный gcc, компилируйте сколько влезет, нет блядь хотим писать на всяком говне.
Там от платформы зависит, у тебя 64 бита? Вообще нужно писать size_t, ещё посмотри где лежит адрес, он может быть + 2 в других компиляторах.
Да хуй его знает, может быть, компилятор от МС какую-то свою магию применяет.
>>454059
>у тебя 64 бита?
Да.
Начнем с того, что, прочитав тред, я еще больше запутался и перестал понимать условие задачи. Нужно просто найти указатель на массив из char-ов или вытащить указатель на массив char-ов из string?
>c_str()
А здесь важно понимать, что этот метод возвращает. Из формулировки пикрила нихуя не понятно возвращает ли он указатель на массив в string или же возвращает указатель на НОВЫЙ массив идентичный изначальному.
Схожу поем и поебу байты в поисках ответа.
>Да хуй его знает, может быть, компилятор от МС какую-то свою магию применяет.
Я проверял на своей студии. Кидает эксепшн.
> А здесь важно понимать, что этот метод возвращает.
Возвращает const char*. Никто не будет заморачиваться и копировать массив ради указателя на константу. Ты же не думаешь, что компиляторы пишут долбаёбы?
Даже если твой охуенный метод работает что невозможно, и я уже объяснил, почему >>453948, то он может перестать работать при малейшем пуке со стороны разработчика компилятора.
Маня, я тебе скинул как это работает на Линукс и Шиндовс, Андроед скинуть?
Заставь onlinegdb, ну или любой другой онлайн компилятор, который мы все вместе итт сможем проверить, показать такой результат.
https://www.onlinegdb.com/PffgLySU3
Ну или хотя бы шебмом пруфани, а то скриншоты это как-то скучно, сам понимаешь
> Я хотел обернуть все в свой сокет, со своим буффером в который буду перемещать остатки с read until, а далее при чтении определенного количества байт высвобождать часть заполненного буфера, а остальное читать с сокета с помощью read.
Думаешь ты правильном направлении. Не со всем согласен, но в целом здравое зерно есть. Твоя проблема в том, что у тебя С++ головного мозга. Это такая болячка, когда ты используешь лишь те инструменты, которые знаешь. Внимание, вопрос: "Что тебе мешает забить на STL и реализовать буфер руками????"
И не ебать мозги себе и нам. Пойми, если С++ тебе что-то позволяет, то не обязательно это использовать.
>Андроед скинуть?
Змиялся до слёз.
Андроид типа не Линукс?
Тогда уж сравнил бы MSVC, gcc и Clang.
Гы гы. А мог бы ещё и потроллить Watcom C++ и Borland C++Builder
Нужно будет наследоваться от бустового буфера. Я это ни разу не делал. Боюсь, что там будут всякие хитрые проблемы которые я ебнусь реализовывать. Но спасибо, попробую
>Линупс смещение 0
>Андроед смещение 2
32/64 бит?
> Андроед смещение 2
Гы. А ты попробуй на девборде на ARMv7 с Debian на борту.
Тут не в ОС может быть дело, а в архитектуре.
Или у тебя Android на x86?
всё 64 бит.
У меня горит че то. Вроде очень простая задача, а целый день провозился, сука. И еще не решил. Так бы уже либу нужную дописал и сидел капчевал спокойно
> Никто не будет заморачиваться и копировать массив ради указателя на константу. Ты же не думаешь, что компиляторы пишут долбаёбы?
Ну вот смотри, что получается. Пока что выводов делать не буду, проверю еще одну теорию.
Я мощно оргазмирую от .cc и на полшестого от .cpp
cpp и hpp, всё остальное для поехавших шизоидов.
Как думаешь, почему Tor переписали на Раст, а не на Плюсы, учитывая, что он изначально написан на Си?
Да можно и в присядку дрочить, толку то. На си/спп можно сделать вообще все. Практика показыапнт чтотпо сути так оно и есть. Это база. Хочешь на чем то другом - попробуй, но смысла нету.
>На си/спп можно сделать вообще все.
Как и на многих других языках. Что тебе конкретно на расте мешает писать?
>рактика показыапнт чтотпо сути так оно и есть.
Практика показывает, что с 70-х годов ничего не могут поделать ни стилистика программирования, ни санитайзеры, ни линтеры, ни прочие ухищрения, придуманными людьми. Как было 70% ошибок некорректной работы с памятью, так и остаётся эта печальная статистика для более-менее крупных проектов. Вот это БАЗА.
Но маня с двачей конечно же знает сикретный метод самих ДИДОВ, который позволяет писать код без утечек, УБ и use after free. А то, что Раст - глоток воздуха в мире ЯП, совершенно новая концепция с 80-х годов(или когда там языкостроение остановилось?) это паебать. Мы люди не гордые, видим байты - ебем.
>Хочешь на чем то другом - попробуй, но смысла нету.
Ну почитай дневничок разработчиков версии Тора на расте, узнаешь в чем смысл.
Мозилла создала Firefox, на котором основан Tor, затем создала для себя же раст, и было бы удивительно, если бы она не начала юзать свой же язык, ведь то очень подозрительно, когда IT-компания не использует свои же технологии.
>Мозилла создала Firefox, на котором основан Tor
Что, блядь? Какой нахуй Тор от мозиллы? Остальную шизу даже не читал.
Сосач, 2022. Абу. Итоги.
>На си/спп можно сделать вообще все.
А что нельзя сделать на си/спп, то можно сделать тулом, написанным на си/спп.
Вот именно, что не читал. Ты ебанутый? Тор основан на Firefox, но из этого никак не следует, что сама мозилла этим занималась.
>сикретный метод самих ДИДОВ, который позволяет писать код без утечек, УБ и use after free
Изи. Достаточно придерживаться простых правил. Но я их вам не скажу.
Ты лучше предложи инструмент для мнопотоных приложений, который гарантированно исключит deadlockы и при этом будет иметь хорошее время отклиа.
>Тор основан на Firefox, но из этого никак не следует, что сама мозилла этим занималась.
Это тролинг? Ты знаешь, что такое Тор, болезный?
>Ты ебанутый?
Такой же вопрос хочу тебе задать.
>>454511
>Ты лучше предложи инструмент для мнопотоных приложений, который гарантированно исключит deadlockы и при этом будет иметь хорошее время отклиа.
Не предложу, своими ручками.
https://doc.rust-lang.ru/book/ch16-00-concurrency.html
>Изи. Достаточно придерживаться простых правил. Но я их вам не скажу.
Алсо, жаль, что эти правила кроме тебя, видимо, не знал и не знает.
По задачам.
Там ниже написано, что до c++11 гарантировалось, что оператор [ ] выдает те же символы, что и в c_str(), то есть совпадают значения, а не адреса. А начиная с c++11 уже гарантируется, что совпадают адреса, то есть с c++11 c_str(), хоть это и указатель на const, указывает на тот же кусок памяти, что и [ ], который точно выдает ссылку на оригинал, а не на копию.
> А начиная с c++11 уже гарантируется, что совпадают адреса
Ты знаешь что x[1] это тоже самое что x + 1
Я хуею с дегенеративности этого тренда.
Не знаю, троллишь ты или нет, но для справки: если x это указатель, то x[1] это то же самое, что *(x+1) обращаю внимание на звёздочку, так что ты обосрался.
960x540, 2:00
Помогие с тупым вопросом.
Никогда не программировал и ничего такого
Хочу вкатиться в Унреал Енгине, мне для этого надо бы изучить С++ по какой-нибудь хорошей книге? Еще наверное дополнительно специальные книги про ООП и алгоритмы, и я смогу делать в УЕ все что придумаю?
Или не правильно себе это представляю, и надо бы другим путем двигаться?
>x[1] это то же самое, что (x+1)
Нет, это то же самое, что (x+sizeof(*x)), так что вы оба обосрались.
Там тоже звездочка стоит, просто харкач принял это за разметку.
Ладно, пару скажу.
После delete присваивай указателю nullptr
При этом шансы получить "use after free" снижаются на порядок.
А вероятность поймать исключение во время отладки увеличивается на порядок.
Что касается UB, то вместе с опытом ты теряешь UB, просто потому что ты знаешь "слабые места".
С утечками сложнее. Тут надо заморачиваться на этапе проектирования. Я несколько напиздел насчёт "проствх" правил. Правила для исключения утечек не простые. БольшАя засада когда ты выделяешь память в одном потоке, а освобожаешь в другом, тут очень легко чего-то недосмотреть. Поэтому этап проектирования решает.
>мне для этого надо бы изучить С++
На чём сейчас пишешь?
Изучать С++ как первый язык это такое.
Арифметика указателей не так работает
+1 это смещение не на 1 байт, а на 1 размер базового типа.
Не, изучить конечно реально. Но это будут весьма специфические знания. Без базы знаний и опыта получаются своебразные С++ программисты.
Ну что ж, могу дать совет - когда будешь здесь (на двачах) задавать вопросы по С++, то (я имею в виду конкретные вопросы по конкретным свойствам, операторам, синтаксису, поведению, etc.) - будь эпатажным, провокационным, неунылым. Тогда народ выльет на тебя кучу говна вместе с решением твоей проблемы.
Иначе высок шанс получить игнор вместо ответа.
Кстати да, странно "учить указатели" на плюсах, а не на си. Нежданчики с перегрузкой операторов и ссылочными типами гарантированно помешают.
https://ru.stackoverflow.com/questions/189730/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C-%D0%BD%D0%B0-c-%D0%BA%D0%B0%D0%BA-dictionary-%D0%BD%D0%B0-c
Если они по скорости проигрывают шарпу - где вообще все на шарпе, игоры, браузеры, кады, ОС?
Ну и какая репутация у игор на юнити?
Всё тобой перечисленное это дремучее легаси, которое начало разрабатываться во времена, когда шарпа ещё не было.
В юнити на шарпе только скрипты, весь рантайм на крестах.
Да, значит я обосрался.
\n никак не связано с юникодом.
> Всё тобой перечисленное это дремучее легаси, которое начало разрабатываться во времена, когда шарпа ещё не было.
А что не легаси, мобилкопараша для дебилов?
>Зачем нужны кресты, если они по скорости проигрывают шарпу?
Это невозможно. Сейчас схожу по твоей ссылке объясню почему невозможно.
Ну вот, там же по твоей ссылки ответ - кастом аллокатор.
А теперь смотри. Вот у тебя в памяти таблица чего-то на гигабайт. Тебе нужно найти элемент. У тебя две программы - одна на С++, которая перебором ищет искомый элемент, другая на Бейсике, которая использует hash-функцию. Ря-я-я-я-я, интерпретатор быстрее компилятора.
>Как в utf-8 писать все?
В Visual Studio - save as и выбираешь там сохранять в юникоде.
В FAR Manager: Ctrl+A, Ctrl+X, Shift+F8, выбираешь utf8, затем Ctrl+V.
Исходник в юникоде вроде бы..
Причем \\n почему то как разделитель считается прогой нормально. Пиздееец
А ты не смотри на размер бинарника, все равно динамических библиотек всегда ещё как тыщу бинарника догрузит
https://pastebin.com/tu4Rmh5v
Ты бы лучше сначала исправил эту ошибку и запустил код, а потом рассуждал. Выше правильно написали, что это неопределенное поведение, поэтому результат может быть неожиданным.
'0' = 48
w[i-'0']=0;
ты на 47 машинный слов залез по стэку вверх и затёр что-то в вызывающей функции. Хорошо бы это адрес возврата из функции, чтобы программа рассыпалась в клочья. Гораздо хуже если твоя программа управляет каким-либо критическим процессом и ты вот так поступаешь. Так по ошибке можно страшных дел натроврить.
Кстати, кто может пояснить за разницу между undefined, unspecified и implementation-defined behavior? Есть какая-нибудь хорошая статья на эту тему?
Undefined - нигде не описано, что произойдёт, поведение совершенно непредсказуемо. Например, переполнение знаковых. Однозначное зло, которого надо избегать, остальные два варианты допустимы в различных ситуациях.
Implementation-defined - не описано в стандарте, но может быть описано где-нибудь в доках компилятора или ОС. Например, размеры типов в зависимости от платформы.
Unspecified - тоже не описано нигде, но смысл "оставлено на усмотрение авторов компиляторов".
Правильно ли я понимаю. IDB должно быть четко описано в документации компилятора (например, "int = 4 байта"), и если оно не прописано, то компилятор не вполне соответствует стандарту. А USB может быть разное даже в рамках скомпилиррваной однажды программы (например, программа то вычисляет аргументы функции слева направо, то справа налево), и это стандарт не нарушает. Получается UDB > USB > IDB по степени важности. Всё так?
Азы наверное нужно. Даже не ассемблера, а азы ABI - https://ru.wikipedia.org/wiki/Двоичный_интерфейс_приложений
При этом главное правило - пусть лучше программа вываливается с ошибкой, нежели неправильно работает.
Если лениво с этим разбираться, то лучше посмотри в сторону C#/Java/интерпетаторы
Ты из переменной i, которая у тебя равна единице, вычитаешь код символа Q, который равен 48.
Получется -47
Затем ты используешь отрицательное число как индекс массива.
Компилятор это пропустил, хотя, возможно, сделал замечание.
Не факт, что допустил константный отрицательный индекс - проверять лениво.
А посколько переменные у тебя локальные, то память для них выделяется на стеке. Там же фрейм вызова функции с адресом возврата. А ты берёшь, и пишешь куда по стеку вверх. Если затрёшь адрес возврата - программа упадёт при выходе из функции, потому как обратится адресу, который ей не принадлежит, ОС это перехватит и аварийно завершит программу.
Если порушишь фрейм вызова, то с вероятностью близкой к единице программа упадёт тоже.
Но может совпасть так, что программа затрёт значение какой-то переменной, при результат её работы будет неверен, но ты об этом не узнаешь или узнаешь слишком поздно.
Если это программа управляющая технолгическими процессами, банковская или математическое моделирование, то... мне даже страшно писать какие могут быть последствия.
Если хочешь без ущерба по скорости исполнения не мучиться с байтиками, то есть еще Rust.
Арифметика указателей не так работает
+1 это смещение не на 1 размер базового типа, а на следующий элемент массива. (https://timsong-cpp.github.io/cppwp/n4861/expr.add#4.2)
Структура в один recv() помещается? Ну то есть в буфер помещается?
Если да, то разницы нет - по сети ты её принимаешь или как-то ещё.
Тип структуры узнаёшь из её заголовка, а дальше кастуешь указатель на нужный тип на эту память и всё.
Главное тут чтобы у всех типов твоих структур заголовок был одинаковым.
Например, Макрософт для заголовка часто использует первый байт/слово структуры под размер структуры и уже размер структуры определяет её тип.
У нас используется внутренняя либа для описания структур. Это позволяет избавиться от их хардкожинья, можно грузить их описание из файла настроек, передавать по сети и т.п. Когда у тебя тысячи параметров это очень удобно. Возможно для тебя это будет оверкилл канеш
>protobuf
Ух, какая же хуйня. Вроде и бинарный протокол, а присмотришься, это какой-то франкенштейн. Не, как замена XML/JSON он хорош. Но только как замена XML/JSON.
Радует лишь то, все эти XML/JSON/protobuf родились сильно после IP/TCP/UDP. Не хотелось бы даже представлять мир, в котором поверх Ethernet фреймов бегал бы XML.
overhead по сравнению с передачей данных размером sizeof(my_structure)
>Структура в один recv() помещается?
Да. Точнее, у меня в MsgReceive помещается, это под QNX всё пишется
>Тип структуры узнаёшь из её заголовка, а дальше кастуешь указатель на нужный тип на эту память и всё.
Ну я, собственно, так и планировал. Но у меня проблема в том, что при касте из void что-то ломается и поля структуры становятся не видны. Т.е. если я принимаю в struct foo и обращаюсь к полям, то всё ок, но если принять в void и кастануть в foo, то в тех же самых полях уже лежит мусор.
>>455815
>>455817
Не особо понял, причём тут свои либы со своими структурами и protobuf. Мне, наверное, стоило отметить, что состав структур не я писал, они стандартизованы все. Первые два байта - тип, дальше уже у каждой по-своему. (К слову, в данном конкретном случае мне даже не нужно смотреть внутрь структуры, чтобы опознать её, я могу ориентироваться по значению, возвращаемому функцией приёма.)
Не буду тебя просить код, потому что лениво и некогда разбираться. Могу лишь совет дать - отладь это место в Visual Studio и уже затем перетаскивай в железку. Очень похоже что проблема не там, где ты думаешь.
Что за прога? Ни разу не видел, что бы на андроиде можно было компилировать
Нельзя, рефлексии нет.
#include <concepts>
struct B {};
struct D : B {};
template<std::derived_from<B> T>
struct S {};
S<D> d; // ok
S<int> xuy; // хуй
Спасибо
Не, именно асинхронщина. Я точно не ошибся. Так просто 2 потока и хуй с ним.
Че ты у меня спрашиваешь?)) Я не знаю. Впервые такая проблема. Погуглю что это спасибо
А что тебе даст тот факт что он тривиально копируемый?
static_assert
>А с чтением и записью на диск такое прокатывает?
Там тяжелая и долгая история с асинхронным дисковым I/O. В винде вроде как есть поддержка этого, в линуксах очень долго не было, потом высрали AIO, которое оказалось говном из жопы, что неудивительно, лол, и только вот недавно завезли io_uring, который в теории это может делать. Про макось не знаю ничего, скорее всего kqueue не умеет по дефолту в асинхронное дисковое ио.
Каждая крестоблядь обязана написать свои строки и кастомный аллокатор, это база.
>Чат в телеграмме имеет столько сообщений, сколько в оперативную память никак не влезает.
>быстро писать и читать с диска
Докупаешь память, а не занимаешься хуетой.
Я так понимаю, что оно совсем устарела и изучать язык по ней нельзя? Или фундаментальные вещи не сильно изменились и она все же норм будет?
Если в этой книге описывается auto_ptr, её уже сразу можно пускать на растопку мангалов.
> Ни разу не видел, что бы на андроиде можно было компилировать
Хмм. Серьёзно не видел? Видимо ты не искал.
Ищи botbrew например. Но вроде как он умер. Но в сети находится.
Или вот это смотри - https://github.com/meefik/linuxdeploy
Или вот это - https://termux.dev/en/
>Как организовывать быструю работу с большими данными?
посмотри в строну mmap.
man mmap
За тебя всё сделает говноядро говнолинукса.
> кастомный аллокатор
это супермегаохуительнейшая вещь.
Вообще аллкоатор под конкретную задачу это божественно.
А если ты бы видел мой аллокатор, то от его созерцания и втыкания в код оргазмировал бы радугой. Но я жадный говнюк и не покажу.
Он настолько быстрый, что быстрее сделать уже невозможно. Он быстро выделяет память и так же быстро освобождает. Лишь одна беда - он не универсальный, он может выделять память лишь для одного типа объектов. Х.з., может кто и догадается как он сделан.
Ты много чего ещё не видел. На, посмотри - http://sven-ola.commando.de/repo/debian-kit-office.mp4
Если ты не хочешь выжать из железа всё возможное, нахуй лезти в кресты.
Для не норм сишников.
На помойке нашёл?
private:
G4VPhysicalVolume fBox;
G4double fBoxSize;
G4Material* fMaterial;
Тупо инициализация переменных. Происходит до тела конструктора, необходима когда у членов класса нет конструктора по умолчанию.
Указание на то, какой конструктор предка и с какими параметрами вызвать:
struct A {
A() {};
A (int ) {};
};
class B : public A {
B() : A(10) {}
}
Если не указать, то будет вызван A::A(){}
Вот бы посмотреть на тебя, пишущего с браузера, написанного на питоне, из ОС написаной на нем же.
> ОС на питоне
Я считаю, давно пора создать процессор, способный выполнять .пук байт-код питона
Положение дел на рынке тебе hh подскажет, лоль
can't dereference out of range vector iterator
https://pastebin.com/V23dGJED
Причем касается только игрека. И если подать arr.end()-1, тогда запускается норм, но и ответ неправильный.
Тьфу, совсем разжижил мозги питоном. Мне нужен max_element.
Не сразу вкурил, но спасибо за наводку.
Она сишная. И да, это пиздец, наверное самое говеное из того с чем я сталкивался.
Бляяя. Я знаю, что она сишная, но там помимо этого дохуя сложный интерфейс вроде. Но она самая быстрая, причем в несколько раз. Видимо другое возьму. Че подскажешь? Хочется побыстрее, конечно, но чтобы не надо было неделю доки курить
Начал читать Прату, первые 4 главы идут очень легко, за пару дней их пролистал и спокойно решил задачки. Стоит полностью пролистать Прату, или лучше юзать его как справочник и сразу переходить к моментам, которые есть только в крестах? (типа ООП, классы, ссылки итд)
В твоей ситуации вообще всё равно. Айтишечку сейчас лихорадит и куда мы придём через 2-3 года - никому неизвестно.
Прата он вроде с самого низу. Читай лучше Мейерса. Заодно поймёшь, что ты вкатываешься с нуля, относительно того, сколько нахуевертили в C++ поверх C.
Проходил курс по крестам на Яндекс Практикуме. Там тоже был сишник читающий Прату. Вылетел одним из первых. Так что не советую.
В военку легко вкатишься. В какое-то НИИ или КБ или НТЦ. Платить хуйню будут, но попасть легко и опыт какой-никакой получишь.
Хуяси, физик в треде. Ну что, с частичками своими пердолишься всё? В ОИЯИ тусуешься? А Geant4 вещь годная, да. Кореш один тоже с ней пердолился.
>остальные сильную конкуренцию составят начинающим плюсовикам
Ну как минимум часть вакансий отожрут, это точно.
На самом деле вакансий для начинающих нет почти что никогда. Максимум - стажировки в яндексе, хуавее, а раньше еще и в интеле, ну ты понял.
Обычно команда всегда запрашивает как минимум мидла, но так как денег у конторы мало, кабан жмот, да или просто HR работает на похуизме, то берут вкатуна. И вот вместо мидла команда получает вкатуна, которого потом учит просто от безысходности. Это вот так вот работает. Джунов и стажеров кроме яндекса сейчас почти никто не ищет. Устроиться без опыта это как выиграть в лотерею. Ну или на завод/нии/кб идти, там особая атмосфера найма всегда.
Ещё дотекание будет. Думается что 20% ещё укатят вдаль. Сам вот сижу и смотрю приглосы. Из тех, что нормальные - в основном перекат. Остальное - госзаказ в разных вариациях.
А какого именно? Их целых 3 в шапке. Глянул самого последнего по году, там подразумевается что ты уже знаешь язык, а я пока не очень его знаю.
>>457903
Ты весь курс прошёл? И как оно? Ты с нуля начинал? Он вроде платный, как я понял.
Интересно, чего он вылетел. Не думаю, что дело в Прате. Хотя мне кажется, что если сейчас пойду, то тоже не осилю так как что-то там нагрузка большая, да и я очень хреново понимаю, как ооп работает, точнее не могу нигде придумать, как это реализовать на практике.
Я так вкатился, но у меня должность низкая. При этом все коллеги уже 5+ лет сидят там, у нескольких семьи и дети есть, неужели они за гроши там сидят? Сам как-то стремаюсь напрямую спросить.
Как они тогда семью содержат, машину и платят коммуналку? Мб я тоже так научусь, если пару лет просижу тут, по крайней мере надеюсь хотя бы 2 года опыта сделать.
Да, закончил недавно. Курс годнота, если иметь адекватные ожидания. Но последние деньги на него тратить точно не стоит.
Начинал не с нуля. Много чего знаю, но всё по верхам. Первая треть очень простая, на уровне всех остальных курсов и туториалов, потом резкий скачок сложности и становится гораздо интереснее. Подход к обучению там TOP-DOWN. Сразу дают вектора, мэпы, сеты, стл алгоритмы, умные указатели, лямбды и т.п(про массивы, например, расскажут сильно позже этого). Ну так вот, ты их крутишь-вертишь, уживаешься с ними, а только потом идут детали реализации. Сишнику очень пекло с этого. Вместо того, чтобы мыслить на нужном уровне абстракции и решать задачки, жаловался, что не может проложить мостик от своего си прошлого до c++ настоящего. А вот у Прата он говорил правильные методики, как наших дедов учили. Может быть, но есть шанс, что если ты встретишь те же лямбды только на тысячной странице, они недостачно плотно войдут в твою жизнь, как и все остальные актуальные фишечки.
Лол, я примерно поэтому и начал с Праты, потому что реально тяжело дается этот уровень абстракции после пары лет Си.
А сколько по времени курс занял и как много ему надо уделять времени примерно?
Я бы может и записался попозже.
>Как они тогда семью содержат, машину и платят коммуналку?
Ну, видимо, так же, как и учёные и инженеры из этих же НИИ.
Живут на копейки, иногда, возможно, перепадает денежный грант, но это редкость. Конечно, зависит от области, чем более прикладная, тем больше денег в основном.
Но ты же понимаешь, что учёные в этой стране живут впроголодь? Вот и программисты НИИшные так же. Хорошо живут только чиновники от науки и 3,5 профессора топовых вузов.
Поэтому, собственно, программированием в НИИ и занимаются те же учёные и инженеры, а собственно программисты туда не идут -- им деньги нужны. А там нет смузи и денег. А 95 процентов потенциально научной молодёжи либо на Запад сваливают, либо идут в айти в итоге. Такие дела.
>Как они тогда семью содержат, машину и платят коммуналку?
Знаю годного профессора теорфизики, живущего в одиночестве, ездящего на автобусе и живущего в убогой студенческой общаге годами.
Просто я хотел еще сам уметь имходники чекать, а в опенссл на это придется наверное хуеву тучу времени потратить
Курс длится 9 месяцев. Пишут, что нужно тратить от 15 часов в неделю. Но 15 это если без сдвг, у меня получалось больше. Так же есть вариант получить скидку от государства по программе "Цифровые профессии". Раньше была 50% для всех, сейчас нужно принадлежать к какой-нибудь льготной категории и размер скидки вариативный.
Если это не академические часы, то нехилая такая нагрузка выходит, особенно если работаешь. А как оттуда ввлетают вообще? Вылететь легко, или надо быть совсем дубовым? Как контролируют усваиваемость материала? А есди что-то непонятно, норм объяснят?
Курс разбит на спринты по 2-3 недели. Если не укладываешься в дедлайн, то можешь взять академ и начать спринт заново с другой группой. Со скидкой от государства это можно сделать один раз, без неё три. Вылететь легко, если проблемы со временем и тайм-менеджментом, сам материал достаточно доступный. На курсе задания сдаются в тренажёр, который прогоняет твоё решение по тестам. В конце спринта большое задание, которое нужно сначала сдать тренажёру, а потом живому ревьюеру. Учишься вместе с одногруппниками, так что есть с кем поболтать в чатике. Так же на каждый спринт выделяется наставник, который отвечает на все твои вопросы. В основном наставники были толковыми, но это не фуллтайм работа, так что ответить могут сильно не сразу.
>пишущего с браузера, написанного на питоне, из ОС написаной на нем же.
Байтоеб еще не понял реализации машин...
С ним в комнате
Молодец, что посоветовал. Там написано, что структура нетривиальна, если ее поля лежат в разных спецификаторах доступа. Однако std::is_trivial на MVSC C++20 говорит, что тривиальна.
Только на вопросы по си с большей вероятностью ответят в этом треде, чем в полумертвом тематическом.
Не понимаю, как закодить максимальный размер буфера в 1.5 килобайта с Qt, ебаный пиздец
Говна пожуй
>Ебать велосипед, уже проще создать класс или структуру.
Ты просил красиво. На входе двумерный массив любого размера и любого типа, без необходимости передавать размер ручками. Куда уж красивее?
Я просто надеялся что есть изи вей который я не знаю, а тут оказывается или пики точеные с указателями или темплейты дроченые болтаться будут.
>Ты чё я датасаентист
В данный момент в этой стране ещё возможно вкатиться в датапососаенс?
Алсо, МЛ-инженегру нужен С++, или ему достаточно петухона?
>>458397
>Питонист, хочу научиться плюсам хотя бы на уровне "написать обёртку для либы", что посоветуете для изучения?
Алсо, обычно на петухоне пишут обёртку для С++, а ты собрался делать наоборот?
Это типа шутка, но ты бредово написал. Не знаю, чего посоветовать, посмотри основы из шапки треда https://github.com/sosachbot/cppthreadhat .
Шо, не 20 x 10k + некоторый небольшой оверхед?
Похуй, не програмистское это дело, везде компилятор довезёт.
Всегда лолирую с дебилов, которые реально делают двухмерные массивы или вложенные вектора.
Хуй знает, Патлатый говорит, что как программист он хуйня. На работе просто роутеры настраивал.
Ну, а учитывая, что он не может почистить себе винду, чтобы дота не лагала, то каа бы все становится на свои места.
У меня проект на крестах ~800 файлов, решил собрать еще и под винду.
На линуксе слион сам все парсит, навигация по проекту быстрая.
На винде он не парсит, пака я сам файл не открою.
Какие варианты?
Предположу, что под "парсингом" ты имеешь ввиду навигацию в студии. Какая билд система? CMake? Он вроде как нативно поддерживается в последних двух студиях. Открываешь, настраиваешь параметры конфига и запускаешь. Ещё один вариант - можно из симейка сгенерить проект студии. Если не CMake, то придётся вручную создавать новый студийный проект
Чел ты в глаза долбишься? Я же про силион пишу, а не про студию, ты хоть прочитал бы куда овечаешь.
Разумеется cmake, это же стандарт. Но он не имеет абсолютно никого отношения к разбору проекта.
https://ofvp.phys.msu.ru/wp-content/uploads/2021/03/diskretnoe-preobrazovanie-fure.pdf
inputListVector это лист, в котором два вектора. Вектор [0] это действительная часть, вектор [1] это мнимая часть.
Я этот inputListVector скармливаю массиву комплексных чисел in, где in[0] - действительная часть, in[1] - мнимая. Я просто совсем не разбираюсь в математике. Все на что меня хватило, это установить библиотеку fftw. Вот я делаю прямое преобразование фурье, получаю на выходе массив out, по алгоритму в книжке нужно найти сумму квадратов действительных и мнимых частей. Зачем я не знаю. Алгоритм представлен на странице 77. Там написано что это power spectral density. Я почитал надо как то сдвигать гармоники влево, но я не понимаю точно как это делать. 1 пик это эталонный график на который я равняюсь, второй пик то что получается у меня.
Этой иде почти никто не пользуется (на работе).
Нет и не завезут никогда.
C++ это реально какая то ловушка Джокера. Люди учат его на полшишки, не могут найти работу, учат его еще, а дальше получают стокгольмский синдром, мол, не буду же я останавливаться на полпути, надо доучить и вкатиться наконец в плюсы. И так проходят годы, годы, годы.
Хорошие перспективы, контента лет на 5 будет лол
С помощью буста и нехитрых манипуляций ты можешь делать работающие выражения типа
z = x <vozvesti_v_stepen> y;
Оно тебе надо?
Оператор возведения в степень нужен для читаемости кода, который имплементирует вычисления по сложным инженерным или физическо-математическим формулам.
Чем меньше формула, написанная в коде, и отображаемая в IDE, похожа на формулу из печатного источника, тем зашкварней этот код.
Язык - это не только для второсортных макакеров-кнопкокрасов и байтовертов, по сути обслуживающего персонала, которые тем не менее думают только о себе и своём удобстве и варится в своём токсичном соку. Любой язык, он прежде всего для элиты, для вершины эволюции технического специалиста - т.е. физиков, математиков и инженеров.
Математики используют оператор возведения в степень в современном виде 4 сотни лет. И тут приходит грязная макака, которая нихуя не знает, но у которой инфиксные операторы сложна парсятся и вообще это по сути функции и записываться должны как функции, поэтому этот астронавт чистоты языка считает нужным это всё искоренить. Разумеется, таким тупорылым макакам умные люди обычно во время давали крепкого пня под немытый сракотан, не дав им возможности обильно нагадить. Но всё же в отдельных языках грязные байтокруты успели поднасрать белым людям.
>>460137
Это стандартный базовый оператор, который должен быть из коробки. Вы уж будьте последовательны, и либо искореняйте все человеческие операторы, как то сложение, вычитание, деление, умножение, либо не выебывайтесь, и делайте, как говорят люди, которые знают и понимают сильно больше вашего.
Ыыы)
#include <iostream>
#include <cmath>
using std::cout;
using std::endl;
class Dbl
{
public:
Dbl(double v){value=v;}
double value;
};
double operator^
(const Dbl& a, const double& b)
{
return pow(a.value,b);
}
double operator^
(const double& a, const Dbl& b)
{
return pow(a,b.value);
}
double operator^
(const Dbl& a, const Dbl& b)
{
return pow(a.value,b.value);
}
int main()
{
Dbl a(2.3), b(1.7);
cout << (a^b) << endl
<< (a^0.5) << endl
<< (2^b) << endl
<< (Dbl(5.2)^0.7) << endl;
}
Ыыы)
#include <iostream>
#include <cmath>
using std::cout;
using std::endl;
class Dbl
{
public:
Dbl(double v){value=v;}
double value;
};
double operator^
(const Dbl& a, const double& b)
{
return pow(a.value,b);
}
double operator^
(const double& a, const Dbl& b)
{
return pow(a,b.value);
}
double operator^
(const Dbl& a, const Dbl& b)
{
return pow(a.value,b.value);
}
int main()
{
Dbl a(2.3), b(1.7);
cout << (a^b) << endl
<< (a^0.5) << endl
<< (2^b) << endl
<< (Dbl(5.2)^0.7) << endl;
}
>Любой язык, он прежде всего для элиты, для вершины эволюции технического специалиста - т.е. физиков, математиков и инженеров.
Двачую тебя.
Да стандартная хуйня на шаблонах. Только скорее x=pow<2,2>
С телефона могу только скопировать из доков:
#include <boost/hof.hpp>
#include <cassert>
using namespace boost::hof;
struct plus_f
{
template<class T, class U>
T operator()(T x, U y) const
{
return x+y;
}
};
int main() {
constexpr infix_adaptor<plus_f> plus = {};
int r = 3 <plus> 2;
assert(r == 5);
}
Работает с любыми бинарными функциями.
>Почему такую хуйню нельзя как-то явно сделать?
Потому что не нужна.
>один и тот же символ
Чем меньше конструкций тем лучше, ты на крестах вообще никогда не писал? Они из-за таких слов растут каждую версию в 1.5 раза.
Разве трудно распарсить a⚹⚹⚹⚹b по сравнению с тем адом, который уже парсится?
Нахуя? Тебе мало? В хаскелле вот вообще можно свои операторы создавать из произвольного набора символов, и количество нечитаемого и неподдерживаемого говна росло бы экспоненциально, если бы на этом языке хоть кто-то писал реальные проекты.
Может и было, хз, пролог забыл давно.
Qml достаточно простой язык, qmlbook за глаза хватает, если у тебя какой то вопрос, задай мне, возможно я смогу тебе помочь.
Потому что Qt помойное говно мочи.
А если серьезно, инфы дохуя. Просто офф сайты и доки. Да, там вначале кривая обучения, но так и везде. По бусту документацию открой
>Это стандартный базовый оператор, который должен быть из коробки
Я могу представить несколько различных алгоритмов для тех же, например, флотов. Все с различными сходимостями и размерами ошибки. Тейлор? Метод Ньютона? Через экспоненту с логарифмом? А для целых экспонент будет ли быстрое возведение в степень? Это ни разу не "базовый оператор", и должен быть отдан на откуп библиотеке, а не являться частью языка, как и всё, что связано с IEEE 754. И если ты не следишь за ошибками в плавающих запятой, то цена грош твоему "инженерному" коду.
Раз ты такой прошаренный в вычмате, поясни за оператор степени в Фортране -- как там обходятся одним единственным вариантом?
Спроси в фортран-треде. Ой, а почему такого треда нет?
А ещё в фортране есть встроенные функции для работы с векторами и матрицами. Казалось бы ебать как нужно и хули их писать то, но тож чет не завезли. Ни в C# ни в C ни в Java.
Фортран создан для математиков и физиков, а кресты созданы для нормальных людей. Но нет блять, вместо того, чтобы ебаться со своим фортраном, они лезут сука в кресты со своим говном, прям как арабы едут в Европу.
Фортран и просто как язык (был) хорош, просто он теперь старый и ненужный. Для такой хуйни сейчас есть бейсик, ну или питон если ты дегенерат.
Вообще-то фортран местами быстрее С из-за особенностей работы с памятью (то что в сях фиксят вручную через restrict на указатели) ну и конпелятор за столетия был вылизан до совершенства.
Ты нихрена не понимаешь что такое С, его нельзя сравнивать с фортраном. Си это машинный язык, там даже тупо математики нет, только машинные слова и байты. Поэтому там нет и степеней и прочей лабуды, это просто вообще не то, задачи у Си другие, это язык другого порядка.
Так что, как я сказал, с фортраном можно сравнивать бейсик или питон на худой конец.
>Ты нихрена не понимаешь что такое С
>там даже тупо математики нет
math.h?
>только машинные слова
Покажи хотя бы 1 машинное слово в Си.
>задачи у Си другие
Решать поставленные задачи, у форта разве другая задача?
Любой оператор для встроенных типов в C/C++ заменяется 3-4 строчками ассемблерного кода. Почему из этого правила должно быть исключение? Если бы существовал оператор возведения в степень, он всё равно вызывал бы pow.
>math.h
Это библиотека, хоть и стандартная. Выше правильно написали
>Это ни разу не "базовый оператор", и должен быть отдан на откуп библиотеке, а не являться частью языка
>Задача - решать поставленные задачи
А конкретней? Си нужен, чтобы писать код, максимально приближенный к машине. Ты пишешь код и можешь примерно представить, как он будет транслирован в ассемблер. А фортран нужен (был) для математических вычислений.
Странно что фортран не преподают в школах и универах, ведь именно в системе образования бытует шиза, что программирование родственно математике. Раз уж такие математики мамкины, вот и брали бы подходящий инструмент. Но нет, обязательно надо через жопу, еще и в си лезут, дегенераты.
>в школах и универах
>бытует шиза, что программирование родственно математике
>еще и в си лезут
Сам выдумал, сам разоблачил
У меня лабы по фортрану были на первом курсе универа. Их ещё вел дед пердед, который не очень хорошо объяснял.
У нас был фортран, но его не преподавали, а тупо давали лабы и курсачи, там препод занимался какой-то научной хуйнёй на суперкомпьютере, для которого были свои компиляторы на C и фортране, но препод требовал сдавать лабы именно на фортране, видимо, сишку он не осилил.
Тип результата должен определяться при компиляции, это тебе не петухон. Для разных типов разные инструкции процессора.
>он всё равно вызывал бы pow.
Или использовал бы инструкцию pow, ему ничего не мешает.
>>460817
>Си нужен, чтобы писать код, максимально приближенный к машине.
Си нужен, чтобы заменить куски зависимого кода.
>>460817
>Ты пишешь код и можешь примерно представить, как он будет транслирован в ассемблер.
Так можно сказать про любой нативный компилируемый язык.
>Я могу представить несколько различных алгоритмов для тех же, например, флотов.
Вот и настроишь это для своего компилятора или будешь использовать явный вызов функций, если это для тебя важно.
>А для целых экспонент будет ли быстрое возведение в степень?
Для перегрузки с интовым правым аргументом может и быть.
И как, завезли уже в паскаль оператор возведение в степень? Есть хоть один "нативный компилируемый язык" с "базовым" оператором возведения в степень?
А при чем тут оператор возведения в степень? И что он вообще должен делать в языке, который может компилиться под всякие микроконтроллеры где всяких fpu нет и близко?
Если ты джуниор мальчик
Не совсем новичок, поэтому хочется ближе к нашему времени информацию прочитать
Но ведь время программиста стоит дороже, чем ещё одна плашка оперативы.
> Но ведь время программиста стоит дороже, чем ещё одна плашка оперативы.
Это пока. Пыня старается изо всех сил чтобы в скором будущем стало наоборот
Во время написания/выхода второго издания C++20 был в черновике, кажется. Вроде бы, все стандарты до него там описаны нормально.
Кажется, уже 3-е вышло на ангельском, но хз, можно ли его найти где-нибудь забесплатно.
Ага, а если программа пишется для широкой публики, а не внутреннего использования? Пользователям тоже предложишь докупить 60 Гб оперативной памяти?
Жабадауны так не умеют, их мышление ограничивается серверным говном.
Инструкции процессора могут быть любыми, которые заложил разработчик, что мешает ему оптимизировать степень, если это требует заказчик? Ничего.
>Пример, кроме C/C++?
Почему ты вынес кресты, когда обсуждается Си? Асм.Это не машинный код.
Понятно что при остром желании можно хоть пустыми объектами всю память занять, если ставить себе цель именно занять всю память.
Но без злого умысла сделать тобой описанное - я хуй знает, как.
Это разные книги
>жава кайфовый язык создавай столько объектов сколько нужно вм всё порешает за тебя)
>ой а почему мой калькулятор использует целый гиг памяти а где сборщик мусора((
Что ты этим пытаешься сказать?
Торрент клиент - каловый пример, его школьник-имбецил напишет на каком угодно сахарном языке и будет норм работать.
Самая прибыльная игра в мире написана на жабе (игра блядь), вот и ответ можно ли клиентский софт писать на жаве. Да можно, если он кому-нибудь нужен.
>Самая прибыльная игра в мире написана на жабе (игра блядь)
Это которая потом была на плюсы переписана, чтобы в неё можно было играть?
Хороший пример, хороший.
Чёт в шёпот.
Ты хотя бы минимально ознакомься с вещами, о которых рассуждаешь.
Во-первых копрокубы были самой продаваемой игрой в мире задолго до появления bedrock edition. Во-вторых, задача этой версии - принести кубач на каловые платформы. Сначала появилась мобильная версия, потом консольные версии, получился зоопарк разных версий, потом их все поубирали из магазинов и выкатили ЕДИНУЮ кастрированную говноверсию, в которую играют только те, кто по каким-то причинам не может играть в нормальную.
>чтобы в неё можно было играть
Чтобы в крестовую версию можно было играть, в неё нужно хотя бы моды завезти, но модов там нет и не предвидится.
>Интересно, а почему они просто не портировали жабу?
Ой, а жаба оказывается есть под все платформы... неловко получилось.
>Интересно, а почему они просто не портировали жабу?
>>461259
>пук среньк мам я иронизирую
https://apps.apple.com/us/app/minecraft/id479516143
На айфон? Ну хуй знает. Может у эппла спросить, почему?
> кто по каким-то причинам не может играть в нормальную
Например, по причине лагов и статтеров на кривой жаба-версии.
А ой...
Вытекаешь
Ты сейчас сказал, что можно, и без каких-либо подвохов?
Я про такое не слышал и нагуглить сходу не удалось
Он уже написал из-за чего - неиспользование restrict keyword'a новичками при вероятности алиасинга (перекрытия) структур данных, переданных функции в параметрах-указателях.
/мимо rust-бой где такой нужды нет (как и в фортране)
Чем больше оперативы по коду требует программа, тем меньше вместится в кеш процессора. Соотв. программа будет работать медленней.
Да, всех с днём парикмахера! ✂️💇🔥
Ура, всех с днем войск радиационной, химической и биологической защиты!
>.clang-format
>.clang_complete
Мне не нравится, что в одном случае используется "-", а в другом "_".
Решено.
Международный день дауна уже же прошёл. Или о чём речь, я очень плохо соображаю?
Это норма.
Ох епт, сегодня Кресты наблюдал, когда на собес шёл.
https://thephd.dev/
Лучше бы уже функциональщину пилили бы в новых стандартах, а не всякие {{zalupa::pizda}}. Уже тошнит от их изобретений велосипедов и новых конструкция языка под эти велосипеды.
>Лучше бы уже функциональщину пилили бы в новых стандартах
Функциональная блядь закукарекала. Пошёл нахуй!
Это такой троллинг тупостью? Какой функциональщины кроме паттерн матчинга тебе не хватает?
А нахера?
> Какой функциональщины кроме паттерн матчинга тебе не хватает?
Монады, нормальные лямбды к монадам. Возврат значений из выражений, например из циклов. Нормальные диапазоны и итераторы на уровне языка, а не стд-высеры не пришей к пизде рукав. Что-то с rvalue сделать для накручивания лапши.
А мог уместить их у себя в очке. Ещё сфотать это и сюда запостить.
>Монады
Реализуются.
>>462237
>нормальные лямбды к монадам.
Элаборейт.
>>462237
>Возврат значений из выражений, например из циклов.
Корутины что-ли? Есть.
>>462237
>Нормальные диапазоны и итераторы на уровне языка, а не стд-высеры не пришей к пизде рукав
Доебка ни о чем, они есть и все.
Да, кресты не задумывались как фп язык и фп на нем неудобно, но оно есть. Хочешь удобного фп иди в не мультипарадигменный язык, а не выдавай здесь свою шищу.
> Хочешь удобного фп иди в не мультипарадигменный язык
В этом контексте дело же не в том, что он мультипарадигменный, а в том что у него сборщика мусора нет. (ИМХО)
Покажи удобный ФП язык без сборщика мусора. Он также страшно будет выглядеть как кресты.
>Какие вообще подводные в сборщтке мусора?
1. Бесполезность.
2. Потребление.
3. Бесконтрольность.
Самые большие подводные - очень сложно его обойти. В том же шарпе надо дико пердолиться, чтоб иметь пародию на RAII.
>1
Ну давай считать ссылки. Циклические структуры у тебя, конечно же, никогда не возникнут.
>2
Его нет в Фортране 66, где все выделяется статически. Как только начинаем выделять/освобождать динамически, ПОТРЕБЛЕНИЕ неизбежно появляется.
>3
Это необязательно. Например, в Т (вроде бы) сборщик мог быть написан на самом Т. Во многих лиспах сборщик можно приостановить. В системах с реалтаймововй сборкой есть жесткии гарантии.
> >Какие вообще подводные в сборщтке мусора?
> 1. Бесполезность.
Он крайне полезен
> 2. Потребление.
Ты уверен? Мне кажется что по потреблению сборщик мусора будет куда оптимальнее. Он вроде как может двигать объекты, а с обычным маллоком ты не словишь фрагментацию памяти с вечным распуханием?
> 3. Бесконтрольность.
Им можно управлять. Кстати насчёт отзывчивости - а маллок какие то гарантии вообще даёт, за какое количество времени он даст тебе блок памяти, или при росте потребления он будет все более и более задумчив?
>>462566
Такие несвязные куски текста...
https://ru.wikipedia.org/wiki/RAII
Удивительно, но каждый ГС проигрывает ей.
Или я ошибаюсь?
Как он может быть быстрее?
Хачкель GHC. На нём можно писать код быстрее крестов, при том что в нём сборщик мусора.
> код будет работать быстрее?
Это. Например, парсер текста на хачкеле по производительности ебёт парсеры на крестах.
Код в студию
Как минимум гс там не мешает писать быстрый код.
>1. запостить хуйню
>2. запостить хуйню картинкой
Как называется эта болезнь, когда второе считается за весомый аргумент, а первое отбрасывается даже не думая?
-L + -l
Андрюха, ща мы тебя сдеаноним.
>Ну например сброс на диск только после полного скачивания.
А где тут вина жабы? Такую хуйню можно и на С/С++ накодить.
А причём тут жаба? Ты мне сказал придумать, как с помощью торрент клиента проебать 64 гб памяти, я придумал.
https://github.com/kaitai-io/kaitai_struct_cpp_stl_runtime
Объясните пожалуйста, кто это форсит и чем оно лучше C/C++ и Go
Тем что в нём код короче, работает как ожидается и выплёвывает ошибку компиляции в любой непонятной ситуации. А на крестах приходится писать простыни кода, ебаться с чудесами управления памятью и кишками макросов/шаблонов, сосать хуи в реалтайме потому что работает не так как ожидается, а компилятор промолчал.
ГОвно в принципе синоним слова кал.
https://pastebin.com/C6pAPM2v
Первый язык с 2000 года, который привнес что-то новое в языкостроение, а не очередная реализация идей 70-х годов.
После мува невалидные ссылки просто нельзя использовать. Но в конкретно твоём примере разницу между мувом и копированием не будет, у тебя же тут дефолтный конструктор и все типы примитивные.
Что не так с ансейфом? Смотри какая красота вместо лапши ифов на 100 строк крестах.
Разве компилятор не сгенерирует дефолтный мув-конструктор? Получается, в этом случае объект всё равно просто скопируется, а не будет чего-то вроде передачи владения новой переменной?
Так я и говорю, что критиканы за двусвязные списочки вроде него банально не могут в ансейф
> Разве компилятор не сгенерирует дефолтный мув-конструктор?
Сгенерирует, но чем он по твоему от обычного копирующего в данном случае будет отличаться? Я хз какой сгенерируется тут дефолтный, но он совершенно точно должен скопировать значения полей из старого объекта в новый. Чисто теоретически он мог бы их и обнулить, но зачем, если по нормальному объектом пользоваться будет же запрещено, это будет пустая трата времени.
> Получается, в этом случае объект всё равно просто скопируется, а не будет чего-то вроде передачи владения новой переменной?
У тебя обычные сраные инты, нет тут никакого владения, владеть нечем. Владение появится когда у тебя будут какие нибудь указатели которые надо почистить в деструкторе, сокеты и тому подобное.
Понял, спасибо
>Они грузят сразу весь файл в оперативу или там сама по себе реализована работа с кусками размера n?
Зависит от реализации.
Там просто системный вызов который работает хуй знает как. Может поискать, но вряд ли есть какая то строго единая реализация
Пацанам из Epic Games расскажи, а то они не в курсе, пускай срочно выпиливают GC из движка
За FFP нужно пиздить.
Пок пок пок... Надо нарисовать 4 палки... Подключаю glew, glut, выбираю ARB, 50 строк кода.. Еще десяточку... Запускаю... Почему экран синий?
Хотя не, лучше сгенерить кастомный загрузчик через glad. Ну и там VAO, VBO, дескрипторы в классы завернуть. Ну чтоб не стейт и не вонючий C-style. RAII там, все дела.
Белые люди пишут под вулкан нампрпврславном си. А раст доя арабов-индусов.
Да, я после отправки понял, что обосрался. Имел ввиду другое, но из-за своей лени и косноязычия было лень подробно свои мысли расписывать, поэтому просто забей.
А что тебя смущает? То что там 3 строчки кода развернуты в 20? Или то что вместо цикла там find_map с диапазоном и лямбдой? Или то что коды ошибок через паттерн матчинг и unwrap обрабатываются? Это всего лишь немного функциональщины, в расте вообще норма писать цепочки вызовов методов столбиком и лямбды в них, даже вместо заполнения структур предпочитаются билдеры. Для читаемости наоборот лучше такое - код после "=" очевидно отвечает за создание объекта, паттерн матчинг на вызовах функций спасает от кучи ифов, которые сливаются в кашу и могут быть раскиданы по коду. Да, уровней вложения много и надо форматировать код чтоб не получалась лапша, но зато код логически скомпонован. По крайней мере нет хуйни как в крестах, когда в простыне кода приходится скролить вверх-вниз, чтоб понять как оно связано между собой, ведь в пределах файла с реализацией класса часто буквально в процедурном стиле на 500+ строк всё написано.
Я вообще джава-боярин и для меня даже код на педалях кажется малочитаемым, что уж говорить о том, что ты там серанул.
Раз ты такой умный, то тебе есть с чем сравнивать. Вот и бери то, что быстрее.
Для дерева, в котором 2^32 значения, глубина рекурсии будет всего лишь 32.
Это если оно сбалансированное, а в худшем случае глубина рекурсии = кол-во элементов
Поясните, кстати, нахуй нужны бинарные деревья блять??
>нахуй нужны бинарные деревья блять??
Банально синтаксические выражения парсить. Попробуй написать калькулятор с учетом приоритета вычислений и различными фукциями, тогда на практике поймешь зачем. Например, чтобы оно решало выражения вида sin(24) + cos(5)
> Это если оно сбалансированное, а в худшем случае глубина рекурсии = кол-во элементов
Так не используй несбалансированные деревья, кто тебе мешает.
> Поясните, кстати, нахуй нужны бинарные деревья блять??
Ну как минимум для написания упорядоченных сетов и мап.
>>465428
Ладно, я тупанул, походу.
Я не мог понять, чем обычный бинарный поиск хуже дерева. Потом дошло, что поиск за O(logn), а вот удаление и добавление новых элементов за O(n), потому что сдвигаем элементы в массиве/векторе. Сначала показалось, что тоже должно быть за O(logn). В дереве добавление и удаление тоже за O(logn). Если балансировка дерева это тоже O(logn), то, в принципе, всё понятно.
Осталось разобраться с балансировкой
> Осталось разобраться с балансировкой
И это самое сложное, что есть в деревьях. Есть дохуя видов балансировки: AVL-деревья, красно-чёрные деревья (юзаются в STL), B-деревья и B+-деревья (юзаются в базах данных для индексов) и другие.
Бывает, школьник ты эдакий.
https://hh.ru/vacancy/69632450?from=vacancy_search_list&hhtmFrom=vacancy_search_list&query=C%20%20
> международная компания-разработчик продуктов
Какой смысл писать такое в 2к22м? Или имеются в виду народы белоруссии и казакстана?
Есть прога, инжектит указанную dll в другую(не читы, честное слово, попросили помочь просто). С этим всё ок, но есть необходимость аутпут этой проги получить, когда в неё загружена библиотека.
Сталкивался кто-нибудь? Гугл находит пару-тройку способов достать аутпут другого процесса, но везде(даже если в строке поиска обратное) рассматривается ситуация с дочерним процессом, когда ему STD_OUTPUT_HANDLE передаётся родительский.
Но у меня процесс не дочерний, по условию запускать его самому нет варианта. Как с этим справляться?
Пробовал запустить на стороне процесса через CreateRemoteThread GetStdHandle, чтобы получить handle устройства вывода, но этот вариант тоже не сработал - ни через ReadFile, ни через пайпы, ни через SetStdHandle.
Поясните в чём прикол, написал говнокод который не должен работать, а он сука работает, но если хоть что-то дописать в конце функции он перестаёт работать.. Короче должно выдавать 31, если раскоментить cout тогда уже ничего не работает, Подскажите почему так.
Конпеляптор шалит оптимизацией.
Выставь во флагах компиляции, например, -O1 - будет бесконечная рекурсия.
Ну или просто другой компилятор попробуй.
>А как ещё можно это реализовать?
Тут все ок, это ссылка на указатель. Только не понятно, зачем писать !&*ptr, если проще и безопаснее !ptr
А, ну тут я обосрался да, потом уже поправил.
Небось UB.
Лол. Чёт я забыл что он не может пересоздавать адреса.
Короче вот мой новый говнокод обоссыте, может есть идеи как это проще можно реализовать?
https://onlinegdb.com/mmadu_HQo
Также интересно как проверить утечку памяти, где посмотреть хорошо я жопу подтёр или размазал по булкам?
valgrind
Как называется эта болезнь? Почему они все пытаются вместо идеального C синтаксиса высрать это нечитаемое говно, которое ещё и занимает больше места?
Зачем снимать штаны и садиться на унитаз, перед тем как срать, если мамочка (GC) всё сама уберёт и постирает одежду?
людям заняться нечем
Ты не понимаешь, ноука докозала, что читабельность кода увеличилась на 0.1%
Кал. Надо упрощать синтаксис, а не усложнять. Хороший дизайн языка - это когда одна и та же конструкция может решать много разных задач. А когда под каждую задачу пилят новую конструкцию языка - это соевые костыли. Например, как шаблоны высрали в виде языка в языке, так и тут такое же нечитаемое говно.
Какой нахер синтаксический сахар в крестах? Эти уебки все никак не могут инициализацию полей в структурках сделать, тогда как в си уже лет 10 есть.
Дедуля, попроси старших динозавров на проекте, чтобы все перешли на c++20. Там есть инициализация типа
ClassName obj = ClassName { .x = 1, .y = 2}
Правда, надо, чтобы поля были в том же порядке, как и в структуре.
Эт я не сдержался с тупости вопроса. Извиняюсь. По факту перед скобками и тип писать не нужно.
Так это в каком-то виде даже до 11 стандарта было.
Просто, как я понимаю, там вызывался дефолтный конструктор и надо было все поля указывать.
Бтв не хватает порой такой штуки, когда ты можешь явно указать, в какой аргумент функции что передаёшь.
То есть что-то вроде
void proc(int x = 0, int y = 5, int z = 10) {...}
proc(z=> 20);
То есть как в питоне. Да, было бы неплохо.
Хочется освежить в памяти (или узнать) вещи которые были с 17 стандарта и по текущий момент.
Есть какие ресурсы или блоги для этого?
>пару лет назад выпал из языка
Рожу этого хипстора представили? Он выпал из языка и потерялся.
> Правда, надо, чтобы поля были в том же порядке, как и в структуре.
В этом и есть пиздец. В сишке не нужно соблюдать порядок, внезапно. Это жутко неудобно, когда у тебя там 20 полей, как я должен догадаться в каком они порядке? В итоге сначала пишешь, потом по вылезшим ошибкам переставляешь их.
Сенькс
Естественно. new - выделит память в куче (если не placement, тогда вообще нихера выделять не будет), остальное на стеке.
У меня есть .so файл, который я линкую. А откуда доставать хедеры? Из сорцов либы?
Всегда интересно наблюдать, как изучавшие программирование с питона и джавы открывают для себя новую модель памяти.
Представь что всю жизнь ты знал о стеке только то что он переполняется при рекурсии а рекурсия это, как известно, просто мем башорга. А тут оказывается что где-то люди сохраняют туда данные разного размера. Понятие размера структуры тоже требует переосмысления если теперь поля это не ссылки в кучу а реальные объекты.
Начинал программирование с карт для варкрафта 3 https://xgm.guru/p/wc3/jassintroduction
Всё остальное в последствии воспринимал как само собой разумеющееся
Аналогично, только начинал с программирования мышкой в gamemaker 8.
Культурный шок испытал только при встрече с функциональщиной, когда узнал что вместо добавления элемента в список создается новый список.
Кстати, в стандарте вообще упоминаются стек и куча, или от них абстрагируются? Есть гарантия, что глобальные переменные - в дата сегменте, локальные - в стеке, а созданные через new объекты - в куче? Или зависит от компилятора?
>стек и куча
Нет, есть только storage категории. На самом деле раньше делали компы вообще без стека.
Потому, что так проще. До появления всякого пидорства вроде потоков стек мог расти, пока не упирался во что-то еще.
Так а хуле на стек не выделить терабайт виртуальной и пусть растет. Что поток должен знать о нем кроме указателя на верх?
> Нет, есть только storage категории. На самом деле раньше делали компы вообще без стека.
Может все таки без кучи? Без стека чё то делать анрил, весь вызов функций на нем работает.
Нет терабайта виртуальной, поридж, это не бесплатно даже на amd64. Каждому потоку резервируют адреса от А до Б. Если процесс полез в невыделенную память между А и Б, ядро наращивает стек. Если полез в другие адреса, его убивают.
Так нету стека или все таки нет аппаратного стека, то есть синтаксического сахарка для него? Ты уж определись
std::atomic<int> value;
value.store(1, std::memory_order_relaxed);
то, что значение value после исполнения этой операции будет видно во всех других тредах? Или memory_order_relaxed гарантирует только то, что это value запишется корректно (а когда и где его обновлённое значение будет видно - неизвестно)?
Я синхронизовал треды атомиками чреез сторе, без мемори ордера, и ваит и нотифи, если нужно было. Все работало ожидаемо.
замена типа 'char1' на 'char2', кроме '\n'
ifstream file_input(in_path,ios_base::in|ios_base::binary);
ofstream file_output(out_path, ios_base::out | ios_base::binary);
if (!file_input.is_open()) { return 1; }
if (!file_output.is_open()) { return 1; }
char k;
while (file_input) {
file_input.get(k);
if (file_input) {
if (k == '\n') { k = ' '; }
file_output.put(k);
}
}
ДА КАК БЛЯТЬ ИЗБАВИТЬСЯ ОТ ЭТИХ ЕБУЧИХ \n
спасибо, но не заработало(
ifstream file_input(in_path,ios_base::in|ios_base::binary);
ofstream file_output(out_path, ios_base::out | ios_base::binary);
if (!file_input.is_open()) { return 1; }
if (!file_output.is_open()) { return 1; }
char k;
while (file_input) {
file_input.get(k);
if (file_input) {
if (k == '\r\n') { k = ' '; }
file_output.put(k);
}
}
далеко не первый час бьюсь над этой проблемой, не могу найти ответ. сейчас надо идти, вернусь часа через 3-4, кодировка ASCII или UTF-8(любая годится), если у тебя будет решение - буду чрезвычайно благодарен, если нет, но и за то что есть ещё раз спасибо
Хуёво попробовал, ибо говнокод с пикрила, внезапно, работает.
Хочу написать обобщенный класс, разделил на .h и .cpp (на 1-2 скринах пример определения и реализации одного из методов)
При вызове методов в main'е кидает ошибку компиляции (скрин 3 - CMakeLists, скрин 4 - ошибки)
У тебя функция приват и статик.
Она может быть статик, только если класс можно использовать без инициализации экземляра.
А вот приватнкю ты за пределами класса никак не вызовешь.
Мотоды которые ты хочешь вызывать из вне должны быть пабликами, так или иначе.
Ещё бы. Нельзя всю эту шаблонную поебень в цепепе переносить, ее не существует, конпелятор генерит конкретизацию по требованию.
Или явно затребуй экземпляр нужного шаблона нужного тебе типа в хедере.
Ну, можно налодить кучу объектов из одного куска памяти, а потом грохнуть разом кусок целиком. Дефолтный должен быть универсальным, он не будет знать как ты его намереваешься использовать.
Есть такая тема, необходимая в определенного рода по, что память заказывается вообще только один раз, в начале инициализации, почти вся физ память, например. А по ходу исполнения и по мере необходимости выделяется память из уже взятой из системы. Так быстрее.
Не обязательно быстрее. Просто позволяет добиться того что ты хочешь от аллокатора - гарантированное время аллокации, например.
Выделить 1кк объектов по 3 байта и уложится в 3мб.
я не умею смотреть сырцы, я очень долго в них разбираюсь.
Ну я так посидел подумал, там типо есть максимальное и минимальное количество линий умещающееся по осям, допустим минимальное количество линий 4, максимальное 6, если мы масштабируем график то, проверяем, после масштабирования у нас количество значений кратным допустим 10(100, 110, 120, 130, к примеру), меньше чем 4, значит уменьшаем кратность до такого количества, что бы у нас было не больше 5 линий на экран, и не меньше 6. Тоесть теперь будет не кратность 10, а кратность 7.5, или кратность 5. Ну надо подумать еще над формулой
Я и не претендую, мне просто в кайф, что смог ёбнуть шаблоны и передачу функции как параметра, я на cpp толком не писал с универа.
подскажите, как получить имена локальных дисков и их буквы на компьютере? То есть, если у меня есть 3 диска C, D и E, и например у E имя папки E_folder_name, то как мне их все получить?
С помощью filesystem? Что в path нужно писать?
# include <windows.h>
TCHAR szBuffer[512];
GetLogicalDriveStrings(512, szBuffer);
Раз уж ты оперируешь понятиями дисков, можешь забить на кроссплатформенность.
то есть букву диска, а мне нужно получить имя диска, то есть если у диска D название D_disk_name, мне нужно получить кроме буквы D ещё и имя D_disk_name
Есть другие функции:
GetVolumeInformationA("C:\\", szVolumeName, NULL, NULL, NULL, NULL, 0);
GetVolumeInformationW(L"C:\\", szVolumeName, NULL, NULL, NULL, NULL, 0);
Для GetVolumeInformationA - LPSTR, для GetVolumeInformationW - LPWSTR.
См. документацию: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getvolumeinformationw
double x = (joneElementValuescaleX) + offsetXValueLeftscaleX;
x = trunc(round(x));
Вот такая формула вычисления позиции x для элемента массива
offsetXValueLeft - это разность между ближайшей точкой слева от начала виджета. Типо позиция начала виджета - ближайшая точка слева. И вот тут либо такую формулу использовать и и мириться с тем что некоторые точки будут шире, а не которые уже. Либо использовать формулу такую:
double offsetXValueLeft = (startVectorValueWidget - startValueWidget)scaleX;
offsetXValueLeft = trunc(round(offsetXValueLeft));
double valueWidth = oneElementValue scaleX;
valueWidth = trunc(round(valueWidth));
double x = (jvalueWidth) + offsetXValueLeft;
Но тогда появляются места где при увеличении Х не изменяется положение графика
Когда решу кончено эту задачу
возможно ли по итератору обратиться к полю контейнера pair (итератор указывает на pair)?
Паир это всего 2 чего то.
Итератор по сути дает тебе элемент массива. Если у тебя итерируемый массив пэиров, то да.
Итераторы это же просто интерфейс. Ты можешь написать свой итератор который будет принимать pair и выдавать из него значения. Хз зачем это нужно правда.
Вот перегружаю я операторы, чтобы работали с моей структурой и все хорошо, пока структура - левая, тоесть
"T operator...(T t)" - ок
а вот как сделать чтобы T было справа, например "1/T"
хз хз.
Во. Век живи - век учись. Спасибо, анон.
Вопрос в квалификации упорстве и времени. Строить с нуля все велосипеды, начиная от реализации протоколов связи до поднятия СУБД задача долгая и нудная.
Ещё более нудная (не менее сложная, хотя кому как) это обратный реверс. Особенно, если ты хочешь создать сервер, реверся клиент.
> Были ли пиратки?
Были. Чаще всего пиздился сервер у издателя, по этому версии всегда отставали. Потом, когда интерес не охолодевал, некоторые ебанутые переписывали сервер.
Короче, сейчас будет даже не легче, а полезнее взять готовый движок ал-я UE4 и запилить на нём ремейк или вообще свою игру.
Но это всё разные пути, но они все требуют нехилой ВОЛИ для их реализации.
Ты не шаришь. PTS это и есть сворованный сервер, но пиратки были до того как его украли. Короче ты не шаришь.
*либы
БД - не мамаша анона, к ней не может прийти кто угодно и выебать.
Какая у тебя база? Оракловая, mysql, постгре?
Вот и гугли библиотеку для своей конкретной базы, которая позволит тебе подключаться к ней.
Например для Oracle это OCCI называется.
strikes from behind
Лабы.
784x960, 0:37
Хуй знает. Я с другой сфере ИТ сижу, но мне похуй на мобилизацию. Ссыкуны возможно и разбежались как тараканы на свету.
Ну да. Эксперты по всем вопросам в школе, разработчики laba02.cpp на парах, байтослесари на заводе, остальные в окопе.
Пакетный манагер если для себя/опенсорц, или же оно упаковано в сабмодули и торчит в репе если разработка коммерческая.
conan, vcpkg или используется пакетный менеджер линукса
В плюсах тоже есть менеджеры пакетов, самые популярные - Vcpkg и Conan. Но это в первую очередь для винды, на линуксах либы обычно ставят из репозиториев дистрибутива. Например, есть либа SFML, и для неё в репозиториях может быть условный sfml-dev, ты пишешь apt-get install sfml-dev и получаешь хедеры/бинари либы вместе со всеми зависимостями. остаётся заинклудить и указать компилятору путь к системному каталогу, куда ставятся все либы. Часто так делают и на скриптовых языках, вместо pip могут, к примеру, поставить либы через тот же apt-get.
Ну и в плюсах не принято юзать по библиотеке на каждую мелкую фичу, и либы обычно самодостаточны или требуют совсем немного зависимостей. Нет такого, чтобы для использования одной либы требовалось поставить ещё 20 пакетов и выкачать полгигабайта зависимостей. Так что не такая и проблема скачать либы с сайтов разработчиков.
>на линуксах либы обычно ставят из репозиториев дистрибутива.
А как тогда контролируется одинаковость зависимостей у всех разрабов проекта? Не писать же каждому челу в команде типа Славик, установи либу вот этой командой: sudo apt get ...? Обычно есть файл с декларацией зависимостей (requirements.txt, package.json), который потом пакетным менеджером обрабатывается. А если линухоидный манагер пакетов использовать, то как это реализовать? Бащ скриптом? CMake про это?
> Бащ скриптом? CMake про это?
Да. Только они занимаются именно сборкой, а не скачиванием зависимостей, и есть множество нестандартизированных костылей, чтобы научить CMake управлять пакетами. В каждом проекте ебутся как хотят, для каждой либы своя специфичная ебля, потому что есть 100500 способов их подключения, будь то vcpkg/conan, bash-скрипт с несколькими командами apt-get install пакет_нейм=версия, субмодули git, архив с зависимостями на корпоративном сервере, хранение зависимостей в Git, либо просто файлик с инструкцией, откуда что качать и куда распаковывать (это как у новичков в линуксе, которые гуглят "как установить программу X?" и вместо простых инструкций об установке из репозиториев получают ответы "запустите ./configure && make && make install, а если будут ошибки, качайте зависимости с сайтов и с ними ебитесь так же").
Да, в 2022 звучит как пиздец, это пиздец и есть. Хорошо только то, что зависимостей обычно немного.
Если вкратце, то как при работе с докером - пишется Makefile, в котором прописаны все действия для создания образа (считай скрипт на баше с вызовом apt-get, ldconfig, make, ./configure и прочими или батник для win cmd).
CMake в lin и win не встроен, поэтому на нём обычно описывают сборку проекта из исходников. При этом пути к внешним ресурсам выносят в виде переменных, которые ему укажет тот, кто будет собирать.
> пишется Makefile, в котором прописаны все действия для создания образа (считай скрипт на баше с вызовом apt-get, ldconfig, make, ./configure и прочими или батник для win cmd)
Ты же не знаешь, о чем говоришь, да?
О том, что в Makefile не пишется большая часть из тех команд, что ты написал.
Особенно проиграл с make и ./configure
Выпей валерьяновички, буйный ты какой то
Так я про докер написал. Называется он там Dockerfile. Я не имел в виду CMakeLists.txt или Makefile для утилиты make/nmake.
В итоге три часа ебался, чуть не дропнул нахуй, каким-то чудом завелось.
А что ты ещё хочешь? Если не понимаешь как работает графон, то нахуй лезешь?
С прочтения книги дракона или хотя бы брошюрки Вирта
> - С чего начать написание своего языка программирования?
> - С прочтения вот этих двух книжек, направленных на изучение компиляторостроения
> - Чтобы что?
Шизло ебаное, съеби из треда нахуй.
Нет, иди нахуй со своим вебом.
Очевидно с описания грамматики.
Напиши бэк тогда, чтоб из браузера к нему коннектиться и смотреть. Многопоточка, транскодинг, и чтоб на GPU крутилось. Захуячь ещё туда рестапи и вёбсервачок с ui на жопаскрипте. А бэк пусть стартует от папки какой-нибудь с онеме. Так по чуть-чуть и нетфликс свой скрафтишь.
Cope
>сидел красивый сплеш с авторизацией
Решил сделать проект.
@
Сделал красивую хуйню.
@
Тыкаешься в эту хуйню целыми сутками.
@
За год существования проекта в нем только 100 строк с реализацией красивой хуйнюшки.
@
Заходишь чтобы потыкать в эту хуйнюшку и посмотреть как хорошо она работает.
Подскажите, пожалуйста, что здесь делают фигурные скобки. Какую важную функцию они выполняют, потому что без них код либо не запускается, либо выдает в конце полную неразбериху.
int sum[CNT] = {0};
https://0bin.net/paste/Q9BDz14l#nSOc4nmoxZwjJ8IEHGsn1Gs-Qgq4Y55IYY6MXopsWSx
ой блять, я думал, ты про квадратные скобки.
Фигурные фактически инициализируют массив нулями, иначе там будет мусор.
Спасибо, вроде как понял
ну, = {} в этом контексте делает абсолютно тоже самое да.
Запасясь должным количеством спиртного.
ISO C запретил.
Ты про статические функции из сишки или про статические функции класса?
К памяти это не относится в любом случае. static перед функцией - это просто аналог private, чтобы функцию не было видно в других единицах трансляции. А в статические функции класса почти как обычные функции, но относящиеся каким-то образом к классу и не имеющие ссылки на объект (то есть this не работает).
Я про второе. Вот у меня, допустим есть функция
static SomeType* Function() {};
Ты имеешь ввиду, что, мне необязательно создавать экземпляр класса, чтобы вызывать эту функцию?
Да, просто пишешь ClassName::Function()
Статические функции это из сишки, в крестах их обычно кладут в безымянные неймспейсы.
В эти функции не передается скрытый аргумент this. Вот и все.
Ладно, я настолько заебался разбираться, что написал свой варик функции с теми же, блеать, данными, и он, блеать, работает. Так что я вобще не ебу, что с кодом выше не так. Если кто понял, в ччм там косяк - дайте знать
Чё-то я не догоняю...
У тебя строка которую получает в atoi() это "health: 32"
Что по-твоему эта функция должна делать со словом "health:" ?
Блет, сорь, не прочитал пикчу. Понял, что ты иммешь ввиду.
Нет, ты себе шизу какую-то придумал.
Нужен. Не нужны шарпы, электрон и веб.
Ну если ты поверх него игровой движок напишешь то почему бы и нет, но зачем?
Qt 3D
>Ну кроме гуи
Работа с последовательными портами, nfc, спутниковое позиционирование, преобразование кодировок текста, работа с изображениями, с шинами данных машин и некоторых летательных аппаратов, конечные аппараты искаропки и т.д. И все это может собираться например под эмбеддед или андроид.
Вощем это фреймворк общего назначения, для киберпанка тебе нужен специализированный игровой движок, хотя кют в 3д тоже может
Позиционировал свой хуй тебе за щеку, проверяй
Оборудования с gps датчиком.
Хуле тебе отвечать. Всё уже расписали нормально, а ты решил доебаться.
Вот и позиционируй писюны за щекой теперь.
Что то тип такого?:
template <typename T> void foo();
template <> void foo<int | double | float>();
Чел, концепты используй.
Просто не передавай некорректные типы, один хуй получишь ошибку компиляции.
Можешь добавить в тело проверку, если c++ < 20:
static_assert(std::is_arithmetic<T>());
Или добавь концепт после tempate<class T>, если с++ >=20:
requires std::is_arithmetic<T>
void foo(initializer_list<int> il);
и
void foo(const initializer_list<int>& ilr);
Я так понимаю, если вызвать foo({1, 2, 3}), сначала будет создан временный объект, соответствующий аргументу, и далее, в первом случае, этот объект будет скопирован, и мы получим еще один объект, соответствующий il, а во втором случае копирования не произойдёт, и будет создан только один временный объект. Если это так, то почему обычно используют первый вариант, а не второй?
Если в первом случае не происходит копирования, то почему? Разве это не copy initialization? Почему этот
class A {
public:
A(int) { cout << "A"; }
};
int main() {
A a = A(2);
}
код выводит "A", а не "AA"?
Стандарт гарантирует.
class A {
public:
A(int) { cout << "A\n"; }
A(const A& a) { cout << "a\n";}
};
int main() {
A a = A(5);
}
Этот код выводит "A", а не "Aa". Я так понял, копирующий конструктор не вызывается для временных объектов, и A a = A(5); это то же, что A a(5);
inline static auto WStringToUTF8() -> std::string
Но у меня работает само по себе и без этого, все из-за того, что я сижу на более новой версии c++?
Блядь, вот для кого лекции там в университетах читают, стандарты всякие описывают.
Теперь сделай
A a;
a = a(5);
И опиши свои ощущения.
https://github.com/mamkad/Network/tree/main/Socket
Чо можно подправить?
Пиздос каша в хедере. И сам код как будто на сишке написан. Алсо, от комментариев блевать хочется, должны быть нормальные имена методов, а не пояснения в комментариях что это за говно. Если bool возвращаешь - в имени должен быть вопрос.
https://youtu.be/-9SEfavF9oA
Не выёбывайся плиз.
Да ну блять, в шарпе и жабе в дженериках есть такие механизмы, а в крестовые шаблоны до сих пор не завезли.
https://pastebin.com/qeH2MDfc
Пикрил 1, если не открывается ссылка.
Прикол в том, чтоб можно было сделать, например
ThreadSafeObject<std::set<std::string>> mySet;
И потом можно было делать операции как под мьютексом
mySet.withLock()->insert(...);
Так и без
mySet->insert(...);
Но я не уверен, какой будет лайфтайм моего прокси объекта. Для эксперимента запустил хуйню на пике 2, и вроде все ок, но гарантировано ли такое поведение? В смысле, чтоб деструктор прокси класса вызывался после того, как выполнено выражение с return value его метода.
Ой блять, ну, я, как водится, обосрался с операторами.
Вот фикс: https://pastebin.com/uAXdXW4p
Это каждый второй изобретает. Погугли по «C++ lock wrapper»
https://stroustrup.com/wrapper.pdf
Потому что доку читать надо блять
> Accessing a nonexistent element through this operator is undefined behavior.
Алсо вон тут написано
https://cplusplus.com/reference/stdexcept/out_of_range/
>It is a standard exception that can be thrown by programs. Some components of the standard library, such as vector, deque, string and bitset also throw exceptions of this type to signal arguments out of range.
Хули ты меня наябываешь.
Ну у него так undefined behavior проявляется. Может выкинется, может не выкинется.
От компилятора зависит?
Типа есть g++, clang++, MSVC. В каких то ошибка проявится, в каких то нет?
Шиз, ну да, вектор его бросает. Только не в operator[]
>A program can be said to contain unspecified behavior when its source code may produce an executable that exhibits different behavior when compiled on a different compiler, or on the same compiler with different settings, or indeed in different parts of the same executable.
Охуительные истории конечно. Ну спасибо за помощь.
Из оп поста книжка за 2014, Б. Страуструп. На самом деле у меня глаза в жопе оказались, там внизу страницы сноска, что надо использовать их специальный файл с библиотаками, разработаный спецом для этой книжки и тогда все работает всегда. В любом случае всем спасибо за помощь.
Это вопрос не к Страуструпу, а к переводчикам, которые листинги херачили в книгу.
Стоит только заглянуть на референс и будет видно, что operator[] не проверяет границы - и, следовательно, не должен выбрасывать исключение согласно стандарту, а метод at кокрастаке выбросит тебе out_of_range.
Хотя про переводчиков я еблан, да, вопрос к этой самой либе.
Уууу сука как охуенно! Уже в 100500 местах применил эту обертку, и убрал нахуй все голые мьютексы из стейта классов. И заодно с ними утилизированы двухстрочные методы-паразиты, которые всего лишь заменяют делают операцию под lock_guard-ом. Короче, никто не узнает код, когда моя ветка в мастер попадет. Я бог рефакторинга.
А итерировать как ты по своему
ThreadSafeObject<std::set<std::string>>
собрался?
Есть вероятность что если тебе нужно лочить вызовы методов на уровне std::set, то тут что-то не так в архитектуре
Нормально собрался. Там сначала кое-какая хуйня происходит во много потоков, и сеты/мапы аккумулируются инсертами/эмплейсами, а потом я без лока захожу. Ну, иногда чтение тоже с локом, когда одновременно идут и пишущие, и читающие операции, но у меня нет такого UB, что управляющий поток запушит что-то раньше управляемого или позже, и от этого поведение второго потока изменится. Там оно скорее сделано для того, чтоб флашить только один раз кое-где.
Сори за скомканное объяснение, я просто хохол придерживаюсь привычки не разглашать лишнее на дваче, и вот-такими-вот местоимениями затыкаю потенциальные бизнес-детали.
Ну и да, у меня ж для таких случаев мьютекс торчит наружу. Его можно руками засунуть в локгард и хоть десять операций атомарно сделать. Вот финальная версия.
https://pastebin.com/DZB8nqaT
Ладно, похуй, я не жлоб и вообще адепт Столлмана. Немножко.
Сам охуел, но есть еще конторы здорового человека, которые для высоконагруженной части бэкенда используют C++, а помимо крестов - Common Lisp. Это просто идеальное сочетание, как по мне. Тупо шах и мат говноедам.
Ебать, это что за контора мечты такая? Странно, что бизнес деятельность, а не какая нибудь техническая работа.
Бэкапим данные всяких организаций, которые юзают общеизвестные облачные сервисы для работы. С возможностью рестора туда же. Например, office365. Через API майкрософта выкачиваем все на свои датацентры от админа клиентской организации, и через майкрософтовское же API ресторим что-то обратно, если потребуется.
Вот этой инфы в описании вакансии не было, так что боюсь сообщать инфу. Не из открытых источников, все таки. Ничего личного, при капитализме живем просто. Эх, поскорее бы коммунизм.
Ладно похуй. LISP на отдельном серваке ранится. И шлет реквесты на сервак с плюсами.
> сам код будто на сишке написан
И как это исправить? Убрать вызовы Си функций из if-ов? Или из-за стиля кода?
typedef struct example { ... } example;
Пришел к выводу, что в C++ вообще похуй, есть тайпдеф или нет тайпдефа - т.к. неявно все равно тайпдеф есть, а в C разница только в том, что структура пишется в пространство имен тегов, а тайпдеф пишет в ПИ идентефикаторов. Я правильно все понял? Есть что-то, что я упустил?
Кресты тебе не сишка.
Конечно нет.
Си стиль это когда футкции. Нету обьектов содержащих информацию. Локальные переменные и что угодно прдается в функции.
А с++ стиль это классы. Экземпляры классов вполне могут и сами хранить какую то инфу, а все ыкнкции запихнуты внутрь, пусть дпже это и си функции, куда же без них.
Си стиль не значит плохо или хорошо. Пиши как удобнее.
Некоторые вот вообще на чистом си пишут, и ничего.
Твой опыт - он отрицательный. Проще обучить кодить с нуля, чем выправлять мозг программисту на С в сторону ООП и modern c++. В Java тебе ещё меньше обрадуются. Там выше по треду чел сокет обёртывал - вот прям видно, что одним полушарием продолжает на сишке писать, а другим пытается впихнуть исключения, STL и то, что вчера в книжке про сдвиг прочитал. Тот чел - это ты после 2 месяцев "изучения основ".
В принципе ты дашь подливы по обоим направлениям, так что будь спокоен. Пробуй и там и там, терять тебе всё равно нечего.
Функционально программа должна обеспечивать требования тз. В каком стиле она написана никого не ебет.
Ясное дело на около си ему больше кода писать придется, но работать оно может и не хуже современных плюсов.
че вы так от си рветесь
Ну я не совсем формо-гнездовой еще, чтобы Си-шка оставила сильный отпечаток на мне. Я и на CLispe некоторые вещи писал и Guile в качестве встраиваемого языка для плагинов использовал, так что с пониманием новых концепций не все так плохо. Вопрос в другом, у меня времени не так много, чтобы все сразу проьовать, поэтому нужно сделать выбор, либо плюсы точеные, либо жаба дроченая. На жабе как-то попроще с поиском работы, судя по хх.ру, но на плюсах более интересная деятельность, собственно, меня к ним и тянет. Вы бы что выбрали?
>Функционально программа должна обеспечивать требования тз.
>В каком стиле она написана никого не ебет.
Ты из НИИ капчуешь или с дивана вкатился?
>на CLispe некоторые вещи писал
>новых концепций
Первый выпускапрель 1987
Последняя версия 2.49 (7 июля 2010)
>времени не так много
>Вы бы что выбрали?
Java. Она меньше и знания предметки (математики, ос, железа) или профильного образования не нужно. Кровавый энтерпрайз он везде +/- одинаковый.
>Первый выпускапрель 1987
>Последняя версия 2.49 (7 июля 2010)
И? Ты в курсе, что языкостроение застряло где-то в 90-00 годах? Все "новые" концепции, которые добавляют в современные популярные язычки, зачастую уже использовались в других, менее известных, языках сто лет назад.
мимо
И в этих "менее известных" языках было несколько удачных концепций совместно с десятками неудачных. В итоге получалось, что в 20% случаев код был хорош и в 80% - очень не очень.
Алсо с тех пор и железо драматически поменялось и отношение к коду как к продукту.
Да ему сначала собес бы пройти. Он там c-style cast с malloc/free зарядит и сразу на пересдачу отправится. На Java хоть такой возможности нету.
Его постоянно будут преследовать флэшбэки, потому что c++ позволяет писать на c. Глобальные переменные, статические функции, макросы, с-style массивы, с-style касты, с-style enum, c-style структуры, c-style строки, работа с памятью, ввод/вывод. Это лишь малый перечень того, что нужно переосмыслить и забыть.
Ещё нужна функциональщина. Curriyng, композиция функций, паттерн-матчинг, монады, нормальные лямбды. Вот тогда заживём.
> Глобальные переменные, статические функции, макросы, с-style массивы, с-style касты, с-style enum, c-style структуры, c-style строки, работа с памятью, ввод/вывод
Почти всё из этого переучивается за 1 вечер. Мб ты реально про каких-то проперженных дедков из НИИ пишешь, которые уже слюну пускают.
Бтв что не так с си стайлом? Интересуюсь как нюфак.
Что не отменяет того что последней новой идеей был пролог, а с тех пор в основном меняют один нескучный синтаксис на другой.
Алсо
>драматически поменялось
в приличном обществе за такие выражения принято в рот срать
не нужна
Большую часть из перечисленного, если не всё, можно реализовать самостоятельно. А что с лямбдами не так?
>что не так с си стайлом
В нём получается много закладок, ведущих к пиздецома, так как меньше контроля за происходящим от компилятора.
>Это самоирония?
Так-то богатые люди - самые большие содомиты на Земле, поэтому срать в рот, в каком-то смысле, один из признаков приличного общества.
Конечно, а ты е знал, что двач - борда для успешных людей? Здесь какждый первый зарабатывает 300кк/ннсек и разбирается во всех сферах жизни.
>контроля за происходящим от компилятора
Так это минус.
Сначала дрочат на агрессивную оптимизацию, потом ахуевают от чудес в выполнии
надо было просто добавить автодереференсинг к указателям
Какая ещё оптимизация, чел.
Я про подстановки матрасов, касты констов в неконсты, касты со сдвигом в нетуда, неупорядоченное создание глобалов, перемешивание пространств имён и прочее c-style говнецо.
В компиляторе от майков получается один выход, в g++ - другой. Кто прав всё-таки?
Сам принцип пойми почему это UB.
Что посоветуете, аноны? В шапке нихуя нету, тутор на сайте Майков видел, но он какой-то сжатый, что-ли. Подчеркну, что мне чисто чтобы в азах разобраться и закрыть предмет своими силами.
Вряд ли в шараге требуют именно винапи, скорее всего там что то типа "системное программирование". Забей на это говно мамонта и делай под линукс/posix. Я делал так и никаких подводных не было, вместо дельфи использовал лазарус с фрипоцкалем, вместо цепепебилдера куте...
Это хорошая мировая практика?
Качни, мать его
Аноны это я туплю или код на хабре херовый?
Перемножение матриц
https://habr.com/ru/post/359272/
Во-первых, мне непонятно как он тут одномерный у него в коде, матрица же всегда двухмерная.
Во-вторых, почему при M,N,K = 2048 программа работает 1 цикл? С точки зрения кода она и должна работать 1 раз потому что за индексы уйдёт, но тогда код неправильный?
Мне надо 2048х2048 матрицы перемножить по заданию.
я некоторое время решал что делать:
1) написать пасту на 200 строк объясняющую в чем ты не прав
2) послать тебя нахуй
как видишь, строчек в посте явно меньше 200, так что выбор невелик
Если(прямоугольник вылетел за пределы карты) то прямоугольник_в_позицию(пределы карты)?
Может вы знаете - можно ли для QHBoxLayout задать ширину одной колонки в процентах от родительского элемента? Чтобы при изменении размера окна (и самого родителя) она бы менялась автоматически?
Бля. Так то можно и в центр поставить конечно. Тогда правда дергать будет его. Думал просто виджет как то ограничить. Только сука с фиксированным размером границы нет, а к краям не привязаться. В общем придется события мыши пересчитывать. Сука.
resize event запили. Будет тебе изменение колонки при изменении окна.
Эмм... А при чём они тут? Или ты имеешь ввиду - у родительского элемента перехватывать события resize?
Так и собирался сначала. Но думал, может можно как-то штатными методами без пердолинга.
Только штатный resize.
Все эти ваши книги и статьи полная хуйня и никому не интересно что ты там там читаешь. Тебя спросят что ты делать умеешь и если ты скажешь умею писать драйвера для линукса, тогда ты потянешь на джуна+, а так ты ничем от макаки после курсов не отличаешься
Нахуй этим говном заниматься, ты че даун, как тебе уже указали есть что то что полезнее поизучать, а это просто спизди у своих тупых одногруппников, а не будь этим самым тупым одногруппником
мне хочется бытрого вката в айти, уже прочитал три книжки по плюсам базовые, потом посмотрел вакансии и с грутью сейчас ковыряю жаваскрипт. Может я чего-то не так понял?
В плюсах привлекает некая самодостаточность,что в теории можешь всё на плюсах сам написать и сидеть довольный.
Но с другой стороны каждый раз будто тебе нужно будет велосипедить....
За то что на них пишутся интересные ёбы. Зрение, автопилоты, 3d печать и реконструкция, нейросеточки, робаты.
Правда на одних плюсах ты туда не доберёшься - нужно ещё петухон осилить и всякую матешу и предметку (хорошие плюсы дают лишь 30-40% от вката в желаемый хайтек).
Звучит классно,можно обсмотреться всякими фильмами про киборгов и на мотивации сидеть писать код
> там что то типа "системное программирование"
Оно и есть. Но там win32. Ещё, кстати, заметил что препод залил пикрил. Годно или проходняк?
> Забей на это говно мамонта и делай под линукс/posix.
Хуй там, надо на WinAPI. Курсач, наверное, тоже.
>>488203
Это в инсталяшке?
>>488816
Мне писать индивидуальные работы и, скорее всего, курсач. В своём манямирке выбросишь.
Кстати, а какой нынче дефолт для GUI на крестах в Шинде? Неужели Qt?
За абсолютную свободу действий. Я дрочу так, как хочу. Я могу отстрелить себе ногу любым способом, и даже не заметить этого.
А ещё я лютый мазохист. У крестов нет никакого тулкита. Дрочишь как хочешь.
Даже стектрейса нет искаропки.
Писать код на плюсах это как мастурбировать и бить себя током по яйцам во время этого.
Плюсы мне дали 10+кб зарплаты на руки и перекат в Цюрих (в процессе).
Идеальный баланс между скоростью написания кода и скоростью работы программы. Никакого гарбедж коллектора, jit-компиляции, миллиона ненужных сущностей и прочего кала, существующего только ради того, чтобы чуть эффективнее писать код засчет резкого понижения эффективности программы. При этом, проблемы с безопасностью, которые вменяют плюсам, решаются, насколько я могу судить, очень просто - в языке есть всё необходимое для написание безопасного кода, стоит только захотеть. Имхо, телега про небезопасность и "стрельбу в ногу" была бы справедлива, если бы речь была о C, но предъявляют это, почему-то, крестам. Ну и в чём я неправ?
Прав не до конца. На си тоже можно заебись писать. Все базоаое дерьмо гаписано внезапно на си и работает. Просто на плюсах писать удобнее.
А про небезопасность ноют овощи.
В реальности так не работает, хотя звучит хорошо. По факту как писали на сях так и будут.
На плюсах как обычно - идёшь в говнии, потом на работу "с опытом". Или через стажёрство, но так могут не только лишь все.
>Накладные расходы в рантайме
Это какие такие расходы?
>либо закос под раст
Закоз под все япы, сейчас автодереференсинг ВЕЗДЕ
> скоростью написания кода
)
> проблемы с безопасностью, которые вменяют плюсам, решаются, насколько я могу судить, очень просто
)
> в языке есть всё необходимое для написание безопасного кода, стоит только захотеть
> просто не пиши небезопасно, лол
> телега про небезопасность и "стрельбу в ногу" была бы справедлива, если бы речь была о C, но предъявляют это, почему-то, крестам.
как раз таки к плюсам это в большей степени и относится, даже больше чем к си
в плюсах адская мешанина из семантик, которые ты должен держать в голове 24\7
> > просто не пиши небезопасно, лол
И в чём проблема? Почему для написания безопасного кода обязательно превращать язык в говно?
> в плюсах адская мешанина из семантик, которые ты должен держать в голове 24\7
Это какое-то неосиляторство. Если неправильно писать код на джаве, он тоже будет выдавать неожиданные результаты. На плюсах писать код правильно чуть сложне, чем на джаве - как из этого следует, что язык небезопасный?
Про сиситемы сборки у меня пробел в знаниях, увы.
Пишу плюсы только на работе, там все собирается через bazel.
Который сам по себе тот еще монстр.
Вижуал студия, и не еби голову пердольным говном. Надо будет - выучишь.
Ну, к слову, есть разные требования к сборке, как вариант - это параметры в каком-нибудь хедере вроде версии. Студия тебя заставит это менять в коде, а через cmake можно сделать .h.in файл, который будет переменные, переданные через -D в него подставлять.
Но да, на винде студии хватает в целом за глаза.
На линуксе хз.
Хотя, конечно, можно выебнуться и собирать в qtcreator или как там это называется. Только помнится мне, когда был 17 стандарт, qt мог только в 14 - как сейчас не знаю.
>>489498
>>489506 (Del)
Cmake сам вме делает. На линукме есть креанор, слион, вскоде. Cmake в них работает абсолютно одинаково.
И в add_compile_definitions -D уже не нужно.
>И в чём проблема?
В том что это не просто
> превращать язык в говно?
В данный момент плюсы один из самых худших языков да и хуже его сделать сложно, славо богу хоть дедушки стандарты продолжают пилить
> Это какое-то неосиляторство.
Да, поэтому и говорят что даже старики из стандарта плюсы не знаю полностью, неосиляторы, хуле
ну тогда ебись сам.
вим не забудь напердолить 1488 плагинами
std::vector::emplace_back перед std::vector::push_back?
Когда и как использовать первое, а когда второе? Да, в гугле забанили.
Эм, очевидно первое сконструирует элемент уже в контейнере а второе скопирует туда имеющееся?
Очевидно, первое использовать когда лишнее копирование имеет значение и было бы неплохо его избежать, а второе когда похуй и вообще у тебя в проекте версия компилятора древнее чем цепепе11?
>На плюсах писать код правильно чуть сложне, чем на джаве
Нет. На джаве в сотни раз проще писать, чем на плюсах. Как минимум просто потому, что джава стремится делать так, чтобы действие Х можно было выполнить минимальным числом способов. В С++ все ровно наоборот: вспомнить ту же инициализацию. Нахуя ее столько? Зачем нужна перегрузка оператора запятая? И все это нужно держать в голове всегда. В жабе ты максимум где-то обосрешься с NPE, в остальном писать на ней гораздо приятнее, в том смысле, что просто берешь и хуяришь бизнес-логику, не сильно задумываясь о языке.
MAUI
Хочется попрактиковаться в написании чего-то, есть какие-нибудь блоги или сайты где были бы уроки с задачами?
Типа, вот пишем потокобезопасную очередь, тредпул и тд и тд.
Разве? Пока только первые три главы прочитал и ничего такого не было, кроме обычных листингов с примерами использования.
И всё же она зачем-то есть. Почему ?:, точку или :: перегрузить нельзя, а блядскую запятую можно?
>?:
А в чем смысл такой перегрузки?
>точку
А Зачем?
> :: перегрузить нельзя
Это оператор пространства имен
Сап, погромасч. Вопрос от ньюфага по С++. Как мне сделать символьную строку членом класса? Учебник Лафоре мне говорит, что пикрил, но мой компилятор говорит мне char a[] = "idi nahui". Хочется, чтобы каждый член класса можно было именовать, но пока получается делать это одним символом, что немного неудобно. Я уверен, что ответ есть и он на поверхности, но сам докопаться не могу.
В функции вместо char pname[] напиши const char* pname.
И лучше как можно быстрее отказаться от строк в стиле C.
Спасибо, сработало.
>И лучше как можно быстрее отказаться от строк в стиле C.
Почему? И как тогда писать? Я, если честно, вообще не шарю и чистого С никогда в глаза не видел.
Способы из Гугла не работают, хочу рабочий код
> Почему
Ну как минимум потому что и ради больших, и ради маленьких строк тебе придется постоянно долбиться в память, и делать это ручками, что чревато ошибками. Да и неудобно это просто-напросто.
> И как тогда писать
Не знаю, что там пишет твой Лафоре, но пока читай его. Если не обмолвится о std::string, то прочитай об этом сам.
Ну вот так, допустим.
https://pastebin.com/6DiA19ZT
Только
> uint16_t num = buf[0] | (buf[1] << 8);
Зависит от endianness.
Спасибо, получилось. Был раньше код просто с char buff и выдавало чушь вместо числа.
Сделал unsigned char buff и заработало. Почему так?
Чтб скнмть бкв.
Потому что побитовые операции со знаковыми это полный кринж.
Допустим, у тебя есть что-то типа
char c1 = -1; // -1 = 0xff
char c2 = -2; // -2 = 0xfe
когда ты делаешь
short s = c1 | c2 << 8;
ты ожидаешь, что там будет 0xfeff, но на самом деле там будет 0xffff
Почему так?
Потому что
short s = c1 | c2 << 8;
компилятором преобразуется в вид
short s = static_cast<short>(static_cast<int>(c1) | static_cast<int>(c2) << 8);
а static_cast<int>(c1) это не 0x000000ff, как ты бы хотел ожидать, а 0xffffffff.
Потому что в стандарте нет четкого указания размера типов.
И чтобы не обнаружить, что ты выстрелил себе в ногу в кроссплатформенном приложении, ожидая размер usigned int всегда в 4 байта и получив переполнение, ты пишешь size_t, чтобы на х64 системе это был тип в 8 байт, а на х86 - 4 байта.
Ну и всякие uint8_t, uint64_t - то же самое.
Понял, спасибо.
Ну есть например микропроцессоры где для удешевления адресация минимум 16 бит. Си/си++ просто делают char 16 бит, языки с u8 отсасывают.
Всё есть указатели, разыменовывание автоматом, как в питоне, шарпе и тды
В расте, референс это указатель + лайфтайм
В го только указатели есть, автодереференсинг
Автодереференсинг это зло. Нихуя не понятно по коду, где объект, а где ссылка на него, где копирование объекта, а где копирование указателя. Нельзя одновременно отстаивать идею написания читабельного кода и автодереференсинг в языке.
Перекад(инвалидский): >>2491360 (OP)
Перекад(инвалидский): >>2491360 (OP)
Да поздно уже, теперь дохуя вкатышей с лабами увидит тред на первой странице и будет срать там.
Ага, но сначала туда насрут 500 постов, а потом по инерции.
gitlab.com/Lipovsky/concurrency-course
> Нихуя не понятно по коду, где объект, а где ссылка на него
Дерефененсинг никак тебе в этом не помогает, ты можешь это узнать только из типа
но и тебе и не нужно знать, когда ты обращаешься к объекту, находится он под ссылкой, или под указателем
> где копирование объекта, а где копирование указателя.
Опять таки никак тебе он тут не поможет и плюсы это живой пример этого
> Нельзя одновременно отстаивать идею написания читабельного кода и автодереференсинг в языке.
Тем временем
Читаемые языки: все имеют автодереференсинг и явное копирование
плюсы сюда не входят, в си хоть явно понятно когда ты что копируешь
>можешь узнать только из типа
В питоне и шарпе даже это недоступно. Я именно об этом и говорю, что есть чёткое разграничение между ссылками/указателями и объектами, и исходя из этого понятно, что в коде происходит.
>тебе и не нужно знать, когда ты обращаешься к объекту, находится он под ссылкой, или под указателем
Да, всего лишь надо удерживать в голове все возможные сценарии: чётко понимать, что будет, если, например, вернуть объект из функции - произойдёт ли копирование? Читаемость - 10/10.
>Читаемые языки: все имеют автодереференсинг и явное копирование
Тыскозал? Или кто решает, какие языки читаемые, а какие нет?
> шарпе даже это недоступно
В шарпе есть ref-типы и value-типы. Даже разными цветами выделяются. Ничего в голове держать не надо.
>В питоне и шарпе даже это недоступно.
>узнать тип
Доступно всегда было, с пробуждением
> чётко понимать, что будет, если, например, вернуть объект из функции - произойдёт ли копирование? Читаемость - 10/10.
Автодереференс тут какое отношение имеет?
> Тыскозал? Или кто решает, какие языки читаемые, а какие нет?
Я сказал. Или у тебя плюсы неожиданно читаемым языком стали?
Даже язык главная задача которого была простота и читаемость - го, и то автодереференсинг есть
>>узнать тип
>Доступно всегда было, с пробуждением
Не тип узнать, а по коду понять, где ты работаешь с ссылкой, а где с объектом.
>Автодереференс тут какое отношение имеет?
Такое, что явное лучше неявного. Автодереференс как в питоне ухудшает читаемость кода, это факт.
>Или у тебя плюсы неожиданно читаемым языком стали?
А я и не говорил, что плюсы читаемые. Я сказал, что читаемость и автодереференс несовместимы.
Зато явный дереференс увеличивает количество ошибок, сишка и кресты тому подтверждение. И про читаемость - как при чтении кода по диагонали достоверно узнать должен ли тут быть дереференс или нет? А если должен быть, но он не стоит? Или наоборот? Кик искать будешь это говно, если там байтоёбство и компилятор не высрет ошибку типов? А вот с автодереференсом такого никогда не случится - если он должен быть, то он будет, либо ошибка компиляции.
>явный дереференс увеличивает количество ошибок, сишка и кресты тому подтверждение
Каких ошибок? Когда ты не понимаешь, как работают указатели, и пишешь неправильно? Ну извините.
>как при чтении кода по диагонали достоверно узнать должен ли тут быть дереференс или нет?
Причём тут "должен"? Есть он по факту или нет - это то, что должно моментально считываться.
>А вот с автодереференсом такого никогда не случится - если он должен быть, то он будет, либо ошибка компиляции.
Ммм, магическое мышление. Как язык за тебя решит, должен копироваться объект, или только значение указателя на него?
std::ifstream iFile("path", std::ios_base::binary)
std::uint16_t buff;
iFile.read((char*)buff, sizeof(buff))
Пидорашка-хохол ебаный, наговнокодил ты пидорас чуркастый.
>double cost
>double
Лучше нахуй выкинь любые флоат и даблы из своего кода в качестве хранения валюты/цены и т.д., т.к. математическая формула представлений чисел с плавующей точкой в 99% случаев не может правильно отобразить дробные числа.
просто используй std::string для символьных строк, вместо char[]
Дрочить вприсядку. Красноглазые пердолики как обычно под кроссплатформенностью понимают "любой пердоликс", про существование других ОС не слышали. Поэтому линкуй своё ебучее радио вручную.
Это ты про линуксоидов? Скажи мне как мне прилинковать GNU RADIO, какую команду вписать? просто что бы собрать GNU Radio нужно BOOST, а буста нет, BOOST я скачал. Там вроде ничего не надо собирать, как мне теперь добавить путь к BOOST'у в сборке GNURADIO, а патом добавить путь к GNU RADIO к GQRX
вообщем GQRX требует GNUradio, а GNUradio требует BOOST
Хотя ща дальше посмотрел, он там вроде переправил обратно, так что хуй знает, мб просто повезло но бля...
Код: https://pastebin.com/bG7vPq6z
Хммм... когда поменял selected_bit на ансигнед заработало правильно. Ладно, кажется понял сам, но тогда возникает впрос: разве мы при объявлении char selected_bit_char = 0b10000000 не указываем явно способ расположения битов в памяти? Как тогда реализовать явную передачу по битам? Только через битовые поля?
Имеешь ввиду старший?
>>Чел, читай про endianness.
Оно ведь https://translated.turbopages.org/proxy_u/en-ru.ru.524a307c-635bd856-affa70b7-74722d776562/https/en.wikipedia.org/wiki/Endianness ?
Ладно, кажется понял. Не отвечай.
я продолжаю курить эти (>>499135) уроки, и... оказалось так делать можно)))
Ладно, давайте просто вместе маленьк подумаем))) (Программирование это ведь все же про логику, и тут нужно иногда сесть и маленьк подумать) но лучше, я так понял, не надо
Вот мы имеем переменную m, являющуюся именем статического массива int m[5] = {1,2,3,4,5}, значение которой располагается в некоторой ячейке памяти A и хранит там адрес ячейки памяти B, в которой лежит значение первого элемента массива. Ок. Дальше попробуем узнать адрес ячейки памяти A, по которому лежит значение переменной m: выполняем &m и.... получаем адрес ячейки памяти B, в которой лежит значение первого элемента массива.Т.е.в ячейке B, помимо значения первого элемента массива, должен лежать еще и адрес, по которому лежит адрес первого элемента массива? Все правильно?
Как???...Почему??..В конце концов, нахуя?? ..
Адрес в этом случае в памяти не лежит, там только сам массив. Вся разница между m и &m - в типе выражения (чистая абстракция, понятная только компилятору). Первое это int[5] - массив из пяти интов, второе int (*)[5] - указатель на массив из пяти интов. При этом первое выражение ведет себя как указатель на первый элемент массива.
У вас неправильный язык программирования. Переделывайте.
> но лучше, я так понял, не надо
Если тупой, то вообще лучше не пытаться думать.
> выполняем &m и.... получаем адрес ячейки памяти B
Нет, получаем ссылку на указатель. В m лежит адрес участка памяти с интами. Скобочки в массиве - это просто сахар над указателем. Можешь делать ⚹(m + sizeof(int) ⚹ i) и получать элемент из массива.
Глупенький, ты хоть смысл вопроса то понял?
Вопрос в том, почему в крестах все указатели как указатели, а имя статического массива - указатель курильщика.
>>⚹(m + sizeof(int) ⚹ i)
А вот эту вот хуйню с адресной арифметикой ты можешь в анус себе засунуть. Она вообще не имеет отношения к делу.
Если вообще хоть немного нацелен на конструктивный диалог, а не на тупорылые высеры, то прокоментируй лушчше ответ этого (>>500843) анона, по поводу абстракции. Т.к. я так не понял, на кой хер Труп Страуса сделал именно таким образом. Что это вообще дает, кроме того, что вся стройная логика указателей пошла нахуй.
>>⚹(m + sizeof(int) ⚹ i)
Лол. Да ты ее даже неправильно написал. Че-то я не сразу обртаил внимания. Короче понятно все с тобой. Больше сюда не пиши.
Ладно, я даже тебе упрощу задачу для того, чтобы ты въехал о чем вообще шла речь. Если и после этого не дойдет, то тут уже я бессилен
> пик
Блять, ты в курсе что ссылки - это не указатели? То что ты передал указатель по ссылке не значит что он должен поменяться, указатель не l-value. С какими же даунами сижу в одном треде.
Во первых, если б ты поспокойнее пиздел, тебе бы никто не стал грубить. Во вторых, я ньюфаг, и то, что у тебя 100500 лет опыта проганья в крестах вряд ли дает тебе право разговаривать в подобном тоне. В третьих, если я правильно тебя понял:
1) Когда мы пишем int m[3]; cout <<&m то мы передаем указатель по ссылке
2) Когда мы пишем int a=0; int ⚹p = &a; cout <<&p то мы берем адрес указателя, так?
Но это все равно не дает ответ на мой вопрос. В чем профит такого различия? Почему нужно было делать различие между указателем статического массива и обычным указателем. Это же тупо создает путаницу. А плюсов такого подхода я вообще не вижу.
Чел, вот где-то выше срались про автоматическое разыменовывание указателей. Ссылка - это грубо говоря указатель с автоматическим разыменованием, который компилятор может оптимизировать нахуй. Если передаёшь ссылку куда-то, то получатель получает объект внутри ссылки. Т.е. твою m.
> Почему нужно было делать различие между указателем статического массива и обычным указателем.
Потому что их нет. Массив это и есть указатель.
int ⚹p = &a;
Вот этот p легко кастуется к массиву. Можешь сходу его использовать как p[0].
> плюсов такого подхода я вообще не вижу
Потому что это отростки от си, в крестах такое всегда рекомендуется избегать.
Короче, я так понял, по итогу тут проблема в беспределе автоматического разыменования указателей? Типа они творят что хотят и могут, грубо говоря, массив послать нахуй, а указатель в пизду, хотя и массив и указатель - одно и то же, все верно?
Я, канеш, только начинаю изучать C++ так что мнение не окончательное, но, сложилось впечатление, что весь C++ - суть не что иное, как танцы на костылях на трупе языка C
Ну мб. Я отдельно Си не курил, только слышал упоминания, что в Си, мол, так, а в крестах эдак по тому-то и тому-то (как правило тут перечисляется пара способов прострелить себе колено)
потому что в те годы тебе бы ебало сломали если бы узнали что ты динамикопарашник
можно подробнее?
Это копия, сохраненная 10 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.