Это копия, сохраненная 18 сентября 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2691676 (OP)
Ждём когда перепишут автокад на раст, жаль я этого никогда не увижу
ну я написал на вулкане рендерер который умеет простые 3д модельки показывать + примитивный свет
что дальше делать, не ебу
попробуй сделать непримитивный свет и охуеешь
Сделай физон, да с таким то коллижн детекшеном.
Попроси чат жпт
Так у кути же сигнал слоты - это колбеки повешенные на ивент систему. Насколько я понимаю.
Есть отдельно asio, есть отдельно sigslot, boost::signals2. А вот насколько легко они в кучу сваливаются - хуй знает.
Привет qt брат. Дак рисовать кнопки все равно или в qt или в ублюдских виндовс формах. С сетью дружить с boost.
>Дак рисовать кнопки все равно или в qt или в ублюдских виндовс формах.
Дык в том-то и дело, что рисование формочек в моём случае дело второстепенное, а самое интересное (и трудозатратное для меня) на стороне сервера -- взаимодействие и дизайн компонентов, чтобы можно было в более-менее вменяемые сроки модифицировать и добавлять фичи, разруливание потоков, вот это всё.
Придется подрочить буст
Даже с правильно настроенным проектом интеллиСенс может сильно тупить, особенно когда библиотека большая и очень много заголовков. Решение - поставь ReSharper, он сильно лучше работает в плане разбора исходников, да и много других полезных фич имеет.
>>749763
Qt тем и хорош, что доступный механизм по работе с сетью, ещё и гуи есть. Как сказали анонсы выше, для сети без Qt адекватнее всего использовать Boost::ASIO и основанные на нем Boost::BEAST для HTTP/WebSocket и какой-нибудь Yandex OZO для работы с сетевыми БД.
ASIO позволяет сделать пиздец производительный сетевой код, но порог вхождения в api высокий
>>749947
Не надо идти в геймдев ради изучения языка, в геймдеве много времени занимает работа с моделями и т.п. Сделать движок и к нему технодемку норм идея, но я бы предложил сделать какой-нибудь пиздатый сетевой сервис. Например, api для телеграм-бота, который обрабатывает картинки в чате, хуй знает, нейронкой их меняет и выдает.
Сейчас серьезно отвечу.
Ответ зависит от того, какая у тебя цель.
Если ты хочешь именно игрушку сделать - то шарп+юнити+купленные ассеты твой выбор.
НО. Если у тебя цель - разобраться, а как вообще все там работает. Как устроено изнутри. Поймать проблемы, которые все кучу раз ловили и самому героически их решить. Столкнуться с тем, что твой С++ работает медленнее питоновского кода и полезть разбираться - с фига. А игрушка в процессе - может превратиться в музыкальный секвенсер. Плюсы - отличный вариант.
Чтобы мысль более ясно звучала. Чтобы сделать игрушку по бырой - юнити-шарпы. Чтобы понять, а что ж там скрывается под капотом этого всего дела - плюсы.
>Хотел бы возможно игрушку по типу diablo, но тут я думаю профитнее будет шарп с его юнити(об этой мысли задумался только на момент написания треда). Я совсем не знаю, что я хочу дальше изучать в плюсах, и что вообще можно. Подскажите, пожалуйста, анончики, и что думаете об игре
Будут очень жесткие проблемы с графикой, бесплатных 3д ассетов мало. Если ты для себя то попробуй начать написание своего движка, советую оплатить подписку на гпт4 чтобы он был своего рода ментором, и можешь еще задавать вопросы в тг чатах типо @supapro. Какой-то майнкрафт на минималках можно написать за месяца 3-4. Если ты для работы в будущем, то нужно потратить где-то пол годика на изучение С++ и после можешь вкатываться в UE5, там С++ очень своеобразный и многие знания не понадобятся. Для 2д игорь можно наверное взять cocos2d, но я ни разу еще не видел его в вакансиях, там наверное и правда лучше юнити
По С++ можешь что угодно изучать, я бы наверное курс Константина Владимирова на ютубе взял как базу и решал бы задачки из https://gitlab.com/slon/shad-cpp0 и https://gitlab.com/slon/shad-cpp
Я-то почему спрашиваю.
У нас внезапно на заводе - хотят заставить с шарпов на си плюс-плюс пересаживаться, чтобы писать и ПО для устройств и технологическое ПО на одном стеке. Типа, чтобы не писать на разных языках реализацию одних и тех же библиотек и прочего.
Ну, собственно. Так исторически сложилось, что все сетевое на устройствах - с библиотеками либо от вендора устройств, либо - это линукс и там линуксовыми штуками можно обойтись. С другой стороны- на винде той же - был шарп/жава, и там спокойно жили. А теперь -надо чтобы и в устройствах и прикладном-технологическом софте одни библиотеки были. Донести позицию, что хуету придумали - не получилось, менеджмент взял это дело в оборот.
Собсно я потому и спрашиваю. А как какать сделать хотя бы такую вот простую штуку на плюсах-то? Я же с лапками шарпами привык уже что все что мне надо - есть рядом.
Qt или Boost'овые либы
Идеально их смешать, но не взбалтывать, но тут ебейший опыт в обоих нужен.
А оно влезет в Bare metal и вообще рассчитано на них? Я ж уже сказал - нуб, кодил всю сознательную жизнь прикладной софт на шарпах.
Просто опять же. Менеджеры ебанаты - придумали зачем-то, что все надо на одном языке, а т.к. завод и железки приоритетнее - выбрали плюсы.
Не очень понимаю что значит бейр метал. Если ты про вашу железку - то зависит от железки, очевидно.
Ну. Железка без ОС. В которой только наш загрузчик, либы от вендора зашитые и наша программулина, которая делает полезные штуки.
>такую вот простую штуку на плюсах-то
Смотри, в С++ совсем другая идеология, С++ он дизайнился с 20тилетним легаси в уме, из коробки в нем ничего нет потому что все слишком неуниверсально. Работы с сетью и даже сокетов из коробки в С++ тоже нет, люди делают библиотеки где оборачивают системное апи под разными платформами в одинаковый С++ код. Ответ на твой вопрос - никак, без библиотек просто н-и-к-а-к. Если ты не хочешь потратить пол года на создание своей библиотеки для работы с сетью то твой алгоритм действий такой:
1. Заходишь на conan.io и следуешь инструкциям по установке
2. Гуглишь http server library c++
3. Ни в коем случае не берешь ничего что содержит в названии слово boost
4. Гуглишь conan cmake и копипастишь оттуда шаблон CMakeLists.txt
5. Устанавливаешь библиотеку и радуешься жизни
Другие варианты либо привязаны к какой-то из платформ, либо ты потратишь на них не 20 минут а 60 часов
Это не прикладная библиотека, это библиотека чтобы сделать свою библиотеку для работы с сетью, набор кирпичиков. Если он правда переходит из шарпов то начитавшись сайтов типо SO/Quora где везде рекомендуют всякие асио и бисты наверняка попробует и подумает
>блять в с++ для гет запроса ПРАВДА нужно вручную создавать http хедеры?
А взяв какой-то cpp-httplib гляди и осилит
В таком стиле написан сервак по обслуживанию зоопарка устройств, и 100ГБ/с оно держит на зеончике 2006 года и 4 гигах оперативки.
Заменял он как раз сервак написанный на плюсах, где каждый коннект - отдельный тред, ну и нагрузка которую держал тот сервак на плюсах на том же железе - 100МБ/с, дальше просто задыхался и просил пощады.
Конечно, прирост не обязательно связан с асинк-эвейтами, там еще много чего отличается.
Но вообще. Я бы послушал за альтернативы.
0 пиздежа.
Я пришел в 2015м. В 2014м ушел чел, который тот сервак на С++ писал. Некому было поддерживать его. Первым проектом как раз было переписывание на шарпы того что было на плюсах. Доступа к исходникам - не было(тайна комерческая дохуя), было описание протокола обмена с устройствами и описание пользовательских функций.
Если ты не участвуешь в проекте - нет. Комерческая тайна, все дела.
Сервер на шарпе - шел новым проектом.
Просто как-то странно получается. Если сервер уже есть, но чел ушел, так поставьте другого в тот проект, зачем переписывать
У других - своих проектов до жопы.
Типа блин. Это же завод. Я вроде сказал. На заводе - такая практика - у каждого программиста - свой проект, а зачастую - несколько своих проектов, которые они ведут. Уходит программист - знания уносит с собой. Как поддерживать это дело - никто не знают и молятся, чтобы все не ебнулось, пока замену не найдут. От того что все не разваливается - специфичность заводских программистов только спасает, потому что с одной стороны - все шаристые(и таки если пиздец важно - могут включиться и чутка поддержать), с другой - сидят на жопе ровно, ругают работадателя и продолжают кодить за миску гречки.
Работаю на мелком производстве в мск.
У нас тоже самое. Каждый отдел имеет своих программистов. И вот я наговнокодил какой то софт, он как то работает, но когда я уйду никто его дорабатывать не будет. ну лан, у нас ещё один прогер есть, так что не все так плохо
Ты ублюдок, у меня kernel panic вылетел
могу, vim, macos 13.4
Это вчера было :3
Правда ли вулкан так сложен как говорят? Я вот опенгл ковыряю, который легче вулкана, как говорят. Вроде принципы понимаю, но обилие всех настроек и параметров в голову пока не укладывается, то есть я не могу написать код, никуда не подглядывая и ничего не копипастя.
Нет, но обьем того что не плохо бы подсматривать на порядок выше.
Завод-то не электроприборы случаем производит?
Да.
Тебе делать нехуй, виндузятня?
Что за приколы
vector<int> huipizda{ 0, 1, 2, 3, 4 };
int govno = huipizda[99999999];
думаете код выдаст какую нибудь ArrayIndexOutOfBoundsException? а вот хуй вам)))0
Думаю, что нет, потому что умею читать документацию. А ты чего ожидал? Что будет по 50 рантайм проверок на каждый пук, как в жабках?
Лол, ты реально думал что в этом динозавре будут проверки на выход за рамки массива? Кстати вроде даже в паскале есть проверка на это, думайте
Та мне похуй, я с плюсами имею дело потому что другого варика нету, а дерьмовыми считаю вообще все языки
Пытался перенаправлять потоки ввода и вывода, смог вывод превращать в вектор со строками, а с вводом не сработало.
Единственное, что приходит в голову - не заниматься хуйней и сделать отдельную функцию со всей логикой, которая принимает массив с командами и читает его вместо инпута, но может есть какое-то другое правильное решение?
> Единственное, что приходит в голову - не заниматься хуйней и сделать отдельную функцию со всей логикой, которая принимает массив с командами и читает его вместо инпута, но может есть какое-то другое правильное решение?
Этот и есть правильное решение
Выносишь логику в отдельную функцию/класс, чтобы она не зависела от типа ввода
Плюсы охуенный язык стал, не надо тут
во-первых пошел нахуй
во-вторых читай документацию
хочеш эксепшон - пишеш .at(99999)
не хочеш - пишеш [99999]
в заключение лишь добавлю что ты пидор а я ебал твою мать
спасибо анончик
Логика может работать со ссылками на std::istream и std::ostream. Для тестов можно подсовывать std:stringstream, для приложения std::cin и std::cout.
Есть файл с функциями и файл с тестами,которые объединяются мейком.
Хочу,чтоб в зависимости от таргета в мейке в одном случае выводились результаты теста то одной группы функций,то другой. Но как мне это сделать? По идее через ifdefы ,но могут ли на них влиять таргеты мейка?
И вообще, возможно ли такое
В симейке это просто. Создаешь разные таргеты, какие тебе нужны, с одними и теми же, как я понял, сурсами, но с разными таргкт компил дефайнами.
https://habr.com/ru/articles/497114/
А в чём собсно он не прав?
Так собственно в чем он не прав?
Язык древний, минусов дохуя, комитету похуй, сидят в вечной сансаре страданий
Но в целом жить можно
мне в геймдеве по крайней мере норм
Настолько не интересен, что в каждом треде пукают и пытаются затмить Величие наследия юникса.
Я же написал что не работают такие методы.
Хотя и на линуксе с гцц и на винде с мингв все ок.
когда таргет лусше прайватом писать, иначе в таргете нету смысла и можно глобально для всех таргетов задавать
Анончик ну читай пост, вроде по русски написал.
Симейк один и тот же, но с мингв все ок, а с мсвс нихера .
c мингв постоянно какая-то ёбка в анальную жепу. то charconv отсутствует, то to_string не работает, то source_location, то хуйня то молофья
Очередной жопочтец. С мингв как раз таки рабоатет, не работает с мсвс.
> Ни симейком ни через схх флаги
Ну тут остаётся только одно - ты долбоеб либо первое либо второе неверно сделал, третьего не дано
Ничего другого нет.
Бед практайс
А в чём не прав-то? Запомнить все приколы с++ уже невозможно. Баги в САМОМ СТАНДАРТЕ это подтверждают. Иногда хочешь сделать элементарную вещь и начинаешь путаться, что есть тривал обжэект, копипэл обжэект, под обжект, можно ли их копировать или нельзя. И прочая хрень. Надо писать код Си с классами. Незамудрённые исходники tensorflow или opencv - подтверждают мою теорию
строки, вектор и вообще весь стл это pimpl
так что если иде/дебаггер не поддерживает его раздрачивание то придется писать мокрописечные расширения на питуне или че у вас там
я в свое время с код блокс пердолился на эту тему, но в нормальных иде (яблодрочеров не касается азаза) обычно есть поддержка как минимум стл
ну тут с большой вероятностью сегфолт должен быть...
Она содержит два указателя о объект типа T.
Мы кастомным(или стандартным) аллокатором аллоцировали память под неё.
Конструктор мы не вызывали, то есть она в каком-то смысле неинициализирована.
Мы можем взять указатели на все её поля, записать в них что надо и затем пользоваться структурой как будто бы она инициализирована?
Я делаю просто свой лист и мне охота allocate делать структуры, а construct объекта типа T внутри неё.
Потому что иначе мне надо у ноды делать разные конструкторы и в них как-то прокидывать набор аргументов для конструктора объекта T (в логике emplace_back)
Читаю сорсы стд и там так и делают. Нода аллоцируется генНоде методом. У ноды нет конструкторов но есть метод гетВалПтр который достает указатель на значение.
И констракт делается уже по указателю на значение
А что за гварды я не понимаю, и возможно тут и проблема.
https://github.com/gcc-mirror/gcc/blob/acaa441a98bebc5216334557cf8d09d63087ce37/libstdc%2B%2B-v3/include/bits/stl_list.h#L706
>Надо писать код Си с классами. Незамудрённые исходники tensorflow или opencv - подтверждают мою теорию
Вот orthodox c++ это точно шиза, ну или, как минимум, луддизм.
я не против наследования, векторов и std::move. Я против шаблонизированной хуйни, создавания 20 классов чтобы пукнут в сеть и прочего ромбовидного наследования
Ну значит opencv и tensorflow писали макаки. Ясно, понятно. Импортозамещатель с госпараши по САМОМУ МОДНОМУ ПОСЛЕДНЕМУ СТАНДАРТУ С++, ты? Как, каместили microsoft word?
То что это по сути код сишный с тыканием в биты и максимально возможной производительностью с одной стороны, и высокоуровневый код с кучей точек расширения с другой стороны: свой аллокатор для своего менеджмента памяти например.
Шаблоны это кал для скриптомакак, которые никак от своих динамических типов в башке не могут избавиться и хотят писать на сях как на динамической скриптопараше.
А зачем создаётся какой-то __guard, если с ним ничего не делается? потом заннуляется просто..
он сохраняет какое-то состояние. если в ::construct выпадет кишка эксепшон он в деструкторе вернет как было
в случае успеха - обнуление чтобы как раз не откатывал
Но template - это плюсовая замена макросов. И там должна быть гигиена, разве нет?
ето только в стд. кстати имена с префиксом __ зарезервированы специально для него
Потому что нет модулей, так что ты не можешь сущности скрыть от пользователя, всё что инклудится видно
Так что есть два выхода:
- прятать всё под _
- прятать всё под namespace __private_dont_open{}
int num = x;
int res = 0;
while(num != 0){
res = res10 + num%10;
num /= 10;
}
std::cout<<res<<std::endl;
return x == res ;
}
int main(int argc, char const argv[])
{
int test = -121;
bool res = isPalindrome(test);
std::cout<<res<<std::endl;
return 0;
}
Блять почему код возвращает 1? Res положительный, x отрицательный, что за хуйня
Можно делать интернел хедеры в сурсе, а во внешнем только конкретные функции, хоть экстерном. Так еще деды на сях писали, но это забытые технологии.
Хедер онли это новомодная хуета так то. Раньше хедер онли только для дефайнов всяких пользовали, а не для реализации функций, так что противоречий нет.
Не очень понимаю как правильно сделать. В стд там юзают не внешние штуки, а какие-то их внутренние aligned membuff
У меня вот так выглядит нода, пока что я для неё аллоцирую память и её конструирую аллокатором передавай паки аргументов.
Не могу никак собрать синтаксис для этого
На си надо уметь писать как ни странно. В отличии от плюсов в нем нихуя нет. 100% во время разработки захочешь ты хешмап, например, и вопрос можешь ты осилить стороннюю либу для этого, без всякой синтаксической магии как в с++.
Что значит C++ избыточен? С++ даёт возможность не обосраться в тех местах, в которых ты обосрешься в С, даёт возможность не писать многострочные макросы, даёт исключения (ебланов не слушай), даёт нормальное ООП.
С стоит выбирать только если ты шиз.
Это пишется за 10 минут. Под каждый конкретный случай своя. А когда лень, берется файлик hash.c, отлаженный 10 лет назад.
> не писать многострочные макросы
Не нужны почти никогда. Лучший стиль - множество однострочных макросов.
В плюсах куча всяких удобных плюшек, структуры данных из коробки и с синтаксическим сахаром, смарт пойнтеры (считай что сборщик мусора, как в этой вашей Жабе, но без выявления циклов), можно обмазаться самыми новыми стандартами и писать хоть как на Питоне, в ус не дуя. А потом если производительность все еще не устраивает, уже это все дело можно оптимизировать. Это все равно проще, чем сначала прототип писать на одном языке, а потом переписывать на более быстром.
А писать на Си это как челлендж разве что, либо для портфолио, но хуй знает, где сейчас на чистом Си пишут, МК наверное, но там то на игры на SDL всем поебать, лучше тогда сразу МК обмазаться.
Никто не пишет игры на сдл.
Ладно шьако 2д еще можно, но что то нормальное - нет.
Сдл или глфв - только абстракция системных окон и событий с ними. А сдл рендерер это так - детей пугать.
Так что игры можно писать с сдл как менеджером окна, но рендерят дх/гл/вк.
Она же только хацкерам и реверсерам нужна, это небезопасно.
Выравнивание
>Она же только хацкерам и реверсерам нужна, это небезопасно.
Программистам типо не надо? Никогда не нопал инструкции в процессе чтобы не пересобирать билд?
>Никогда не нопал инструкции в процессе чтобы не пересобирать билд?
Ёбаный рот, а так можно было? ОСь не защищает процесс в памяти что ли? Там же вроде флаги у страниц есть.
Шутки шутками, а то, что ты озвучил (особенно если на проде) похоже на нейрохирургию ебаную.
Ну бля собираешь игру а там какой-то ассерт всратый срабатывает от другого бага, ты берешь нопаешь его и дальше работаешь. А если этот ассерт в хедере движка ты вообще хуй че пересоберешь, так что приходится выкарабкиваться
>ОСь не защищает процесс в памяти что ли
Дебаггер с процессом может что угодно делать, я через интерфейс визуалки это делал и все работало
>я через интерфейс визуалки
>IDE
>Запущена под админом
Ну, или просто это был дочерний процесс, поэтому был доступ.
Борланд давно стух, это называется Embarcadero RAD Studio, да, даже на ХР.
>Какие есть хорошие компиляторы для windows XP
1) MSVC v141_xp build tools с компилятором VS2017 поддерживает C++17, включая std::filesystem.
2) Есть порт gcc для Windows XP. https://gitee.com/qabeowjbtkwb/mingw-gcc
Есть даже для Windows 98 без поддержки многопоточки и std::filesystem, если хорошенько поебаться, тут есть инструкция https://github.com/fsb4000/gcc-for-Windows98
Час это долго?
>Сдл или глфв - только абстракция системных окон и событий с ними. А сдл рендерер это так - детей пугать.
>Так что игры можно писать с сдл как менеджером окна, но рендерят дх/гл/вк.
Ало чел, его SDL для этого и используют. Чтобы обрабатывать клики, джойстики и прочее. Короче если тебе игровой движок слишком много, хочешь легковесную игру, SDL идеальный вариант. Рендер SDL никто не использует. Он там просто так, депрекейтед.
Я знаю очень много проектов на SDL, вся графика там Vulkan либо OpenGL если проект старый.
>Рендер SDL никто не использует
О каком рендере речь? О том, который SDL_Renderer? Почему не используют?
>SDL_Renderer?
Да.
>Почему не используют?
Потому что есть OpenGL и vulkan, сейчас их любой утюг поддерживает. SDL_Renderer был актуален давным давно. Да и функционала у этих стандартов больше, больше кода. Сейчас рендерер это просто бесполезная обертка над некоторыми вызовами GL/VK
Ты дурак и жопочтец.
Торопишься куда-то?
>OpenGL
SDL проще. Как большая коробка с инструментами, даже если конкретно молоток не особо удобный. Особенно когда тебе нужно не лютую игру сделать, а просто хотя бы научится делать подобное. Парируй.
С микроконтроллерами без нопов никуда, там очень часто надо такты считать. На десктопе может понадобиться, например, для реализации спинлока (не nop, а pause/yield, но они фактически тоже нопы). Про выравнивание выше уже сказали, вот таблица nop разной длины для x86 в качестве примера:
https://stackoverflow.com/questions/25545470/long-multi-byte-nops-commonly-understood-macros-or-other-notation
>SDL проще
Для совсем простых вещей. Чуть выйдешь за рамки, и уже нужно будет что-то низкоуровневое, а в SDL рамки - тупо текстурированные квадратики. Банально для любого эффекта уже шейдеры понадобятся.
> А большее в одиночку и пилить нет смысла
Куда уж там всяким Stardew Valley, римворлдам, андертайлам, майнкрафтам и прочим Touhou, сейчас аноним с харкача вам расскажет, что есть смысл пилить в одиночку, а что нет.
Ну иди пиши, хуйло ебаное. Только сначала марио осиль.
> Stardew Valley, римворлдам, андертайлам, майнкрафтам
Выбрал единичные случаи из миллионов потугов ХАЧУИГРЫДЕЛАЦ и сует как аргумент. Какой же тупой.
Да-да. Майнкрафт написал уже, додя?
>А большее в одиночку и пилить нет смысла
В одиночку вполне себе можно какой-то пиксель арт рогалик сделать, на крайняк нанять художника-студента чтоб нарисовал там 20 спрайтов за 500 баксов. Noita например 3 человека делало, из которых программист всего один, а один просто музыку делал. При этом там упор на физику и разрушаемость, вполне себе можно в соло осилить если идейный. В одиночку нет смысла делать что угодно связанное с неткодом, или с нормальным артом или 3д ассетами, там без фултайм моделлера/аниматора/художника ты далеко не уедешь
Дегенерат, ты сам себе противоречишь. По твоей логике, если кто-то написал майнкрафт, значит и ты можешь, и каждый может, но тогда должно быть как минимум тысячи майнкрафтов, однако их нет, он всего один. Это и есть показатель, что никто не может. Существование майнкрафта написанного в одиночку является доказательством невозможности такое написать в одиночку. Исключение доказывает, что это не правило, а ИСКЛЮЧЕНИЕ из правил.
> существование является доказательством невозможности
Явахуе, ты сам то читаешь что ты пишешь?
>Явахуе
Да, правильно, так и продолжай дальше. Больше не изображай будто думаешь, тебе не идет, получается хуйня.
> По твоей логике, если кто-то написал майнкрафт, значит и ты можешь, и каждый может, но тогда должно быть как минимум тысячи майнкрафтов, однако их нет, он всего один
Ты вообще знаешь, что такое логика? У тебя тут произошел неправильный вывод из двух утверждений.
> если кто-то написал майнкрафт
> значит и ты можешь, и каждый может
Написать игру в одиночку. Это не обязательно должен быть майнкрафт. И игр, разработанных одним человеком, много. То есть, ты только что обосрался.
> однако их нет, он всего один
Ты совсем дегенерат? Зачем разрабатывать майнкрафт, если он уже есть? Чтобы что?
Это просто жирный троллинг, да? Я не верю, что можно на полном серьёзе быть таким тупым.
Тот тип людей, кто способен высрать Страдью Веллей и Майнкрафт в одиночку не задают вопросы в стиле "чо лучше SDL/SFML/OPENGL?"
Исключение лишь подтверждает правило.
Поэтому разумный подход это взять sdl/sfml и наделать на нем Марио или любую не особо сложную игрушку, или взять UE и делать на нем. А потом смело вкатываться в гейдев(исходная цель у задающего наверняка такая)
Тот тип людей, кто собирается делать игры, не лезет с тред С++, сюда лезут ебланы не желающие делать никаких игр, а только ковырять язык палочкой впустую имитируя деятельность. Бесполезные ничтожества без желаний и целей, только косят от работы потому что ничего делать не могут и не хотят, но честно плевать в потолок чсв не позволяет признать себя уебком. Боты имитирующие человека, фальшивка как китайская подделка.
Бейз
>Бесполезные ничтожества без желаний и целей
Хочу ебать тянок. Это моя цель и желание. А ты соси хуй и дрочи на игры.
теже что и на бэкенд на го\питон\жабу\шарпы
поменяется только фреймворе, хттп, бд и остальное останутся теми же
а ну еще бэкенда на плюсах почти нет
> поменяется только фреймворе, хттп, бд и остальное останутся теми же
поменяется только фреймворк.
хттп, бд и остальное останутся теми же*
Честно сказать? Если уже во время практики ничего не нашел - в плюсы не вкатишься
На производство иди, там будешь тулзы и прошивки для МК писать. Но это путь в один конец по ощущениям
Никакая, учи жабу или жс, это проще, чем найти работу на плюсах.
Везде, где видишь инженер-программист С++ шлёшь письмо, где говоришь что готов за еду пахать как папа Карло.
но лучше бросай плюсы
Но сишку знать надо всем. Это база. Плюсы могут пригодится если вдруг вебмакака дорастет до того, что полезет свои инструменты править. Я так вижу.
Впрок это хуевая идея. Но вот как кишки ноды изучить без базы?
https://github.com/danbev/learning-nodejs
>кишки ноды изучить без базы
Их изучать нужно просто умея читать С++, это гораздо проще чем на нем писать. Я знаком с одним веб-разрабом с 8 годами опыта, он где-то за пол годика подучился на С++ программера и пишет свою инмемори бд и язык программирования на плюсах. Код я конечно не видел, так что степерь пиздеца оценить не могу, но освоить для чтения думаю можно за пару недель
>А какая работа есть на плюсах для выпускника универа?
Любая на которую возьмут, подавайся везде, на любую галеру, даже за 200$/мес. Если я с 3 вакансиями на город и это в разгар пандемии смог вкатиться то в ДС/ДС2 это гораздо проще
А если хочется на конкретное направления, на 3д графику например или написание компиляторов. Если устроиться куда возьмут и 5 лет диодиками мигать, то кто потом с этим опытом возьмет 3д графонием заниматься?
Если у тебя есть выбор из компаний то иди куда душа велит, но как написал анон выше окно для вката не очень большое. Аренда дорогая, еда дорогая, а вакансий на жаваскрипт или сисярп поболее чем на кресты
Можно же еще сидеть на шее у родителей и изучать ту технологию, что нравится, пока не найдется вакансия по душе. Как вариант?
Как будто твоей язык, где это говно в принципе скомпилируется хоть чем-то лучше.
Просто я не понимаю, где происходит переход, от "Ну, вот как Си, но только классы добавились, ну еще есть темплейты, а ну и лямбды есть", во всю эту магию с непонятными умба-юмба заумными штуками, название которых я даже не могу вспомнить и использованием постоянно андерскоров везде где только можно, чтобы читать код было принципиально невозможно.
Темплейты в их базовом виде завезли в 90е, лямбды в 11 если не ошибаюсь. Где-то в этом диапазоне.
Но ведь раньше такого страшного кода как сейчас - в плюсах не было.
Ну или непопулярен он был. Писали нормально и потому - было удобно учиться на плюсах, а потом уже переходить на джаву или еще чет, потому что ну, там почти так же, но со сборкой мусора и кучей библиотек полезных.
Самое страшное что было, это использование препроцессора для обеспечения переносимости между платформами.
А сейчас. Я открываю некоторые проекты на гитхабе и гуглю, что эта конструкция вообще делает, а эта - что. Короче. Сделали из нормального языка черт знает что.
А кто знает
До 2011 я работал на плюсах.
И плюсы там где я работал, были именно что Си с классами, ну чутка темплейтов. А весь код в SVN. Было клево. Было понятно. Кодили под винду и горя не знали.
Старпер, плиз.
Для тебя же стараются, неблагодарный. Но нет, будет все время изучать что-то новое (aka старое но в новой обертке), вместо того, чтобы вечером Дуньку на сеновале мацать за сиськи.
>нет ничего нового
С++ про серьезное программирование, а не детские забавы. Страсть к новому это синдром ребенка познающего мир, но взрослый уже познал, он начинает продуктивно работать, а для этого нужно не прыгать на новое, а сидеть на своём месте делая своё дело своими инструментами. С++ это не новостной сайт: "Что там новенького подвезли?", на нём программы пишут, а не возятся с языком ради самодроча возни с языком. С++ не игрушка.
Когда достигаешь максимального уровня ты перестаёшь прокачиваться
>он начинает продуктивно работать
>нет стандартных пакетных менеджеров
>нет стандартной системы сборки
>в одном проекте могут быть библиотеки собирающиеся мейкфайлами, базелем, смейком, мсбилдом и гредлом
>стандартные контейнеры ущербные by design
>нет высокоуровневых примитивов синхронизации
>разработчики компиляторов забивают хуй на стандарт потому что неудобно или не осиливают
>аби уровня б, но никто не хочет его ломать
>в языке нет сокетов, экзекуторов, рефлексии (да, даже динамической), нормальных статических анализаторов, кроссплатформенных IDE поддерживающих больше одной системы сборки
>он начинает продуктивно работать
Нет той степени уебищности, которую бы не защищали крестофанатики.
База
Ну да отсутствие экосистемы и нормальных языковых возможностей нереализуемых без поддержки компилятора это совсем не про язык, не надо сюда смотреть, вон лучше поглядите в сисярпе негров линчуют рефлексия ДИНОМИЧЕСКАЯ! Медленно! И вообще не удобно, я лучше сам ручками REFLECT_STRUCT(Foo::Shit) буду писать для каждого класса, пусть говном и пованиет зато своё!
Это называется свобода и открытость. А когда ты раб с магазином от барина, и он внезапно что-то удалил, не понравился ему пол, цвет кожи или национальность, и ты соснул, или вообще прикрыл лавочку или обанкротился и выключил свой сервер. Что ты будешь делать? Сосать палец. А на сях похуй, есть интернет, там всё найдется, барин ничего не контролирует, нет бояр, есть только свободные программисты. Язык для людей, а не червей мечтающих о барском сапоге в жопе. Твои говноскрипты тыквятся по кд потому что барин так захотел, иди обновляйся и всё переписывай, твоя говноверсия через пол года уже устарела и нинужна. Охуеть красота, в таком темпе можно только говна навалить на похуях вместо качественно софта на настоящем языке С++, который десятилетиями спокойно работает.
>отсутствие функционала это свобода
ЧТД
>Нет той степени уебищности, которую бы не защищали крестофанатики.
В языке мало библиотек? Ну это хуйня бесполезная. В языке много библиотек? Ну ты тогда от них полностью зависим становишься. В языке есть фичи? Они бесполезные. В языке нет фичей? Язык бесполезный и неудобный. Вокруг языка есть сообщество и экосистема? Это всё раздутый хайп от бигтеха. Вокруг языка нет сообщества и экосистемы? Значит язык мертв. Язык используют в ОС? Это все пропаганда, настоящие ОС пишут на си и с++. Язык не используют в ОС? Так это потому что он игрушечный.
Всё это разумеется не касается богоподобного С++, отсутствие библиотек это свобода, отсутствие фич это пространство для самореализации, а отсутствие экосистемы это гибкость. Смотрите не перепутайте.
Ты поехавший, наглухо.
Свобода -- это не когда ты можешь делать всё, что вздумается, а когда можешь сам выбрать, что ты обязан делать.
Cвобода — это рабство
> а когда можешь сам выбрать, что ты обязан делать
Свободные программисты, подскажите а как мне на атомике сделать неатомарный инкремент? Я вот мутекс взял, не хочу лишнего кода в программе
Их бесполезно к чему-то призывать, здесь могут месяцами кормить жирноту и троллинг тупостью. Тролли даже особо не стараются.
Тред всё равно сдох. Хотя я даже не уверен был ли он когда-то жив. Весь контингент тут либо школьники не осилившие загуглить свой же вопрос, либо жирничи которые сюда пишут от нехуй делать
>Свобода -- это не когда ты можешь делать всё, что вздумается
Но ты не можешь даже этого. Есть загон для скота - магазин пакетов от барина, и ты пользуешься только им, иначе никак, раб без выбора. А вот барин - всему господин, решает какое пакеты можно разместить, какие нельзя, барин решает за тебя раба чем тебе пользоваться или нет. Все эти манясторы служат только одному - согнать скот мнимым удобством, а потом закручивать гайки, всё равно никуда не денутся. Стадо баранов за забором, никто из них забор не перепрыгнет и не побежит на свободу, даже если физически может, уже не захочет, выдрессировали рабов привыкших подчиняться.
Тред вполне себе оживает, когда за бамплимит уходит. Залетных тут не любят.
Qt, буст
Вручную велосипедить заебешься
>С какой стати winapi для GUI приложений умер?
Микрософт его закапывает ради Silverlight WPF UWP очередной свистелки-перделки, которую забросят через пару лет.
Хочется и удобно зависимости добавлять и компиляторы налету менять и чтобы кастомные таргеты простенькие писать
Premake vs Cmake vs MSbuild vs Build2 vs ....
Сmake все это делает без проблем.
Детектит платыормы, компиояторы, переменные среды, версии либ и тд. Все что нужно.
Симейк ничего не делает, только обсирается. Делает только Visual Studio куда завезли поддержку майкрософт, вот работа майкрософт и работает, а не симейк-параша, которая никогда не работала и не будет.
> Детектит компиляторы
Спасибо, она задетектила мсвц и наглухо отказывалась компилить мингв. Просто ни в какую.
>Сmake все это делает без проблем
Литералли худшая билд система, хуже наверное только Ant. Но для справедливости хуже Ant-а наверное еще не изобрели, так что смейк особо то и не старался.
А что использовать вместо CMake? Почему на него все ругаются? Я вот собирал программу помню CMake'ом, всё собралось с 1 раза. Где почитать подробнее про его проблемы можно?
> вот собирал программу помню CMake'ом, всё собралось с 1 раза
Если бы он не собрался с первого раза я бы крайне удивился. Проблемы смейка из моего опыта:
1) Всратый, неинтуитивный, не похожий на С/С++ синтаксис
2) Медленный
3) Неадекватные ошибки уровня "unable to find file Х" когда на самом деле ты забыл }
4) Документация невероятно ужасная, одна из худших что я видел. Как понять поддерживает ли add_library относительные пути, или только абсолютные? А никак братан иди нахуй)
5) Меняется каждые пару лет, куча устаревших возможностей, об устаревшести которых можно узнать только на код ревью. Я например не знал что стандарт теперь нужно указывать через set_target_properties, а не CMAKE_CURRENT_CXX_STANDARD, и как об этом узнать я понятия не имею, никаких варнов мой смейк 3.27 версии не выдает. По этой же причине на любой вопрос на СО будут ответы 2007, 2011, 2014, 2018 и 2022 года с абсолютно разными инструкциями, из которых 2-4 будут нерабочими.
6) Нет экосистемы. Отладчик появился буквально пару месяцев назад, подсветка синтаксиса уровня ключевых слов, автокомплит учитывающий контекст отсутствует, IDE не умеют автоматически добавлять файлы в систему сборки. А как узнать название таргета для линковки от библиотеки я до сих пор не знаю, и никто из моих коллег не знает, обычно все просто перебором пробуют.
7) Работа с проектами со сложной иерархической структурой полный пиздец. Единственная либа в которой я видел хоть сколько то адекватную структуру проекта на смейк это cocos2d - заключается она в том что тебе нужно ручками описывать каждый блять файл в каждой папочке, а после пробрасывать смейклисты наверх вплоть до add_ где они используются. Разработчики смейк заботливо добавили GLOB() который сразу же рекомендовали не использовать, ведь смейк не может понять что на диске появились новые файлы)))))))))
Теперь если мне не нужна кроссплатформенность я беру мсбилд и делаю все на винде. В нем ни одной из этих проблем нет, а в добавок получаю vcpkg без бойлерплейтных конфигов и копипасты устанавливающий библиотеки в одну команду в консоли
> вот собирал программу помню CMake'ом, всё собралось с 1 раза
Если бы он не собрался с первого раза я бы крайне удивился. Проблемы смейка из моего опыта:
1) Всратый, неинтуитивный, не похожий на С/С++ синтаксис
2) Медленный
3) Неадекватные ошибки уровня "unable to find file Х" когда на самом деле ты забыл }
4) Документация невероятно ужасная, одна из худших что я видел. Как понять поддерживает ли add_library относительные пути, или только абсолютные? А никак братан иди нахуй)
5) Меняется каждые пару лет, куча устаревших возможностей, об устаревшести которых можно узнать только на код ревью. Я например не знал что стандарт теперь нужно указывать через set_target_properties, а не CMAKE_CURRENT_CXX_STANDARD, и как об этом узнать я понятия не имею, никаких варнов мой смейк 3.27 версии не выдает. По этой же причине на любой вопрос на СО будут ответы 2007, 2011, 2014, 2018 и 2022 года с абсолютно разными инструкциями, из которых 2-4 будут нерабочими.
6) Нет экосистемы. Отладчик появился буквально пару месяцев назад, подсветка синтаксиса уровня ключевых слов, автокомплит учитывающий контекст отсутствует, IDE не умеют автоматически добавлять файлы в систему сборки. А как узнать название таргета для линковки от библиотеки я до сих пор не знаю, и никто из моих коллег не знает, обычно все просто перебором пробуют.
7) Работа с проектами со сложной иерархической структурой полный пиздец. Единственная либа в которой я видел хоть сколько то адекватную структуру проекта на смейк это cocos2d - заключается она в том что тебе нужно ручками описывать каждый блять файл в каждой папочке, а после пробрасывать смейклисты наверх вплоть до add_ где они используются. Разработчики смейк заботливо добавили GLOB() который сразу же рекомендовали не использовать, ведь смейк не может понять что на диске появились новые файлы)))))))))
Теперь если мне не нужна кроссплатформенность я беру мсбилд и делаю все на винде. В нем ни одной из этих проблем нет, а в добавок получаю vcpkg без бойлерплейтных конфигов и копипасты устанавливающий библиотеки в одну команду в консоли
А, ну и как я мог забыть вишенку на торте - исходники. Код смейк еще хуже чем сам смейк, ощущение будто его писали под смесью героина и винта, паралельно приправляя мочей и собачим калом. Не думаю что это волнует большую часть программистов конечно, но если вы внезапно захотите выяснить почему вам выдало такую уебищную ошибку и вы решите грепнуть исходники советую морально приготовиться к laba1.cpp доросшему до продуктового стандарта
ЧТо плохого в этом свитче? Вполне нормальный кодес.
Так нытьё про CMake, винда-то тут при чём? Если юзать нативный виндовый MSBuild, там никаких неудобств нет.
Заставляют линуксоёбы, макоёбы и т.д., у которых нет божественной вижуалстудии с MSBuild.
Шизло, из 2015 капчуешь? Dotnet SDK без проблем работает и на винде, и на линупсе.
Говноед спокуху оформи, не всем нравится вкус собачего кала во рту
>А как узнать название таргета для линковки от библиотеки я до сих пор не знаю
Конфиги либ лежат в /usr/lib/cmake, дальше так:
https://stackoverflow.com/questions/42741501/how-to-know-library-variable-names-for-cmakelists
>7) Работа с проектами со сложной иерархической структурой полный пиздец.
А в чем у тебя сложность? Обычно получается такая же структура, как у солюшена в msbuild - в папках проекты, в корне CMakeLists в котором тупо add_subdirectory для всех вложенных.
По-моему у тебя есть кукла, а у него нет.
Опубликуй свою программу публично и поинтересуйся у других как у них получилось завести твою писанину, вот тогда и поймешь, что проблемы у всех, кроме тебя, т.е. CMake это одни проблемы, он не работает.
В жаве есть два разных инта. Один класс (чтобы поддерживать убогую систему дженериков), другой встроенный тип.
> Смузихлебский кал
> из java
Так на джаве наоборот старперы пишут, смузихлебский это какой-нибудь Python
Да нет альтернатив, прям как с крестами для кроссплатформы. В том то и прикол. Есть какие-то полумёртвые никому не нужные хуитки, которыми пользуются полтора человека.
В начале 10-ых, например, все грозились на scons перейти, и даже были проекты с ним. Где теперь этот scons?
Ну для прыщей есть ещё дедовский autotools, если тебе нужна хитровыебанная сборка.
Дохуя народу, в том числе я, пользовались чистым makeом, и никто не жаловался. Теперь сообщество плюсов состоит из изнеженных смузихлёбов, трансов и прочих пидорасов, которым подавай кнопку СБИЛДИТЬ ВСЁ. А функцию оповещения путём включения вибратора не добавить?!
К сожалению, никто не запрещает всё это говно навелосипедить в одном CMake проекте. Некоторые, например, прямо качают какую-нибудь зависимость во время сборки.
В КОНЦЕ-ТО КОНЦОВ!
>ты можешь линковать любую шаред либу простт прописав путь к ней. С инклудом директорий так же.
Так переносимость билда теряется, только для laba1 подойдет.
М.б. дауны на моче это нативно сделают, как на /g/?
>чтобы поддерживать убогую систему дженериков
Дженерики в джаве как раз не убогие, убогие там примитивные типы. Благодаря тому, что дженерики просто синтаксический сахар, не пришлось менять jvm, и под jvm есть куча языков кроме жабы. Под дотнетовский CLR ты другой язык так просто портировать не можешь, потому что у них дженерики влияют на ABI, и в результате надо или переделывать систему типов в языке или лепить адские велосипеды, чтобы работать с дотнетовской библиотекой.
> под jvm есть куча языков кроме жабы
И правда. Например, Scala, Kotlin и... Всё?
Котлин так вообще в каждое приложение свой рантайм тянуть должен.
> Под дотнетовский CLR ты другой язык так просто портировать не можешь, потому что у них дженерики влияют на ABI, и в результате надо или переделывать систему типов в языке или лепить адские велосипеды, чтобы работать с дотнетовской библиотекой.
Почему меня как прикладного разработчика это должно волновать? Пусть это волнует тех, кто пишет языки под .NET
Да и если я пишу только на C#? Там женерики тупо лучше чем в жабе и дают больше возможностей.
>Например, Scala, Kotlin и... Всё?
Из известных еще groovy как минимум. Из малоизвестных - почти все остальное от паскаля и кобола до хаскеля, из неизвестных - куча внутренних тулзов у компаний.
Текущая jvm к тому же обеспечивает портируемость самой джавы под все что угодно от телефонов до микроконтроллеров на пластиковых картах.
>Почему меня как прикладного разработчика это должно волновать?
Был бы ты разработчиком под VisualBasic или Delphi.NET в середине нулевых, тебя бы это волновало, потому что пришлось бы переносить всю кодобазу на шарп.
>Там женерики тупо лучше чем в жабе и дают больше возможностей.
А еще linq, powershell, пять несовместимых и наполовину заборошеных либ для UI и другие плюшки, которые MS выкатывает каждый код, рекламирует как небывалое откровение, и через год топит или забывает.
ты пьянь, где я хоть слово писал про свою программу и свою "писанину"? Собирал я duckstation, всё отлично собралось, я ни слова не писал что у cmake нет проблем, я спрашивал где они и где почитать. Сначала протрезвей потом отвечай. Или это ты порвался так сильно, что не способен понимать написанное?
>Никогда не нопал инструкции в процессе чтобы не пересобирать билд?
Как это делать в Visual studio? Покажи анончик
Шиз весь гихаб, включая проекты всяк х интелов и тд на симейке. У все вме собирает, только шиз с двачей не згает как либу в симейке обозвать лол.
>MSBuild может так?
Там полноценный скриптинг на шарпе, конечно может. Даже обычный make может, он тьюринг-полный.
Код позволяет вставлять пробелы, этим быдло будет злоупотреблять рисуя хуи из буков. Мало говнокартинок, еще и текст постов превратят в говнокартинки. Так что забудь, сначала надо выгнать быдло, но это невозможно, хозяева сайта наоборот его привлекают.
>Мало говнокартинок, еще и текст постов превратят в говнокартинки. Так что забудь, сначала надо выгнать быдло, но это невозможно, хозяева сайта наоборот его привлекают.
Блядь, это единственное, что тебя волнует? Да и на форчке это никому не мешает, а здесь дохуя эстеты с тонкими душами собрались.
Алсо
__,,,,、 .,、
/'゙´,_/'″ . `\
: ./ i./,,..、 ヽ
. / /.l, ,! `,
.| .,..‐.、│ .|
(´゛ ,/llヽ |
ヽ -./ ., lliヽ .|
/'",i" ゙;、 l'ii,''く.ヽ
/ ...│ ゙l, l゙゙t, ''ii_:.!
: /.._/ ヽ\\.`゙~''''''"./
.|-゙ノ/ : ゝ.、` .`''←┬゛
l゙/.r゛ .゙ヒ, .ヽ, ゙̄|
. | ./ l”'、 .゙ゝ........ん
l / ヽ.`' `、、 .,i゛
.l| ! ''''v, ゙''ー.l、
|l゙ .il、.l.ヽ .¬---イ
.ll゙, ./ ! ,!
.!!...!!,,゙''''ー .|
l.",! .リ |
l":| .〜''' ,. │
l; :! .|'" ...ノ,゙./ │
l: l「 ! . ゙゙̄ /!
.| .|!,i│|
:! .l. },i'./ |
:! .| :| . / .|
:! | ;!" .|
:! ! ││
:!:| ,! i,!
:! , .l, / .l゙!
:! | , l.| .|:,
: v'" .! |'i .ヽ, ./ :!.ヽ
_,_// .l゛._/:l゙ .`゙"
Ну ты понял.
Алсо
__,,,,、 .,、
/'゙´,_/'″ . `\
: ./ i./,,..、 ヽ
. / /.l, ,! `,
.| .,..‐.、│ .|
(´゛ ,/llヽ |
ヽ -./ ., lliヽ .|
/'",i" ゙;、 l'ii,''く.ヽ
/ ...│ ゙l, l゙゙t, ''ii_:.!
: /.._/ ヽ\\.`゙~''''''"./
.|-゙ノ/ : ゝ.、` .`''←┬゛
l゙/.r゛ .゙ヒ, .ヽ, ゙̄|
. | ./ l”'、 .゙ゝ........ん
l / ヽ.`' `、、 .,i゛
.l| ! ''''v, ゙''ー.l、
|l゙ .il、.l.ヽ .¬---イ
.ll゙, ./ ! ,!
.!!...!!,,゙''''ー .|
l.",! .リ |
l":| .〜''' ,. │
l; :! .|'" ...ノ,゙./ │
l: l「 ! . ゙゙̄ /!
.| .|!,i│|
:! .l. },i'./ |
:! .| :| . / .|
:! | ;!" .|
:! ! ││
:!:| ,! i,!
:! , .l, / .l゙!
:! | , l.| .|:,
: v'" .! |'i .ヽ, ./ :!.ヽ
_,_// .l゛._/:l゙ .`゙"
Ну ты понял.
О, на этой доске пофиксили. На других досках можно спокойно и без тега code слать арты с хуями.
я и без пробелов могу картинки рисовать хули ты мне сделаешь
卍卍卍 冂口山仨几 廾丹乂丫认 冂认亼口尸 卍卍卍
а вот то что даже форумы на phpbb в 2003 имели разметку лучше и удобней чем у обезьяны это факт и база
Согласен
А за [і] смерть должна быть долгой и мучительной.
АИБ не было бы без возможности постить картинки. Без форматирования текста аноны бы пережили, тем более что любители подчёркивать текст/закрывать его спойлерами - шизики поголовно.
Слишком поздно. Теперь такие вот книги на 300 страниц - объективная реальность:
https://www.amazon.com/Initialization-Story-Through-Options-Related/dp/B0BW38DDBK
И вот, вы плачете и просите вернуть F77. Но поздно, вы сами изгнали себя из рая.
Погодь погодь, щас второй способ обьявления функций доделаем, а потом еще другой способ задавать методы класса, а потом еще концепты потрогаем, а потом...
>Такого ни в одном языке нет
Не аргумент. Другие языки высокоуровневые, а кресты - нет, кресты это низкоуровневая сишка. Разные инициализации это разный код, разные способы, они должны быть. Залетная скриптомакака не имеет права голоса тявкать на кресты которых не знает.
>>773572
> Залетная скриптомакака
Скажи, пожалуйста, немакака, какой разный код будет сгенерирован в этом примере: https://pastebin.com/fCkBtd8b (пик 1). А в этом: https://pastebin.com/aL3eM38R (пик 2)?
Вроде бы с круглыми можно неявные преобразования делать(в первом)
Во втором explicit запрещает неявные преобразования, и по идее должно быть одинаково.
мимокрок
Пусть немакака сначала ответит. Я его подожду, потом отвечу
В первом нет конструктора для круглоскобочной инициализации
Во втором explicit из за блокировки неявных преобразовний запретит копирование списка инициализации в объект r3
все тот же мимокрок
>Другие языки высокоуровневые, а кресты - нет
В низкоуровневых языках как раз никакой магии при инициализации нет. Там все очень явно и конкретно, и пользователю всегда очевидно, что происходит в каждой строчке.
Проверки на явные/неявные преобразования не отображаются на машинном коде, они делаются во время компиляции
>cout вместе с printf
блядь когда вы нахуй уже передохните все? запомни раз и навсегда, ебло, язык си это неотъемлемая часть языка с++. и если я могу использовать форматирование из си, а не как еблан писать в cout миллиард стрелочек, значит я это могу и должен делать. особенно когда аналога для форматированного вывода в языке нет блядь. насмотрятся блядь видосиков, статей начитаются и все как один друг за другом повторяют хуйню, даже не задумываясь какая это хуйня тупорылая. дегенераты блядь залетные.
Все так. Но они скобки путают так что куда им до притфа, про спринф лучше и не вспоминать.
То что плюсовики складывать не умеют это давно известный факт, но что проблемы начинаются гораздо раньше никто и представить не могу.
> чет сишечка и плюсы как родные мне
> особенно приколы с указателями
Как распознать профана за 2 предложения.
К а Н и К у Л ы
это когда ищешь альтернативу плюсам, пробуешь ее и потом снова к ним возвращаешься
Чтобы понять, что такое рекурсия, надо понять, что такое рекурсия
это мем башорга
Какая же правда. Несколько раз с си переходил на плюсы, потом обратно, но так и тянет остаться на плюсиках...даже не знаю что, это же мерзость!
Бро, там это где? Мне нужно пальцем ткнуть на объяснение, потому что я уже погуглил и нихрена не понял.
Ну вообще раньше когда гуглил рекурсию там был прикол с рекурсией. Если его выпилили то грустно.
>Ребята, что такое рекурсия?
Это пакет с пакетом, внутри которого пакет, внутри которого пакет, внутри которого пакет, внутри которого пакет....
Банальные пример:
n-ое Фибоначчи можно вычислить с помощью рекурсии
int fibonacci(int N) {
if (N == 1 || N == 2)
return 1;
return fibonacci(N - 1) + fibonacci(N - 2);
}
а можно итеративно
int a = 1, b = 1, c;
if (N <= 2)
printf("1");
else
{
for (int i = 3; i <= N; i++)
{
c = a + b;
a = b;
b = c;
}
printf("%d ", b);
}
>А попроще?
Если функции для вычисления своего состояния нужно вызвать саму себя, то это рекурсия.
Бро, я знаю, что отражение зеркала, в зеркале, в зеркале... - это рекурсия.
И знаю, что если внутри функции она сама вызывает себя, то это рекурсия.
Но когда я вижу код, я не могу понять, что происходит.
Анон, а давай сначала вообще про функции немного подумаем. Что это такое вообще?
Вот есть у тебя задача: найти минимум в массиве. Причём не в каком-то абстрактном, а в чисто конкретном, выданном лично тебе. То есть вот прям один экземпляр массива выдали тебе: 1, 3, 10, 4, 5, 1, 0, 2, 57, 179 и попросили найти в нём минимум. Ну ты взял и ткнул пальцем в 0.
Как бы выглядела ф-ция, которая такое решает? Да очень просто. Она бы ничего не принимала на вход и выглядела бы так:
int find_min_in_my_array()
{
return 0;
}
Очень тупая ф-ция, да? А теперь тебе усложнили задачу и сказали, что надо научиться решать не одну задачу (поиск минимума в одном отдельно взятом массиве), а сразу бесконечное семейство задач - поиск минимума в произвольно заданном массиве. Как будет выглядеть сигнатура такой ф-ции? Ну понятно, что на вход будет приходить тот самый массив, в котором надо найти минимум:
int find_min(vector<int> arr)
{}
Я что хочу сказать? Что про ф-цию можно думать, как про СЕМЕЙСТВО процедур, решающих инстанс задачи, параметризованное некоторым набором входных параметров. То есть в данном случае, имеется семейство процедур, параметризованных входным массивом. И при каждом фиксированном входном массиве получается процедура, которая в этом конкретном входном массиве ищет минимум.
К чему вся эта философия? А к тому, что при таком взгляде на вещи удобно осознать следующую мысль: реализация одной конкретной такой процедуры может использовать результат работы другой процедуры из этого семейства. Представь, что ты на вход find_min опять подал тот самый массив, который я указывал в самом начале. Таким образом, find_min превратилась в процедуру, которая ищет минимум в том самом массиве. Но не сложно понять, что чтобы найти минимум в этом массиве, можно найти минимум в нём же но с отброшенным последним элементом, а затем выбрать минимум из этого результата и последнего элемента. Реализация этой идеи выглядит как-то так:
iint find_min(vector<int> arr)
{
int min_of_prefix = find_min(arr[:-1]); // Вот это рекурсивный вызов!
return min(find_min, arr.back());
}
Я здесь для краткости использовал питоновский синтаксис arr[:-1], для обозначения массива, состоящего из всех элементов arr за исключением последнего.
Таким образом, при реализации ф-ции find_min мы сослались на резёльтат ЕЁ же работы, но на другом (в данном случае меньшем) входе. Или, говоря в прежним терминах семейства процедур, мы описали реализацию одной из процедур семейства, сославшись на другую процедуру того же семейства.
Короче, рекурсия часто возникает в тех местах, где решение какой-то задачи удобно описывается в терминах решения этой же задачи для некоторого "меньшего" инстанса.
Анон, а давай сначала вообще про функции немного подумаем. Что это такое вообще?
Вот есть у тебя задача: найти минимум в массиве. Причём не в каком-то абстрактном, а в чисто конкретном, выданном лично тебе. То есть вот прям один экземпляр массива выдали тебе: 1, 3, 10, 4, 5, 1, 0, 2, 57, 179 и попросили найти в нём минимум. Ну ты взял и ткнул пальцем в 0.
Как бы выглядела ф-ция, которая такое решает? Да очень просто. Она бы ничего не принимала на вход и выглядела бы так:
int find_min_in_my_array()
{
return 0;
}
Очень тупая ф-ция, да? А теперь тебе усложнили задачу и сказали, что надо научиться решать не одну задачу (поиск минимума в одном отдельно взятом массиве), а сразу бесконечное семейство задач - поиск минимума в произвольно заданном массиве. Как будет выглядеть сигнатура такой ф-ции? Ну понятно, что на вход будет приходить тот самый массив, в котором надо найти минимум:
int find_min(vector<int> arr)
{}
Я что хочу сказать? Что про ф-цию можно думать, как про СЕМЕЙСТВО процедур, решающих инстанс задачи, параметризованное некоторым набором входных параметров. То есть в данном случае, имеется семейство процедур, параметризованных входным массивом. И при каждом фиксированном входном массиве получается процедура, которая в этом конкретном входном массиве ищет минимум.
К чему вся эта философия? А к тому, что при таком взгляде на вещи удобно осознать следующую мысль: реализация одной конкретной такой процедуры может использовать результат работы другой процедуры из этого семейства. Представь, что ты на вход find_min опять подал тот самый массив, который я указывал в самом начале. Таким образом, find_min превратилась в процедуру, которая ищет минимум в том самом массиве. Но не сложно понять, что чтобы найти минимум в этом массиве, можно найти минимум в нём же но с отброшенным последним элементом, а затем выбрать минимум из этого результата и последнего элемента. Реализация этой идеи выглядит как-то так:
iint find_min(vector<int> arr)
{
int min_of_prefix = find_min(arr[:-1]); // Вот это рекурсивный вызов!
return min(find_min, arr.back());
}
Я здесь для краткости использовал питоновский синтаксис arr[:-1], для обозначения массива, состоящего из всех элементов arr за исключением последнего.
Таким образом, при реализации ф-ции find_min мы сослались на резёльтат ЕЁ же работы, но на другом (в данном случае меньшем) входе. Или, говоря в прежним терминах семейства процедур, мы описали реализацию одной из процедур семейства, сославшись на другую процедуру того же семейства.
Короче, рекурсия часто возникает в тех местах, где решение какой-то задачи удобно описывается в терминах решения этой же задачи для некоторого "меньшего" инстанса.
>А попроще?
Рекурсия это говно для безмозглых скриптомакак которым в сях делать нечего. Вызовы функций занимают стек, а рекурсия это зацикливание вызова функции на самой себе, происходит по сути неограниченное количество вызовов, что приводит к переполнению стека и падению. Это самая тупая макако-ошибка в программировании, даже знаменитый на весь мир сайт так называется. Но ни одна тупая макака по 100 раз в день этот сайт посещающая не понимает значение.
В нормальных языках, например луа, если рекурсивный вызов последним идет, то стек не будет расти. Потому что это значит возврат к фрейму, из которого будет сделан вызов, не нужен и фрейм можно убрать со стека.
Что интересно в спеках жс есть TCO, а движки жсовские не хотят это поддерживать https://exploringjs.com/es6/ch_tail-calls.html
Без рекурсии будет очень хуево крутить деревья. С рекурсией так же как с SQL инъекциями. Просто не нужно, чтобы глубина рекурсии зависела от пользовательского ввода. Вот и все.
Что потом? Потом функция минимум возвращает, всё
Согласен, тупанул.
Тогда уже не проблема стека, а занимаемой памяти. Хотя сейчас, наверное, уже это не такая проблема: просто купите память, лол.
Или 1 МБ. И ещё туда на каждом шаге рекурсии запихиваются все локальные переменные.
Хвостовую рекурсию легко заменить на итерационный алгоритм, там и уметь не надо ничего.
Но в обходе дерева рекурсия нихуя не хвостовая.
в с++ есть tco значит c++ нормальный язык
К сожалению нельзя
ну и вероятность того что они умудряются нормальный язык сделать около нулевая, будет все тоже самое что придется чинить ещё лет 15
Ну не знаю где ты про ~20 вычитал, я видел информацию только про 1 и 8, хотя это настраивается, по крайней мере в линуксе.
Во-вторых я ничего не писал про покупку стека, ты это уже себе сам придумал.
Если кратко, abi говна
>В чем проблема разломать нахуй обратную совместимость в C++ 29 и сделать наконец то нормальный язык без костылей ебучих?
Гугл пытается https://github.com/carbon-language/carbon-lang
>В чем проблема разломать нахуй обратную совместимость в C++ 29 и сделать наконец то нормальный язык без костылей ебучих?
Какой смысл? Снова получить плюсы и ебаться с двумя версиями?
Вон раст делали с нуля и он уже оброс кучей говен и костылями. Скоро плюсы догонит.
Зачем нам нужен виртуальномашинный корпоративнозависимый анальнокибергулаговый шарпшвайн?
Так никто и не выебывался.
ору с этих убивателей крестов
– давайте обсудим синтаксис нашего нового языка. первый вопрос: тип слева или справа?
– а в с++ как?
– в с++ слева
– У НАС НЕ КАК В С++
Тип справа - это паскакаль и sml, уважаемые языки со строгой типизацией.
А нахуй оставлять как в плюсах если читаемость из за этого страдает?
еще более уважаемо
> легче парсить
Жсон парсить ещё легче, но чёт не видел ни одного ЯП с json-based синтаксисом.
> более читаемо
Субъективно.
> Субъективно
Имя переменной всегда более важно чем ее тип
если ты конечно не лаба.цпп пишешь и переменные называешь как a b c
>Субъективно
Когда читаешь, первое что интересует - имя переменной, только затем интересует что за тип у этой переменной, а иногда это вообще не важно.
>не видел ни одного ЯП с json-based синтаксисом
Потому что json это описание объекта.
>но чёт не видел ни одного ЯП с json-based синтаксисом
Ты в курсе, как JSON расшифровывается?
Кто кресты губит? Думаешь ИТТ кто-то из коммитета есть? Не смеши меня. Не собирается никто в плюсах тип справа делать, не трясись.
Да и вообще сейчас все новые языки выходят, где либо тип указывать вообще не надо, либо его указывают справа, так что обтекай, маня. Тип слева это палеозой со времен си, всю жизнь тип справа был: Ada, Pascal, Oberon, из новых: go, kotlin, rust, ts. Мне кажется там люди поболее твоего понимают как им делать надо.
Как мне сделать swap строк таблицы? Мне нужно двигать строки вверх вниз.
В Qt нет готового swap ни для QVector, ни для QTableWidget. Когда сам попробовал вручную менять местами содержимое строк, начало вылетать с segmentation fault хер пойми откуда, даже в стеке вызовов не показывает, откуда. И связано именно с cellWidget, когда я добавляю строчку, где cellWidget записывается в ячейку таблицы, то вылетает.
Делаю что то типа того:
if (index != 0)
{
QWidget widget = table->cellWidget(index, 0);
QWidget upperWidget = table->cellWidget(index-1, 0);
table.setCellWidget(index-1, 0, widget);
table.setCellWidget(index, 0, upperWidget);
}
После этого происходит segmentation fault и все крашится.
Не будет никакого переполнения, если ты условие останова пропишешь правильно.
Я например недавно сделал чтение содержимого пакета через рекурсию, т.к. там многоуровневые вложения в структуре. Все работает збс.
пока вложенность меньше ~1000 работает збс кто ж спорит
но буквально итт был один додик который рекурсивным dfs пиксели красил и удивлялся че это картинки 800х600 не вывозит
Ну вот, значит есть решения, в которых рекурсия работает и уменьшает количество лишнего кода.
Ну фреймы небольшие, удобно, наверное, но писать прошивку для коммутатора тебе бы точно не дали с таким подходом рекурсивным.
>После этого происходит segmentation fault и все крашится.
Когда ты делаешь setCellWidget на второй ячейке, она удаляет свой виджет, которым владеет, и когда ты пытаешься вставить этот удаленный виджет в первую ячейку, происходит ожидаемый сегфолт. Надо как-то забирать ownership виджета у ячейки перед установкой нового, возможно через setParent у виджета.
А нельзя как то виджет сохранить по ссылке, чтоб он не удалялся? Может через copy-конструктор?
>А нельзя как то виджет сохранить по ссылке, чтоб он не удалялся?
Возможно removeWidget не будет его удалять, или как я говорил, вызвать setParent(this) у виджета и setCellWidget(nullptr), чтобы он репарентился к окну.
Возможно просто setParent(nullptr) у виджета сработает. Давно с Qt не работал.
Что мертво умереть не может
auto hui -> std::string = "pizda";
Нет это логика, от большего е меньшему, от общего к частному.это много где используется, те же типы в бмологии, например По этому сначала тип потом имя переменной, а если наоборот - это убого и не практично.
>значит есть решения, в которых рекурсия работает
Это не решение, а блондинка за рулем. Ездит как попало, никого не пропускает, и если пока еще не разбила машину и никого не сбила, это не значит, что такая езда "работает" и это правильно - экономить на учебе правил движения и дисциплине следования им.
Говоря проще, тупая пизда, макака за компьютером, вот кто ты со своим "я написал говно и оно еще не упало, значит я всё правильно делаю , это работает". Нет, не правильно и не работает. Само такое отношение уже показатель говноскриптинга, а не программирования. Это скрипты так пишутся - не думая что делаешь, как курица лапой, в расчете, если что упадет, подправить и готово. А программы так не пишутся, программы это когда ты думаешь прежде чем делаешь. ты понимаешь что пишешь. Без понимания нет программирования, и кресты как и сишка требуют именно понимания, подхода программиста, но не макаки тыкающей вслепую наудачу.
>>имя переменной более важно чем тип
>схуяли?
Потому что в javascript нет типов, вот они и не нужны и не важны. Эта скриптошваль оттуда и лезет, макаки сраные.
>Программировать пытались хоть раз?
Именно. Скриптомакаки даже не пытались, но лезут со своими скриптопомоями в треды программирования и кукарекают, ведь у них в переменную лезет что угодно, и говно и моча и дебилизм, скрипт всё сожрет.
Ради справедливости: в тайпскрипте вполне рядовая ситуация
let status: MailDeliveryCustomerNotificationStatus = cusomerNotificationService.getCustomerNotificationStatus(customer)
>Ты это к чему написал?
К тому что тип несет информкцию о переменной. Один из кейсов использования тайпскрипта вместо жс.
Можно removeCellWidget чекнуть, удаляет ли оно виджет или просто убирает из ячейки. Если второе, то тебе подойдёт.
Remove я уже пробовал, не помогает.
> let status: MailDeliveryCustomerNotificationStatus = cusomerNotificationService.getCustomerNotificationStatus(customer)
Эх, сюда бы еще венгерскую нотацию!
Естественно так не пишут. Тип переменной status MailDeliveryCustomerNotificationStatus не нужно явно указывать. Он выводится из возвращаемого типа getCustomerNotificationStatus. Можно мышкой навести на переменную status и IDE подскажет тип. Если не используешь мышку и иде, то сам виноват. Ебись в виме сам с плугинами.
И еще причем тут венгерская нотация? Это нотация является частью идентификатора переменной, а здесь переменная наоборот имеет короткое имя, а смысловая нагрузка на типе.
Переполнение стека
А каких хватит?
Вроде у Александреску что то было.
Этого более чем достаточно, перевешивает остальные васянские поделки.
Ссылку, пожалуйста.
>Инициатива майкрософта.
Это давно уже стандарт с++
вахуе конечно с ситуации, ряя не будем реализовывать потому что это от майков
Все пользовали фмт до стдфмт и продолжат так то.
Ну и у майков гораздо больше чегг нету, чем есть.
Неприятная правда.
https://devblogs.microsoft.com/oldnewthing/20190830-00/?p=102823
Краткое содержание:
- Майкрософт сделали ОС1, ОС2, ОС3, ОС4 с юникодом.
- Красноглазые чесали жопы и ничего не делали.
- Майкрософт разработала стандарт функций для юникода чтобы всё везде универсально работало и с char (анси) и с wchar_t (юникод).
- Комитеты по юникоду и сям чесали жопу и ничего не делали.
- Сообщество вокруг винды как всегда процветает, всё для людей, все довольны.
- Через 10 лет после майков красноглазые комитетщики начали чесать жопы, ведь дальше пинать хуи уже стало трудно, юникод везде и давно нужен.
- И что они сделали? Правильно, придумали свой говностандарт, всё созданной майками ломающий, потому что "Мы не любим майкрософт, они плохие, не примем ничего от них".
ИТОГИ, БЛЯТЬ
Как всегда пердоговно - говно, ничего не делает, только гадит тем кто делает.
Нужно ебашить с 11 версии или можно взять последнюю версию плюсов?
>Windows adopted Unicode before most other operating systems.
И хуле тогда они им не пользовались?! Почему на винде всегда такая ебля с кодировками?
>И хуле тогда они им не пользовались?!
Всегда и пользовались. И когда красноглазый манякомитет принял свой ломающий стандарт, майки оставили свой, чтобы не ломать людям их программы. Майкрософт всегда работал для людей, защищал людей, заботился о совместимости, не ломать людям программы. Именно поэтому винда лучшая и вообще единственная ОС для людей и всегда будет такой, потому что аналогов нет. С другой стороны только Эппл, которые каждый год тыквят софт обновлениями своей говнооси:
>"Убежали все переписывать свои поделия на новый стандарт. Кто не хочет? Не держим, дорога нахуй - вон туда"
И красноглазые пердоли подсасывают этому говну подпевая в лад. Только ломают, только гадят, когда майки работают ради людей. Еще хрюкни что-нибудь про "свободу и открытость", говна кусок.
>Почему на винде всегда такая ебля с кодировками?
Потому что когда софта нет, и проблем нет. Смотри выше почему. На твоих прыщах софт - однодневки, как мухи дохнут за месяц по осени. Надо постоянно переписывать правя под обновления или всё, тыква. А на винде программы и код работают десятилетиями. Потому что майки заботятся о совместимости, поддерживают софт и код, а не ломают его как Эппл и их подсосы пердоли.
Какой пиздливый индусский подсос.
В винде полностью кодировка юникод начиная (человеческие оси) с Windows 2000. То есть, среди настольных осей, начиная с Windows 2000 все неюникодные программы в Windows работают через прослойку совместимости со старым софтом, через костыли сделанные майками специально для совместимости со старым. Ты понимаешь это, дебил? Тебе даже нет столько лет, ты родился и уже винда давно была полностью юникодная. Но при этом там остался и весь остальной устаревший неюникодный софт, потому что майки поддерживают софт, не дают ему сломаться. До самого сегодняшнего дня. До сих пор этот древнющий софт работает и даже есть настолько дебилы, что продолжают писать неюникодное говно как под Windows 98, даже сегодня. Оцени тупость ебланов. Майкрософт настолько расстарались с совместимостью, что даже сегодня дебилоиды не замечают, что их сегодняшние высеры устарели еще 25 лет назад, потому что ПРОСТО РАБОТАЕТ, на винде софт РАБОТАЕТ, а не как в эппло и прыщемирке - ломаем всё нахуй, мы прогрессивные модные чоткие поцоны, ретрограды со старым калом не нужны, вырезать! депрекейтед! нахуй! Вот и нет софта, нет жизни, только мертвое каловое говно.
Too fat, go to /s/.
>Майкрософт всегда работал для людей, защищал людей, заботился о совместимости, не ломать людям программы
Жир потёк с экрана.
Можно в качестве спикера — попиздеть перед тремя людьми (запостимся в крупных плюсовых чатиках и канальчиках — может, будет больше), а можно и просто так
https://t.me/cppmoscow_info
Ты хотя бы Саттера читал, романтик хренов?
Нахуй вы здесь нужны, красьте дальше кнопки.
Обсуждаешь с ней новые фичи из 23-го стандарта?
А может это и к лучшему. Я вот например не ебу как пользоваться глобальными переменными.
Все что надо знать о том, как пользоваться глобальными переменными — это то, что ими не надо пользоваться
Кто «все»? Глобальные переменные допускаются только если они:
1. Статические;
2. Константные;
3. Не могут бросить исключение насчёт этого не уверен, но я нигде не смог найти информацию о том, как поймать исключение, если оно бросилось в конструкторе глобальной переменной, только всякие костыли с наследованием или созданием указателя и конструированием объекта в другом месте
Ему бесмысленно обьяснять. Это один из мэмакак с++29.
Душнила.
Рекурсию надо объяснять не на примере языка высокого уровня, а на примере архитектуры процессора, ассемблера и стека.
Ты вызываешь подпрограмму мнемоникой ассемблера CALL label, процессор берет текущий адрес из программного счетчика, инкрементирует его и записывает в стек, а в программный счетчик записывает адрес метки подпрограммы и выполняет ее, пока не встретит там команду RET.
Потом происходит обратная процедура, процессор достает из стека адрес подпрограммы и возвращается к программе, которую он делал ранее.
А если в подпрограмме вызвать подпрограмму без условий выхода из нее, это приведет к бесконечному заполнению стека, в конце концов стек переполнится и выйдет за пределы отведенной ему памяти.
Поэтому в рекурсии должен быть обязательно предусмотрен выход из нее по условию, а количество рекурсий не должно переполнить стек.
throw 42;
Ассемблер это кастомная муть везде разная, для учебы не годится.
Рекурсию надо объяснять следующим образом:
В компьютере не существует никаких функций и тем более их вложенных вызовов - рекурсий, это всё абстракции для математико-даунов. Математика не имеет отношения к компьютерам, в них есть только примитивная арифметика, и логика. Так что с функциями - сразу нахуй следуй, дебил. Это первое.
И второе, что же тогда есть? А есть переходы - GOTO, код это одни GOTO, которые и надо учить. И на этом месте у тупого скота наступает истерика и он идет нахуй. Очень удобно не тратить впустую время на необучаемых дебилов.
В Гугле забанили, не веб макака?
>Объясните кратко и наглядно, что такое докер, jenkins и прочая залупа
Ну дженкинс и докер это всё шестерёнки одной большой системы под названием "девопс". Весь смысл девопса в том, чтобы как можно быстрее выпускать продукт на рынок и быть конкурентным. Чтобы пользователь софта получал аплейты каждую неделю. Если ты будешь по полгода выкатывать апдейты, придёт твой конкурент васян и у него будет быстрее продукт развиваться и улучшаться. Он будет выкатывать кучу маленьких изменений, будет гибче тебя и случае обсёра так же быстро откатит изменения.
Это всё в совокупности - инструменты, культура компании, автоматизация, организация компании, процессы и так далее. Чтобы это работало, нужно внедрять agile в компанию, угорать по экстремальному программированию, писать автоматизацию, разделять на микросервисы и давать независимым командам по микросервису.
В случае С++, работает сама идея, но у тебя не будет докера и контейнеров, не будет части "ops" в слове devops (грубо говоря сисадминов, обслуживающих серваки), не будет микросервисов, но всё остальное будет также работать.
Спасибо.
>Почему? На плюсах не пишут микросервисы?
Пишут, но я не имел ввиду вебню. Я подразумевал десктопные приложения. Там немного по-другому, идут по пути модуляризации/вынесения в демоны. А вместо REST API/MQTT идёт D-Bus, сокеты и всё остальное.
Давали тестовое задание написать CVector, но это было давно.
ВОпрос вселенской важности: как отключить манглинг имен, чтобы вместо _Z10KernelMainv было просто KernelMain?
Ключевое слово static дает символу внутреннее связывание и он не торчит наружу из объектница. Слово inline просит компилятор попытаться встроить функцию.
Статические поля классов в C++ могут быть определены в заголовочных файлах, и если такое поле не помечено как `inline`, то каждый файл, который включает этот заголовочный файл, будет иметь свою копию статического поля. Это может привести к неожиданным результатам, если разные единицы трансляции имеют разные значения для статического поля.
Если статическое поле помечено как `inline`, то компилятор будет обеспечивать то, что в каждой единице трансляции будет использоваться одно и то же статическое поле. Это позволяет избежать проблем с неоднозначными значениями статического поля и обеспечивает более предсказуемое поведение программы.
Таким образом, пометка статического поля как `inline` является хорошей практикой для предотвращения проблем с неоднозначными значениями статических полей в C++.
>каждый файл, который включает этот заголовочный файл, будет иметь свою копию статического поля
пример покажешь? а то звучит как хуйня полная что-то новое
Да, конечно, вот пример, который демонстрирует проблему множественного определения статической переменной:
```
// file.h
static int myStaticVar = 0;
```
```
// file1.cpp
#include "file.h"
void function1()
{
myStaticVar++;
}
```
```
// file2.cpp
#include "file.h"
void function2()
{
myStaticVar--;
}
```
Здесь мы определяем статическую переменную `myStaticVar` в заголовочном файле `file.h` без ключевого слова `inline`. Затем мы подключаем этот заголовочный файл в двух исходных файлах `file1.cpp` и `file2.cpp` и используем переменную в функциях `function1()` и `function2()` соответственно.
Когда мы компилируем эти файлы, то получим ошибку множественного определения:
```
error: multiple definition of 'myStaticVar'
```
Это происходит потому, что при компиляции каждого исходного файла `file1.cpp` и `file2.cpp` переменная `myStaticVar` определяется заново в каждом из них, что приводит к конфликту определений.
Чтобы избежать этой проблемы, мы можем определить статическую переменную с помощью ключевого слова `inline`, как я показал в предыдущем примере.
Да, конечно, вот пример, который демонстрирует проблему множественного определения статической переменной:
```
// file.h
static int myStaticVar = 0;
```
```
// file1.cpp
#include "file.h"
void function1()
{
myStaticVar++;
}
```
```
// file2.cpp
#include "file.h"
void function2()
{
myStaticVar--;
}
```
Здесь мы определяем статическую переменную `myStaticVar` в заголовочном файле `file.h` без ключевого слова `inline`. Затем мы подключаем этот заголовочный файл в двух исходных файлах `file1.cpp` и `file2.cpp` и используем переменную в функциях `function1()` и `function2()` соответственно.
Когда мы компилируем эти файлы, то получим ошибку множественного определения:
```
error: multiple definition of 'myStaticVar'
```
Это происходит потому, что при компиляции каждого исходного файла `file1.cpp` и `file2.cpp` переменная `myStaticVar` определяется заново в каждом из них, что приводит к конфликту определений.
Чтобы избежать этой проблемы, мы можем определить статическую переменную с помощью ключевого слова `inline`, как я показал в предыдущем примере.
Я могу быть не прав и проверять мне лень, но насколько я помню, статическое поле объявляется в хедере а инстанс делоется в cpp файле, иначе (если инстанс создается в хедере) канпилятор просто на хуй посылает. Точнее послылает линкер, что типа одно и тоже в разных файлах с объектным кодом создано. Немного проще с шаблонами классов, там можно прям в хедере объявлять, подробностей правда говоря так сразу и не вспомню. Лично я вместо статических полей практикую статические функции возвращающие ссылку на статический объект, объявленный внутри этой функции.
Если речь идет о статическом поле класса, то принципиально ничего не меняется: при подключении заголовочного файла, содержащего определение статического поля класса, в нескольких исходных файлах может произойти множественное определение поля, что приведет к ошибке компиляции.
Для избежания этого необходимо определить статическое поле класса в единственном экземпляре. В C++ для этого можно использовать ключевое слово `static` в определении поля класса вместе с ключевым словом `inline` в заголовочном файле, как я показал в предыдущем примере.
Вот пример определения статического поля класса с использованием ключевых слов `static` и `inline`:
```
// MyClass.h
class MyClass
{
public:
static inline int myStaticField;
};
inline static int MyClass::myStaticField = 0; // определение поля
```
Здесь мы определяем статическое поле класса `MyClass`, используя ключевое слово `static` в определении поля и ключевое слово `inline` в заголовочном файле. Обратите внимание, что определение поля вынесено за пределы класса и выполняется с использованием квалификатора имени класса.
Теперь, при подключении заголовочного файла `MyClass.h` в нескольких исходных файлах, статическое поле `myStaticField` будет определено только в одном экземпляре, что избежит ошибки множественного определения.
как думаешь что линкер сделает с функцией которую никто не вызывает? На размышление 30 секунд
на самом деле, спасибо тебе, я что-то новое узнал, возможно пригодится когда-нибудь
да не за что, впадлу писать было поэтому чатгпт твои вопросы скармливал
искренне верил что такой код нескомпилится, ну чтож бывает
>Ассемблер это кастомная муть везде разная, для учебы не годится
Вызовы происходят абсолютно одинаково. Всегда сохраняется адрес возрата на следующую инструкцию на стеке, так что это уже фрейм стековый. И таки да, объяснение рекурсии на примере асм реально лучше, я только после этого начал понимать, например, ту же двойную рекурсию.
Значит ты тупенький, разттак долго доходилр, а те кто не понимает из вики/гуглов и итт спрашивпет вообще животные.
>имплаинг что вот я то не доебался, ведь я умный, мам ну скажи им, ну маааааам, я ведь не доебался, я ВИДЬ АСОБЕННЫЙ!!!
Спрк.
>Как называется такой стиль кодирования, когда классы называются именами типа CVector, форматирования код происходит таким образом?
Hungarian notation, отдельный вид рака из мира си с классами, которым пользуются всякие вальвы и гуглы.
Я советую стиль Java:
ClassName,
_variableName
methodName()
читай что я пишу.
Си с классами. Любимый стиль раковников из девяностых и любителей покритиковать современный С++ из параши растовиков и петухонистов. Сейчас так лучше не делать и писать современный код, используя умные указатели, RAII, а так же такие инструменты как отладчики и профайлеры. У меня проблем с утечками памяти не было, разве что когда касался сишного легасиговна.
>из параши растовиков и петухонистов
>Сейчас лучше писать современный код
Ну и зачем с треде С++ вскукарек из параши растовиков и питонистов?
Не знаю, но они постоянно протекают сюда и визжат что С++ это UB на UB. Просто надо уметь кодить, пользоваться инструментами для отладки и выявления утечек памяти и проблем не будет.
Как говорят пиндосы skill issue
А я вот умными указателями не пользуюсь принципиально. Это очень плохо?
У меня лет за 20 ни разу ничего никуда не утекло, и как-то хуй знает зочем это все.
У тебя отсутствие утечек подкреплено большим опытом, а условный миддл в 1 из 500 раз нет-нет да забудет сделать delete.
у плюсов вообще нет проблем!
А в чем сука он не прав? Зачем ты читаешь неиницилизированную память, ебанатище? Чтобы что? Уебывай в растотред
Проблема в разрабах на плюсах.
Пишу класс, чтобы переменные бросали исключения.
на куркуляторе?
Пиздец, тред не прочитал. Просто не обращаем внимания на чмонек, игнорирующих смарт принтеры.
Чтобы не пользоваться мерзкими смартпоинтерами.
Просто разным задачам разные инструменты. Когда мне надо написать говноскрипт с примитивной задачей, например что-то там качающий из интернета и производящий с этим несложные манипуляции, такое можно написать и на батниках, но мне в падлу и пишу на шарпе, удобно просто писать не думая о мелочах, мусоросборник сам подотрет. Но это задачи для говноскриптов, когда же надо написать реальную программу, полезную, которой пользуются, это значит она должна работать хорошо, а не тормозить как сука хуже браузерных страничек, вот тут уже только си, иначе никак. Когда пишешь качественный софт, требование внимательности и аккуратности уже не кажется "в падлу", так кажется только когда говно пишешь, сам понимая что оно ничего особо не стоит, вот и не хочется вкладывать время и силы в говно.
Если нормально собрано и слинковпно со вмякими экстерн дллипорт то должно подхватываться само.
> человек может ошибиться и написать уб
> так просто не ошибайся
Тебе, тупоголовому реально надо объяснять почему это не работает, не работало и не будет работать?
Ты хоть раз работал в команде 5+ человек, ты хоть раз видел на работе джунов?
Это все притом что с каждым стандартом кол-во кода для написания одной и той же вещи растет и растет
более того на всерьез думать что используя умные указатели ты можешь хотя бы от половины уб избавиться
Но вот проблема в том, что там в формулах расчёта есть именованные константы, типа, РасхКраски_шт, ЦенаКраски_шт и тд. Причём пользователя может что-то менять в формулах.
Как бы эти формулы перевести в C++? Точнее чтобы у пользователя осталось такое же взаимодействие с функционалом как раньше.
К приложухе подключается готовая dllка (предположим, что её исходников у меня нет). Мне нужно, чтобы все выделения памяти внутри этой dll осуществлялись через мои new, delete, malloc и т.п., которые переопределены мной. Всё это нужно под виндой
Я такой хуйнёй занимаюсь первый раз, поэтому хз, что ещё добавить
У тебя есть только один код - бинарный код дллки, берешь его и реверсишь в ассемблер выясняя каким образом происходит выделение памяти и хукаешь эти функции.
>через мои new, delete, malloc
Нет таких функций, это лишь абстракции в исходниках на С++, которых у тебя нет, реализованы на практике могут быть как угодно (неизвестно).
Можно перехватывать вызовы апихи VirtualAlloc. Сплайсинг или подмена адресов в таблице импорта
Можно перехватывать вызовы апихи VirtualAlloc. Сплайсинг или подмена адресов в таблице импорта
malloc и free есть. Остальное петушиные виртуальные обертки над ними.
Скинь таблицу импорта это dllки
320x240, 0:03
>CE вызывалась
Щито вызывалась?
мимо 5+ лет плюсов
Алсо,
>если пограмист забудет
>забудет
Не забудет, а явно не укажет, для улучшения читаймости/дженериковости кода.
крч хуй знает куда ты пропал и актуальна ли еще проблема, вот тебе к размышлению информация такая. У меня нет винды под рукой, под убунтой бинарник с скомпиленный из такого вот кода имеет такую вот таблицу импорта. Это говорит нам о том, что функция malloc это функция из библиотеки С. Думаю в винде так-же. Вызов этой функции можно перехватить 2 способами:
1. подменить адресс функции в таблице импорта (есть 2 подспособа)
2. сплайсинг (в памяти прям в начале этой функции записываются машынные коды инструкций прыжка на фейковую функцию, которая делает свои действия по перехвату (логирование, подмена чегонибудь)), выполняет инструкции которые мы затерли прыжком, и делает прыжок обратно
Ага, только вот тот чел походу хочет не в исходниках что-то сменить, а заставить бинарь себя вести по другому.
// Глобальные контейнеры
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
// Глобальные блокировки
std::mutex m1;
std::mutex m2;
// Функция, которая меняет местами элементы двух контейнеров
void exchange(int i, int j) {
// Захватываем обе блокировки атомарно
std::lock(m1, m2);
// Создаем объекты std::lock_guard для управления блокировками
std::lock_guard<std::mutex> lock1(m1, std::adopt_lock);
std::lock_guard<std::mutex> lock2(m2, std::adopt_lock);
// Меняем местами элементы
std::swap(v1, v2[j]);
}
// Создаем два потока, которые вызывают функцию exchange
std::thread t1(exchange, 0, 0);
std::thread t2(exchange, 1, 1);
// Ждем завершения потоков
t1.join();
t2.join();
// Выводим содержимое контейнеров
for (int x : v1) {
std::cout << x << " ";
}
std::cout << std::endl;
for (int x : v2) {
std::cout << x << " ";
}
std::cout << std::endl;
// Глобальные контейнеры
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
// Глобальные блокировки
std::mutex m1;
std::mutex m2;
// Функция, которая меняет местами элементы двух контейнеров
void exchange(int i, int j) {
// Захватываем обе блокировки атомарно
std::lock(m1, m2);
// Создаем объекты std::lock_guard для управления блокировками
std::lock_guard<std::mutex> lock1(m1, std::adopt_lock);
std::lock_guard<std::mutex> lock2(m2, std::adopt_lock);
// Меняем местами элементы
std::swap(v1, v2[j]);
}
// Создаем два потока, которые вызывают функцию exchange
std::thread t1(exchange, 0, 0);
std::thread t2(exchange, 1, 1);
// Ждем завершения потоков
t1.join();
t2.join();
// Выводим содержимое контейнеров
for (int x : v1) {
std::cout << x << " ";
}
std::cout << std::endl;
for (int x : v2) {
std::cout << x << " ";
}
std::cout << std::endl;
Всё забейте, автор статьи пидорас и сын своей матери, высосал этот пример из пальца
Зачем конкретно в данной ситуации 2ух мьютексный оверкилл
secod edition
Сори, вчера, не до этой хуйни было
Благодарю за наводку. При помощи detours получилось подменить исходные функции и вроде работает как мне и надо за исключением того, что перехватываются все malloc и free, а не у конкретной либы. Но на это вроде похуй. Так что ура, получилось, ещё раз спасибо
> 1. подменить адресс функции в таблице импорта (есть 2 подспособа)
Можешь вкратце рассказать или скинуть что-нибудь почитать?
Бля, я все правильно написал изначально, это ты дебич сбил меня
CE - Compile-time Error
RE - Runtime Error
UB - Undefined Behaviour (вдруг ты не знаешь)
SE - syntax error
Насрал аббревиатурами и рад
Компиле тайм эррор делается специально через статик ассерты чтоб потенциально не проебаться в последствии.
А рантайм ну иногда бывает, но редко да. Вот на днях че то такое видел мутексы себя ломали.
https://github.com/syzygy1/Cfish
>зачем с него переписывают на си?
1. Шизики-бездельники
2. Стабильное аби и возможность создания биндингов к разным платформам
В твоем случае первое
Переписывание уже написанного это тунеядство, имитация деятельности. То же самое как переустановка ОС, когда еблан не умеет и не хочет пользоваться ОС, занимается переустановкой. Так и тут, когда не умеет и не хочет писать программы, фиксить баги, вносить улучшения, переписывает уже написанное делая только хуже.
> Так и тут, когда не умеет и не хочет писать программы, фиксить баги, вносить улучшения, переписывает уже написанное делая только хуже.
У тебя пресуппозиция, что в процессе переписывания программа не улучшается. А ведь при этом можно и найти баги.
BE
DE
EE
FE
GE
HE
IE
JE
KE
LE
ME
NE
OE
PE
QE
TE
UE
VE
WE
XE
YE
ZE
>А ведь при этом можно и найти баги
Он не на раст переписывает, а на си. С таким подходом багов однозначно станет только больше, ведь языка программирования с меньшим количеством проверок еще не изобрели.
struct A {
void foo(int b) {
std::cout << "hello 1 " << b << std::endl;
}
};
struct B : public A {
void foo(int b) {
std::cout << "hello 2 " << b << std::endl;
}
};
Возможо ли хакнуть так, чтобы можно было вызвать функцию foo как обычную? Через поинтер например:
ptr(5) // hello 2 5
=D
Вот допустим я в процессе программирования выделил некоторые сущности и в соответствии с ними создал некоторые классы. Но потом вдруг выяснилось, что некоторые классы совсем не содержат в себе данных, только методы. Тогда руки чешутся сделать эти методы статическими, но я ловил какие-то ошибки во время компиляции, с которыми мне разбираться лень было а ещё не понял путаницы со статическими шаблонными методами.
В общем, либо делать эти методы методами объекта, но тогда придётся при их вызове создавать временный объект (который скорее всего при оптимизации превратится в no-op, но всё некрасиво), либо вместо класса просто отдельный неймспейс выделить, но это как-то не объектно-ориентированно либо сделать десяток функций с названием а-ля ИмяКлассаИмяМетода, но это уже программирование уровня /b/
Посоветуйте в общем чего-нибудь.
У тебя метод головного мозга. Пстые классы без данных с мотодами, лол. понимаю еще сли бы все это виртуалы были...
Просто сделай функции, не позорься. Ну можешь в неймспей впихнуть если так чешется.
Еще я заметил, что кидается СE, когда переполнение или даже потенциальное переполнение типа, то есть они хотят сказать, что в расте избавились от UB. Но я открою секрет, constexpr-функции тоже кидают CE, если в коде функции есть UB.
Программа может быть ill-formed, но при этом не выдавать ошибок.
Статическая сборка компактная, требует меньше зависимостей, и ощущение, что программа лучше оптимизируется
Ну это враки же, Википедия говорит про "длл-ад" в шиндовс. А в линукс реалиях? Библиотека my_govno.so сама решает обновиться, а прога с этой версией не протестирована, и все, пизда?
Немного правдоподобно использовать длл если хочешь исходники скрыть. Но опять же, щас популярен подход хедер-онли, и как-то все открыто остаётся. Короче не понимаю многого
>Библиотека my_govno.so сама решает обновиться, а прога с этой версией не протестирована, и все, пизда?
Разруливанием этих вещей занимаются мейнтейнеры и пакетный менеджер.
Ты вопрос внятно сформулировать можешь? Какое еще своё говно? Собственный проект динамически или свой велосипед тянут в проекты как динамическую либу?
Ты что компьютерный дух? Какие еще ощущения? Дальше что? На картах нам погадаешь? Разберись для начала как компьютерная программа вообще стартует и что она при этом делает. Статическая сборка у него компактная.
Кстати говоря рекомендую еще с лицензиями ознакомится
std::mem_fn появился ещё в 11-ом стандарте, а бинд вообще хуйня без задач, которую давно пора выкинуть.
Как и у крестов в целом.
Нормальные мужики писали функции, пускай хоть в виде лямбд.
Соевые придумали пустой класс с оператором и назвали функтором. Юзлес говно.
Это уже какой то новый уровень ретроградства
Я и говорю, соя совмем отупела.
ясное дело что можно манипулировать с областью видимости, это никак не отменяет факта что все это гивнецо раньше реализовывали просто вызовом функций.
>А я вот умными указателями не пользуюсь принципиально. Это очень плохо?
Просто у тебя не было задач, где они нужны. А это, например, практически любой редактор с undo. Там так или иначе придется использовать счетчик ссылок на ресурс, и удобно это делать умным указателем.
Челик задание прочитай
Обычно о величине члена говорят только те у кого самые маленькие члены
Дохуя времени прошло, сколько ждать ещё нахуй?
>Почему модули не взлетели?
Потому что оказалось, что они своей задачи не решают. Поскольку формат модуля у каждого компилятора свой (и даже разный для каждой версии компилятора), то заменить хидеры модулями можно только при полном доступе к исходникам, т.е. или в опенсорсе или, наоборот, полностью внутренней разработке. Если же надо распространять свою либу или API к проге, то модули ничем не помогут, придется все так же распространять скомпиленую либу + хидеры.
Пробовал я их гитовские версии - как правило шляпа багованая
Лусше стейбл жди. Алсо у меня креатором таких проблем не было, обновлчюсь стабильно.
Кто завозить должен? Почему Ты модули не завез?
А в стат/динам библиотеки кто мешает распространять?
Да и разве модули эти проблемы решить хотели?
а я думал все цели успешно достигаются их основной смысл заменить и улучшить прекомпилед хедеры чтоб конпелятор не жевал 200мб шаблонов в каждом юните
>формат модуля у каждого компилятора свой
чет лол, половину предложений в стандарт шлют нахуй по причине "не ломать abi"
а кто-нибудь вообще видел этот не сломанный abi крестов? он вообще существует нах? при смене -О1 на -О2 жепа не отваливается?
Собираю с 03 брат жив, странный пример, хотя про пиздец стд ты прав.
Так а кого ебет как ты свои лабы собираешь? Задроты то мучают комитет чтоб вообще у всех либы перестали линковаться к проектам, сейчас то такой проблемы нет
Изучаю новую тему, а именно перегрузка операторов в ООП.
И собственно сразу вопрос, а нахуя эта перегрузка нужна, вот серьезно я не могу понять, в теории даже обьяснить не смогли, какой-то пуньк, среньк, кхм, удобно поэтому используйте, но а где использовать, как влияет на память и прочее не указано.
жду ваши ответы, заранее пасибо)
Все просто, если не понимаешь зачем какой-то инструмент нужен - не используй его.
Хороший совет
Но без рофлов, зачем он нужен?
Я зашел на гитхаб, посмотреть на код людей, и только 2 - 3 использовали перегрузку =, и все.
Хочется более детально разобраться, а информации ноль, только примеры и на этом все
Никак это на память не влияет, это тупо механизм добавления сахара, тут не может быть глубокого смысла. Фича практически бесполезная, нужна только в laba1.cpp, чтобы реализовать сложение матриц с перегрузкой операций, сдать преподу и забыть
То есть если скипну, ничего важного не потеряю?
Потом уже вернусь, может и найду где нужна перегрузка.
и это еще не весь материал по перегрузке, общая сумма всех страниц будет около 250+
вода да и только
> И собственно сразу вопрос, а нахуя эта перегрузка нужна
Ты пишешь класс который будет представлять из себя вектор из 3 флоатов
class vec3f {float x; float y; float z;};
Понятное дело, что ты хотел бы делать что то подобное
vec3f p1; vec3f p2;
vec3f p3 = p1 + p2;
vec3f p4 = p1 * p2;
и тд
Если ты был в какой то жабе, пришлось бы писать что то подобное
vec3f p3 = vec3f::product(vec3f::sum(p1, p2), p4);
и тому подобное
auto p3 = p1.add(p2.mul(p5.add(vec3f{0.f}))).mul(p4);
Чтобы примерно такого не делать и писать как человек
как скажешь
Изучаю новую тему, а именно шаблоны.
И собственно сразу вопрос, а нахуя эти шаблоны нужны, вот серьезно я не могу понять, в теории даже обьяснить не смогли, какой-то пуньк, среньк, кхм, удобно поэтому используйте, но а где использовать, как влияет на память и прочее не указано.
жду ваши ответы, заранее пасибо)
Да. Что такое функтор?
На память влияет положительно. Я вот пока не начал использовать шаблоны, часто забывал куда положил таблетки или очки. Как начел использовать шаблоны, память сразу улучшилась.
а у меня еще от шаблонов хуй вырос на 2 сантиметра. только я им все равно не пользуюсь - на крестах программирую!
положить рядом с ним файл с таким же именем и одной строчкой #error "POSHEL NAHUI"
Напиши простейшую программу. На вход функция принимает значение. Если это значение тривильное (int, double, char и т.д.), в консоль выведи "trivial". Если это класс (например std::string, std::vector), в консоль выведи "class". У тебя есть 30 минут на размышления о никчемности своей жизни.
Обосрался - притворись троллем.
Люди библтотеки пишут. Оптимизируют код в зависимости от разных compile-time условий, в том числе тривиальный тип или нет.
Частенько нужна перегрузка круглых скобок, потому что лямбды и шаблоны. Остальное нахуй не нужно действительно, если ты не задрот. Но плюсы то как раз для задротов и это они себе фич накидали, а такие вот додики вроде тебя сидят гадают а нахуй это нужно. Ну в общем всё на своих местах
Ну ты пряник, это то ясное дело, я же спрашивая как это сделать через систему сборки, не вмешиваясь в системные директории.
Сагать не буду, но нпхуй ты послан.
В спальне твоей мамки.
gcc -c -m32 kernel.cpp -ffreestanding -fno-exceptions -fno-rtti
nasm -f elf32 boot.asm -o boot.o
ld boot.o kernel.o -T linker.ld -o kernel
NASM у меня установлен
Person p;
p.print();
?
А вот это динамическое
Person* p;
p.print();
Нет, это вообще не то.
Ты устанавливаешь не C++, а компилятор. Поставь сначала компиляиор поновее, а если что, убуниу обнови. При компиляции в зависимосьи от компилятора надо прописать -std=c++20
Ну так руками и собирай - make или autotools.
Спасибо
Так программу или функцию?
Если программу, то в каком виде она принимает зночение, в виде строки чтоли?
Если функция, то обчные прегрузки и никакие шаблоны на хуй не нужны.
Функция принимает любое значение любого типа, в консоль выводит либо "trivial", либо "class". Всё.
А ты смешной
Если что, шаблон функции это не функция. Для каждого набора параметров шаблона канпилятором канпилируется отдельное тело функции. Ты же просишь просто функцию, которая принимает что угодно. Куча перегруженных функций в этом плане, ни чем не отличаются от шаблона
Я про функцию в смысле интерфейса. У тебя есть f и ты можешь использовать () для ее вызова. Как там внутри реализовано никого ебать не должно. Ты же когда пользуешься функцией из сторонней библиотека не подозреваешь, шаблон она или нет.
Константный объект нельзя изменить неконстантными методами. Конечно можно через const_cast, но это уже специально, так что не считается
Я когда прльзуюсь функцией из стороней библиотеки всегда знаю, шаблон она или нет. Точнее, она всегда не шаблон. Потому что функция и шаблон функции это разные понятия.
>Я про функцию в смысле интерфейса
Мне по хуй глубоко про что ты, научись четко формулировать мысли
С моей точки зрения как новичка без коммерческого опыта:
1. Нет абстрактных прослоек, можно проследить путь от машинного кода до высокоуровневых сущностей. То есть, например, у меня есть string, и круто видеть как он реализован с помощью более мелких сишных деталей, типо массива char и указателей. В отличие от string в джаваскрипте, где он просто тебе дан и все.
2. Свобода в реализации, можно писать в безопасном стиле как Java, обращаясь к контейнерам методом at(), можно в быстром стиле с помощью оператора []. В расте все объекты всегда муваются и это вшито в стандарт языка, в плюсах мы пишем конструкторы как нам угодно, может хоть в копирующем мувать, а в перемещающем копировать, и никто нас не остановит от этого безумия.
3. Быстродействие, скорость, отсутствие такой приблуды для идиотов как сборщик мусора, смартпоинтеры одно удовольствие использовать.
4. Большая кодовая база, огромное комьюнити, постоянная поддержка и улучшение языка (концепты, рэнджи, корутины).
5. Очень много годноты написано на крестах (операционные системы, игровые движки и сами игры, графические и видеоредакторы, ffmpeg, системы машинного зрения, браузеры), которую интересно изучить. С WinApi также удобнее работать через кресты или си. Конечно на синтаксис и семантику языка это никак не влияет, но создает положительное впечатление и дополнительную мотивацию при изучении языка.
Это всё хаки. Имелось в виду, что без специального вмешательства просто так ты константный объект не поменяешь. Конечно, можно изъебнуться, но если не изъебываться, это таки сокращает количество непреднамеренных ошибок.
> &&
А вот это подробнее. Что имел в виду?
> А вот это подробнее. Что имел в виду?
Это квалификатор метода как const, он означает, что метод могут вызывать только r-value объедки.
Нууууу, как тебе сказать... по теории нельзя, на практике можно
Там еще и недавно рейнджы что то поломали
Вот чем чем, а const никогда не был сильной стороной плюсов
да и чтобы он хоть как то нормально заработал, нужно как в расте, всё изначально конст делать, а если хочешь что то поменять, то явно указываешь что он mutable
> Нууууу, как тебе сказать... по теории нельзя, на практике можно
Ну пример покажи, как оно работает то.
Хз, видимо он написал хуйню. Потому что я проверил, и у константный объекта нельзя вызвать неконстантный метод с &&, даже после std::move
Потому что после std::move тип ссылки будет не T&&, а const T&&. Для изменения таких объектов нужно к методу дописывать соответственно const &&
То есть без const_cast никак.
Да я хуйню написал, счс проверил. Я думол, что временные объекты константны, а по ходу, константен не сам объект, а только ссылка, которую подсовывает вместо такого объекта. Проясню, что я имел в виду:
#include <iostream>
struct SomeClass
{ int someMember; };
const SomeClass& SomeFunc(SomeClass&& someInstance, int value)
{
someInstance.someMember = value;
return someInstance;
}
int main()
{
//вот это сработает
std::cout << SomeFunc(SomeClass{11}, 22).someMember << std::endl;
const SomeClass someInstace {33};
//а вот это уже нет
std::cout << SomeFunc(someInstace, 44).someMember << std::endl;
return 0;
}
> std::cout << SomeFunc(someInstace, 44).someMember << std::endl;
Даже если написать
std::cout << SomeFunc(std::move(someInstace), 44).someMember << std::endl;
все равно не сработает, потому что мы константный объект принимает по неконстантной ссылке, тут явный const_cast нужен.
> что временные объекты константны
Тогда как мы бы их мували?
>Тогда как мы бы их мували?
Вот и я не понимал, как токое возможно, я думал что мувание это чит какойта ебаный
>а нахуя эта перегрузка нужна
Например, чтобы печатать свой тип в cout, перезагрузив <<. Или посмотри на скрине, как SlateUI сделан в анриле - там DSL для декларативного описания гуя сделан через операторы. Еще немаловажная особенность операторов - их можно вызывать без указания неймспейса, это бывает нужно для всякой темплейтной магии.
А либы, получается, на каком-то волшебстве написаны
Плюсовая обертка потоков вообще нищая, но ты можешь попробовать джойн токен, требует спп20.
Гуглится только какаято дичь про конкатенацию строк. Как по английски пишется?
Вообще ты идешь не тем путем, хотеть сделать все средствами стд - удел скриптомакак что тут в треде срут. Подумай чутка и напиши свою реализацию, вопрос то не сложный.
std:jthread
Нет таких механизмов, да и вообще это говнокод. Это где у вас так принято исключения кидать на штатную ситуацию? И ты вопрос конкретнее задавай, потому что если сокеты, то есть асио и там что ты хочешь сделать - можно по-нормальному реализовать через контекст
std::atomic<bool> оберни через std::ref и подай в функцию аргументом.
Можешь чекать эту переменную в условии while. Чё по скорости будет не ебу.
>Вы хотя бы понимаете, почему в плюсах переполнение интов не кидает исключение?
Потому что много чести кидать кита на берег, когда одна планктонина чихнула. Жирно.
Ага, именно поэтому. Тебя кто до этого надоумил? Сам бы ты вряд ли догадался. Кстати объясни ка еще почему переполнение это исключительная ситуация?
>Потому что полвека назад в pdp-11 не оказалось таких инструкций.
Каких именно инструкций? Overflow флаг там есть, лови переполнение на здоровье, если надо.
Проверять флажок переполнения на каждое сложение слишком жирно. Нужен был бесплатный способ, как в мипсе.
Как он его так смог засунуть в public, когда он был private? И какого хуя вообще происходит, он почти нигде не переопределяется, но при этом он вызывается в SimpleScreenObject, НЕ ИМЕЯ РЕАЛИЗАЦИИ, то есть он просто крашнет, например здесь, в методе класса ScreenObject(пик5)
UPD: Вы запостили слишком много файлов
>при этом он вызывается в SimpleScreenObject
при этом он вызывается в SimpleScreenObject(пик4)
фикс
пик 1 - пик4
пик 2 - пик5
>>791942
Кстати в ScreenObject он вообще не переопределяется никак.
Все эти файлы из исходников Far Manager
Вот конкретные файлы:
SimpleScreenObject/ScreenObject
https://github.com/FarGroup/FarManager/blob/master/far/scrobj.cpp
https://github.com/FarGroup/FarManager/blob/master/far/scrobj.hpp
Panel
https://github.com/FarGroup/FarManager/blob/master/far/panel.hpp
А ещё он есть в другом классе, наследуемом от Panel, И УЖЕ В PRIVATE
https://github.com/FarGroup/FarManager/blob/master/far/filelist.hpp#L243
> Вы хотя бы понимаете, почему в плюсах переполнение интов не кидает исключение?
То есть на каждый инкремент надо проверять, не переполнился ли инт? Съеби-ка нахуй обратно в сишарп-тред.
> А если я передам его в конструктор и сохраню
Куда сохранишь? В файл? В базу данных? Фотографию сделаешь на память?
> это нормально?
Нет, не нормально, что ты базу не учишь, а уже вопросы какие-то задаешь. Про ссылки, про правила их инициализации, про продление жизни временных объектов.
>А если я передам его в конструктор и сохраню, на что оно указывать будет
Будет указывать на объект, который ты передал. Rvalue просто показывает, что ты можешь работать с объектом определенным образом. Т.е. если есть конструктор копирования и перемещающий, то если ты передаешь rvalue, будет использован move конструктор. Тут нет никакой магии, физически это тот же указатель, если не вдаваться в детали.
Ты не поверишь...
Я просто закинул исходники и хедеры в проект и одни ошибки линковки
Мне удобней, когда тип слева. Еще бы запись массивов изменить, чтобы объявлялись вот так - int[10] arr. Тип слева это логично, потому шта сначала идет более общая сущность как множество значений, а потом конкретная в виде одного определенного значения. А еще левее можно поставить концепт, как еще более общую сущность.
Спрашивай здесь. Молись, чтобы ответили.
Я до вечера постараюсь посмотреть
Конечно не ответят, а ты что думал? Тут только могут на стандарты дрочить и категории выражений, тут ни у кого ни строчки кода в каком-либо проекте, кроме laba1.cpp
> Где задавать вопросы на подобную тематику?
В гугле https://root.cern/TaligentDocs/TaligentOnline/DocumentRoot/1.0/Docs/books/WM/WM_132.html#:~:text=C%2B%2B%20has%20access%20control%2C%20but,from%20within%20the%20base%20class.
>>791941
> И какого хуя вообще происходит, он почти нигде не переопределяется, но при этом он вызывается в SimpleScreenObject, НЕ ИМЕЯ РЕАЛИЗАЦИИ
Это абсолютно легально. Объекта SimpleScreenObject у тебя никогда не будет, потому что класс абстрактный, то есть его наследник должен обязательно все методы переопределить (ну или он тоже будет абстрактным и уже его наследник должен будет все оставшиеся методы переопределить и т.д.)
Чистые виртуальные функции нельзя вызывать только в конструкторе, потому что тогда PVC будет. В остальных случаях (если я всё правильно помню) — можно.
Насколько я вижу, класс ScreenObject тоже абстрактный, поэтому в том, что в нём вызывается чисто виртуальная функция, нет ничего плохого.
>Насколько я вижу, класс ScreenObject тоже абстрактный
Он абстрактный, потому что унаследовал полностью абстрактный метод и не реализовал его? Если так, то спасибо, все понятно!
23 лвл, работаю на хуевой работе, но есть лишнее время для изучения какого-то направления.
Подскажите, аноны, сколько времени уйдет на изучения плюсов, могу учиться по 4 часа в день, но интересно узнать сколько конкретно в часах уйдет на изучения плюсов.
База кое-какая есть, могу начать изучать ооп, а все остальное подтянется со времен.
Буду признателен за ответ
Изучать что бы что?
>но интересно узнать сколько конкретно в часах уйдет на изучения плюсов.
Для хорошего знания не меньше 10000 часов.
https://www.directive.com/blog/what-is-the-10-000-hour-rule-and-does-it-work.html
Вся жизнь уйдет, но кроме плюсов надо знать кьют, линух, базы данных, и зачастую алгоритмы. Если не западно дрочить литкод, можешь попытаться вкатится.
> сколько вы времени потратили на плюсы
Больше 5 лет.
> что знаете
Сложно оценить, что знаешь. Наверное, основные фичи до 20 стандарта включительно, кроме корутин (они мне кажутся какими-то всратыми).
> есть ли работа
Не на плюсах.
сколько времени уделяешь на плюсы в неделю?
я слышал что порог вхождения на плюсы высокий, но не настолько же, как же так, анон, за 5 лет писанины на плюсах тебя так и не взяли на работку? или ты даже и не искал работу, просто как хобби?
> сколько времени уделяешь на плюсы в неделю?
Не отслеживаю. Могу всё свободное время этому уделить, а могу за весь день и не притронуться ни разу. Если взять среднее арифметическое, то наверное час-два в день.
> так и не взяли на работку
Не хочу писать какую-то парашу на Qt.
> просто как хобби?
Да, просто люблю этот язык.
Наверное, только в нём может возникнуть такая ситуация, когда человек не может спокойно написать конструктор для класса, хранящего две строки https://youtu.be/PNRju6_yn3o
Наверное, только в нём можно сделать пикрил. Это оператор присваивания, который работает в обратную сторону
Ты уже слишком старый для этого, и явно обчитался инфоцыганщины и не понимаешь, что тебе нужно. Плюсы уже не для тебя брат, я без негатива говорю, ты просто время проебешь
Клёвый доклад. Накинь пж ещё что нить такое.
алсо конечное решение было мне будто известно с лекций, а так тоже согласен что второй вариант самый адекватный
анонам, мне 23, вся жизнь впереди, я просто не уверен, что за год изучения плюсов найду РАБотку
За какой нахуй год блять? Это что шутка? Ты понимаешь что минимальное требование на плюсового джуна это топовый тех вуз? Это минимальное. сука. требование. Дальше начинаются вопросы про то что ты из этого вуза смог вытащить, ну в зависимости от твоей прикладухи, это может быть, например, сетевой стек, знания линукса (нет, это не про юникс порн и генту в десктоп тредах), какие-то познания в компиляторах, мб немного математики - и это самое наипростейшее что может встретиться. Заметь мы про язык и его основные технологии даже и не начали говорить, хоть сейчас время останови и дай тебе сто лет, при приеме на работу джуна не будут воспринимать, что он знает плюсы, это просто смешно, сначала посмотрят на твой бекграунд и кто ты вообще
>при приеме на работу джуна не будут воспринимать, что он знает плюсы, это просто смешно, сначала посмотрят на твой бекграунд и кто ты вообще
Это не приём на работу, а буквально шлюха с аватарки так выбирает себе ёбыря: "смотрят на твой бекграунд и кто ты вообще"
Все вы блядь умные, когда ответ знаете заранее.
>>790704
Я начал думать над тем, а не начать ли алгоритм с проверки наличия самих данных в ноде. Но все время сбивало с толку, что если нода nullptr, то обращение к ней по ее полю будет UB. И тут меня как озарило, а почему бы не проверять саму ноду на nullptr. Если nullptr, то аллоцировать новую ноду с данными, если нет - сравнить данные и получить в зависимости от сравнения указатель либо на правую либо на левую ноду, после чего с этим указателем повторить алгоритм. И начать такую проверку можно прямо с голову. И вроде получается такое простое и чистое решение, и не понимаешь, почему раньше до него не дошел.
На пике - говнокод метода insert() прошлой попытки (метод работает только если голова не пустая).
Бля я реально не понимаю зачем ты от левого/правого берешь. Можешь код структуры всей дать?
У тебя может с этого гореть жопа и ты можешь всячески изъебываться называя это как тебе хочется, но реальность такова. Без института и хорошего образования, без каких-то выделяющих тебя среди остальных людей достижений на профессиональном поприще нехуй тебе лезть туда где люди пишут на плюсах. Особенно если ты 23 летний рнн дебил который вчера проснулся и понял что пора бы и за ум взяться. Это просто курам на смех все эти потуги
Сделай, кто мешает
Ну например, в текстовом режиме переносы строк записываются такч как ос это требует
Винда это кал.
откуда я знаю что ты читаешь? у меня ооп и полиморфизм и вообще
Потому что бинарный и текстовый это самые популярные форматы данных с которыми больше всего ОС и программисту приходится работать
Аналогии не работают.
Да, самые популярные. Чё дальше? Что сказать-то хотел?
>это самые популярные форматы
Правильнее будет сказать, типов файлов всего два, текстовый и бинарный (всё остальное кроме текстового).
текстовый и не текстовый
> типов файлов всего два
еще откровения будут?
Это не типов файлов два, а текст как самый популярный формат вынесен в отдельный вид обработки и остальное говно как бинарный.
Пиздец.
Ютуб опросом пердиксов на тверской. Блять что за вопрос? Понятно что ты дебил, но не настолько же
А чё, тебя спросить должны были?
>не настолько же
Ты не представляешь насколько
Просто формулировка "популярный формат файла" на редкость ебанутая.
В чем она ебанутая додик если процессора в основном с текстом и работает? Ты прежде чем предъявлять что-то подобное хотя бы какие то минимальные представления заимей. Тебя например не удивляет, что в языке даже отдельного примитива для работы с бинарными данными нет, а есть char который оо нихуя себе ascii символ? Ну то есть единица текста.
И вопрос ээ ыы слыште а че файлы на текст и бинарные разделили? -- это не на редкость ебанутая формулировка у зумира?
Я всего лишь текст на мониторе.
>процессора в основном с текстом и работает?
Чоооооооооооооооооооооо?
>минимальные представления заимей
Ну конечно, один ты умный, а все вокруг дураки ебаные.
>примитива для работы с бинарными данными нет, а есть char который оо нихуя себе ascii символ?
Че несешь, ты че, ебанутый чтоли?
>И вопрос ээ ыы слыште а че файлы на текст и бинарные разделили? -- это не на редкость ебанутая формулировка у зумира?
Очко чебе раздели пёс. Я говорил что формулировака "популярный формат файла" ебанутая.
Ооо нихуя себе??? А когда я тебе скажу что весь интернет на http стоит ты вообще со стула упадешь? Не уверен что ты слышал про http, а то ты какой то вакуумный слегка, но это если что протокол для передачи гипертекста, ака "популярный"
Ну конкретно ты дурачок, не понятно зачем здесь сидишь и позоришься с каждым своим высером, просто съебись уже
Напиши функцию которая копирует какой-нибудь бинарный файл в буфер, например жипег, сохраняет его под другим именем и посмотри на свой же код, имбецил
Какая разница что ты там говоришь если всё какой то идиотский бред
Я не успеваю за полётом твоей фантазии. У тебя не последовательно мысли сформулированы.
>а если я тебе скажу
>сделай то сделай это
Иди на хуй просто, додик)
А зачем его выносить, это такой же поток байтов. Что мешает просто открыть файл и читать байтики.
Ну смотри, тебе на ебало летит тугой поток мочи. Как ты понимаешь, что этот поток уже иссяк и нужно идти за добавкой в другое место?
Реальный вопрос с собеседования кстати
Это только если это виндоус процессор, лол кек.
Дадад, думал шланг компилятор. Мне нужен компилятор под винду, чтобы компилировать в студии, а потом компилятором, и сравнивать результаты и сообщения об ошибках.
Это игрушечный сайт. Я о программах по типу IDA, HIEW, HT, OllyDbg и тд.
Переписал. Больше так хуёво не пиши, чел. Попробуй в /бэ/ потренироваться, что ли? Так за каждую ошибку изложения тебе полный рот ">пук"ов насуют. Будешь даже с горящим пердаком писать идеально чисто, ровно, и понятно, лишь бы оппонента позлить отсутствием изъянов.
>>764593
> Куда уж там всяким Stardew Valley, римворлдам, андертайлам, майнкрафтам и прочим Touhou, сейчас аноним с харкача вам расскажет, что есть смысл пилить в одиночку, а что нет.
Ты сам себе противоречишь, действительно. Ты описывал, что SDL не стоит брать, потому что нихуя полезного на этом не сделаешь. На контраргумент про сложность, ты ещё раз сказал, что НИХУЯ ПОЛЕЗНОГО. Упомянул Марио.
В одного стоит пилить игры только по типу Марио, да.
Да, я, аноним с харкача, сейчас расскажу, что есть смысл пилить в одиночку, а что нет.
Задумки у всех великие, но идеи ничего не стоят. Приведу цитату, что тот чел использовал, но полностью: "Исключения из некоторого правила подтверждают то, что это правило вообще говоря существует". Никто не пишет игры типа Майнкрафта в одиночку. Почему? Потому что это очень сложно. Не невозможно, да, но требует непомерных усилий.
Почему я, анон с мылача, могу указывать писать ли всем на SDL или взять что-либо пожирнее? Потому что если ты вообще спрашиваешь "А на чём мне писать?", то мотивации сделать следующий Майнкрафт в одиночку у тебя точно нет.
инб4, да я видел ниже ветку, не слепой.
Ну вот, было так сложно что ли? Я не так много высрал, но вроде бы чище.
На втором пике я все-таки попытался использовать наследование, все работает, но пришлось использовать уродливую заглушку <int>.
Все, адекватных идей больше не осталось.
Будто на первом кртп.
Че эта мразь до кота доебалась? Вот сидишь себе чилишь, абсолютно никого не трогаешь и подскакивает какая то чертила сношать тебе мозг как будто так и нужно
Я хуй знает что такое CRTP, но выгледит пиздец как не логично. Почему sound не определять в классах Cat_tag и Raven_tag, а в Animal сделоть void sound() { T::sound(); } () либо T().sound() если она не статик, там по ситуации). Т.е. стротегия
> Почему sound не определять в классах Cat_tag и Raven_tag, а в Animal сделоть void sound() { T::sound();
Да, кстати, вполне неплохо.
Для собеса. Я серьезно, компилятор оптимизирует виртуальные функции, инлайнит те из них, где тип можно в компайл-тайме определить, скорость получается больше, чем с CRTP.
enable_shared_from_this
> компилятор оптимизирует
Но далеко не всегда
> скорость получается больше, чем с CRTP
Очень интересно как это возможно
Хорошо, что есть этот тред...
У нее может быть гнездо гдето рядом
Во многих языках у циклов просто метки можно делать и явно показывать из какого ты брикаешься
Братишка, ну если ты эмбеддед и драйвера, то и спроса за goto с тебя нет.
А в продукты не надо такое тащить. Лучше подумать и избавиться от вложенности.
Аетихуерн
Ну так попробуй писать программы, в которых надо выполнять операций чуть больше, чем консоль рисовать.
UB.
Это пиздец. современный шланг сгенерировал говно на 80 строк, да и еще юзает SSE регистры. Почему так?
Я не эксперт и не пытаюсь сейчас защитить clang, но ведь скорость работы не от количества инструкций зависит. Точнее, не только
ваще по хуй
здесь шланг видимо собрался максимально эффективно считать факториал от 109
(
n
^
2
)
Почему скопировался?
оптимизация
и где ты там видиишь каждую пробежку по массиву в отдельной функции?
Ты под пробежкой подразумеваешь один цикл for? Я имел в виду пробежку в двойном цикле.
Для меня писать отдельную функцию на каждый двойной цикл (и вообще на все, что не вызывается более одного раза) - это перебор. Чем миллион микро функций лучше лапши?
хз у соевичков щас так модно. еще лучше каждую функцию в отдельный файл перенести
второй пикрил добавления елементов.
третий удаление елемента из стека.
что не так, могу добавлять елементы, но когда пытаюсь удалить, то выдает ошибку
помогите
Ну во первых, что такое z?
Во вторых, зачем ты пересоздаешь массив при удалении элемента?
Просто берешь последний элемент стека, вызываешь у него деструктор, указатель стека уменьшаешь на 1
В третьих
> выдает ошибку
В таких случаях прося помощь лучше писать какую конкретно ошибку выдает
>Это противозаконно?
всмысле быть дураком
>Да, у нас на проекте запрещены эксепшены
Лично мне ваш обосанный проект не интересен. И то что у вас там что-то запрещено, не значит, что это плохо.
на первом пике цикл не делоет ничего совсем
на первом пике size побольше. ) это как-то слишком мало
А почему при добавлении, ты стек не ресайзишь, а просто записываешь в уже выделеный кусок памяти элемент, а при удалении элемента ты еще и размер стека уменьшаешь? Какова логика вообще? Я думаю, на третьем пике все что внутни if(z > 0){ ... } удолить к хуям и сделать просто z--;
стало конечно лучше, да.
похуй что он пишет за границы массива. (size == 0 всегда, z = 0 < size -1)
int это 32 битное число. Нахуя юзать 128 бит SSE регистры? Тем более, там вроде на переключение между обычными и векторными инструкциями нужно какое-то время.
Ты ТОЧНО знаешь, что такое SSE регистры, почему они такие большие и зачем нужны?
Вот стл контейнера берут шаблонным параметром аллокатор<Т>.
Но как они используют его для выделения памяти под узлы, если это узловой контейнер?
я пробовал посмотреть как устроен std::set. Не понял.
Расскажешь. GCC тоже может раскручивать циклы и векторизировать их, пусть он в этом случае этого и не сделал.
https://gcc.gnu.org/projects/tree-ssa/vectorization.html
> Даже если не знаю
Просто твои первые два предложения
> int это 32 битное число. Нахуя юзать 128 бит SSE регистры?
На фоне того, что из себя представляют SSE регистры, звучит очень смешно.
Наверное, всё же не надо говорить о том, чего не знаешь.
Уже писал как то об этом, повторюсь.
Сравнивал работу математических либ с ручной векиоризпцией ссе 2 4 и авх 2 и простой скалярной. Так вот с 03 на новых гцц разницы в производительности нет. Значит гцц сам все векторизирует как надо.
Экзактли
Ну на компилятор всё же стоит полагаться. Всё таки к SSE вроде бы стандартного обращения нет, придётся либо через интринсики (для каждого компилятора + стандартную версию на всякий случай), либо через язык ассемблера, что, в общем-то, ни разу не удобнее.
Проще написать обычную версию и надеяться на то, что компилятор разрулит.
>Всё таки к SSE вроде бы стандартного обращения нет
У gcc и clang есть vector extensions. У msvc - только интринсики.
https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
>Оптимизм и отвага
Они реально векторизацию хорошо пилят последние годы. Раньше, например, для float3 надо было делать отдельный вариант класса для стековых переменных, с выравниванием по 16 байт, иначе компилятор тупил и делал выгрузку в память из регистра, а теперь он в 90% случаев все через регистры разруливает.
На крестпх, шарпе, жабе, жс, питоне, делфи. Зависит от задач.
Смотря от задач
на плюсы идут:
- если другие альтернативы не устраивают
- при специфических требованиях
- при высоком энтузиазме автора проекта
На электроне
Работу хочу сменить осенью, потихоньку начинаю ковырять хедхантер.
Бля братуха, ты откуда такой смешной взялся? Все знают что в рашке вакансии на плюсах это либо высокий грейд в бигтехе, либо заводы и нии. Какой еще фидбек по конторам дать? Ты ку ку
Ну хуй знает. Я так HH смотрю, есть всякое на скромные 130-170к. Дохуя всякого микроконтроллерного при этом, что удивительно. То ли популярно, то ли просто народу нет, вот и висит.
> 130-170к
Ну так заводы и нии. Там тебе по "результатам собеседования" предложат 100к, чай, печеньки и дружный коллектив
интересные задачи забыл
uint64_t fullNumber = ...;
uint32_t low = fullNumber & 0xffffffff;
uint32_t high = fullNumber >> 32;
cppreference
>>803722
не поленился и нашёл этот реп
https://github.com/i-voted-for-trump/is-odd/tree/master
Нет.
Охуенно же, что 100500 объектов в глобальных переменных создаётся без участия main() рантаймом плюсов. Можно в них вообще всю логику писать, а функцию main() оставить пустой.
А тебя ебет? С хуяли оно должно быть функцией?
В ос юникс есть 3 стандартных потока: поток ввода, поток вывода и поток ошибок.
Вот для них в плюсах есть 3 стандартных объекта потока: cin, cout и cerr.
И в чем не правы? Высокоуровневая легкочитаемая абстракция. Будь моя воля, весь код бы в такие обернул.
Шарпы
Только что окончил школу, поступил в хороший вуз в топ 5 в рф точно есть. Решил в качестве изучаемого языка на первое время избрать плюсы, т.к. они на первом курсе будут. Начал читать книжку Липпмана из шапки, дошёл до указателей и главный вопрос на данный момент – как и для чего это применять? Наверное, мне стоит задачки какие-то решать по теме, так что вопрос к анонам: как и где лучше закреплять полученные знания о языке? Микро-задачи из книжки всё ещё не дают понимания, в каких ситуациях рассматриваемый предмет нужен.
Пиши свои велосипеды из стандартной библиотеки
Разбирайся как там в кишочках все встроенно и почему именно так
Начни с какого нибудь вектора, затем все остальные структуры данных постепенно
Там и про итераторы, и про аллокаторы, и про мув семантики узнаешь предостаточно
Пиши чтобы хоть как то работало, потом улучшай
>не зная зачем и как
Зная вообще-то. Погромистом хочу стать. Теперь вот хочу после питуна освоить низкоуровневый язык, потому что мне это больше импонирует.
Цели пойти работать сейчас нету, так что буду ещё года 2 неспешно изучать то, что больше нравится. Так говоришь ещё, будто ты в 18 лет был охуенным вундеркиндом, а я, начав вкат чуть позже, всё просрал.
>>810173
Попробую, сенкс
> Я в твои годы знал половину си
А вторую половину выучить не осилил? Опять набегаторы-фантазёры из жс-треда, штоль?
Тут все знают, что Си на 98.5% учится ну максимум за неделю, потому что он прост как палка, остальные полтора процента это продвинутые фичи, которые узнаёшь во время непосредственно написания своего и чтения чужого кода.
чет вспомнил как на первую олимпиаду в шкиле пришел еще не зная функций но зато умел дефайнить макросы..
Вкатунишка, тут все кроме тебя знают что когда кто то говорит что знает язык нейм имеют ввиду как самый минимум его стандартную либу. В случае си тот чел наверное имел ввиду еще и posix с тех самых пор как юникс это ниша сишной параши. Потому что кукарекать я знаю такой то язык программирования и при этом без иронии иметь ввиду ключевые слова и синтаксический сахар могут разве что малолетние пердкисы с курсов
Чего? Какой объект функции?
Будешь востребован в нии и на заводах за соротыгу, сотыга потолок. Возможно сейчас самый простой вкат это что-то связанное с военкой (наверное и только кстати) и там возможно даже платят чуть получше. Но сам понимаешь почему так и куда твой труд пойдет дальше
На войну, ты имбецил совсем чтоли? Полагаю все таки тебя даже на завод не возьмут
> На войну
Как будто это что-то плохое. Что плохого в том, что результаты моего труда получат применение в военных действиях?
> Ну и чем таки пахнут ?
Думаю будут точно так же пахнуть как и те деньги что у меня сейчас есть на счету, дисплеем телефона, когда приложения банка открываешь, смотришь на цифры и нюхаешь, точно так же кста пахнут как и телефон вообще без запущенных приложений
Ну если ты рассуждаешь с эгоистичных позиций мол тебе похуй, то рассуди что это начало и конец твоей недолгой карьеры, тебя даже в рашке будут отменять, не говоря о том что в зарубежную контору с этой строчкой резюме ты не устроишься примерно никогда
Лучше на cmake переведи свой проект, проще будет.
Классы и есть объекты, это ты путаешь.
ООП называется потому что это Объектно=Классо Ориентированное Программирование. А твои созданные в риалтайме объекты это совсем другое, просто то же самое слово используется, вот ты и запутался.
Ну ты и даун. Забуть о крестах, ты никогда не выучишь ничего сложнее JS.
Сишник-скуфидон, ты? Я понимаю, что для программирования микроконтроллеров твоя прога может быть нечитаемым шедевром хакинга. Но в серьезных проектах код должен быть понятным и поддерживаемым.
- кидать эксепшен.
- принимать в коструктор аргумент с ссылкой/указателем на то, куда записывать статус успеха или ошибки.
- писать пустой конструктор и отдельно метод init(), который надо явно вызвать сразу после создания объекта.
ну самая простая идея:
запрещать конструктор и писать свой метод make_shared_programm() который может вернуть ошибку
Да, именно через функцию это и делают.
Если я не ошибаюсь, то знание в qt, требуют на работе.
Ну ты спрашиваешь что тебе изучать выбирая между графическим движком и IDE.
В целом лучше начать с IDE, в блокноте код набирать будет неудобно.
Начни с плюсов, а после уже поймешь какую хрень ты спросил
> Если я не ошибаюсь, то знание в qt, требуют на работе.
с этого предложения вобще выпал
Моя цель - создание ботнета на boost asio.
Поковыряйся как кутя работает, там в разы проще изначально подобное писать. А так и сам ковырял асио, но сам ничего сложного на ней не напишу.
Создай поле в классе, в котором будет храниться ожидаемый и текущий статусы шейдера и коды/текст ошибок. Шейдер загружен, шейдер скомпилирован и т.д. В конструкторе такие штуки лучше не делать, там вообще желательно только поля инициализировать и все.
>Что мне изучать, OpenGl или QT Creator ?
Если у тебя так стоит вопрос, то Qt. Трехмерную графику ты скорее всего не потянешь по интеллектуальным показателям.
Неплохой пример, не ожидал от тебя.
Вообще про контроллеры полгостью согласен, но ты все равно не прав. Читаемый код не имеет ничего общего с тем говном выше.
Бля нахуй тебе это надо брат? Ну ты че не пацан чтоли? Иди лучше с телочками в падики позависай, пивандоса пососи, в общем не занимайся ерундой всякой
Что там тебе понятно? Куда ты лезешь блять чукча с продленки? Тебе не в асио разбираться надо а учебник для дошкольников почитать, где расскажут как в твоем альбоме для рисования начертить диаграммы.
Ботнет на асио у него цель ору нахуй, а страничку вконтакте ты уже взломал?
Пожуй гавна с лапаты.
Бля нахуй тебе это надо, сестра? Ну ты че не телочка чтоли? Иди лучше с пацанами в падики позависай, пивандоса пососи, в общем не занимайся ерундой всякой
>с пацанами в падики позависай, пивандоса пососи, в общем, занимайся ерундой всякой.
Занятие для глупых людей.
То ли дело ботнеты писать
Это месные шизоиды срут так, не обращай внимание.
Ты не понимаешь, что такое "глобальная переменная"?
Чел может ты в другой тред пойдешь? Пиздец средний айкью проседает, стыдно
УБ кидать исключение из конструктора? на каком-то сайте читал, что так и делают. Какое же уебище эти плюсы, даже собственная фича - УБ
Он троллит
> Лично Страуструп на лицо нассыт
Неправда, эксепшены в конструкторе одобрены священным писанием
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-throw
Лучше научись сосать хорошо. В жизни пригодится больше чем то, о чём ты здесь спрашиваешь.
Я начал читат. Думаю года через три осилю.
> не говоря о том что в зарубежную контору с этой строчкой резюме ты не устроишься примерно никогда
До-до-до, еще скажи даже если у чела будет семь пядей во лбу в этой, с глубокими познаниями в этой сфере
тупая ты укро-либераха
Там нету библиотеки для linux. Предлагают скомпилировать репозиторий из github :/
Ладно, хуй с ним. Мне надо проверить, что юникод строка содержит только латиницу + цифры и спецсимволы
Ну и де все наносеки? Бамп!
Вот теперь думаю, начать освежать всякую поебень по крестам (понятия не имею, что могут спросить, сказал хрюше, что из описания вакансий вообще нихуя не понять, получил ответ, мол, это потому, что у нас проектов много и команд, на любой скилл так сказать), которая мне нахуй в текущей работе не упала или же забить хер.
>В qt разве "глубины" С++ не применяются ?
Хуй пойми. Непонятно, что вообще может быть "глубоким знанием С++". Если занюхивание всех пуков, выдаваемых комитетом по стандартизации, то я такой ебалой не страдаю, мне работу надо работать. Когда вижу что-то, что можно применить в своих проектах, применяю.
Конкретно у меня на стороне сервера работа с сеткой (общение со всякими устройствами), БДшкой и предоставление данных подключающимся клиентам. Никаких глубин C++ в этом нет. Была ещё многопоточность, но больше из-за умозрительных выводов. В какой-то момент подумал и выкинул нахуй, только БДшку пришлось подкрутить, чтобы шевелилась побыстрее.
Ноэксепт это база, шизы это кто с эксептами собирает.
Ну давай, верни std::variant из конструктора.
Пиши на джаваскрипте
target_include_directories делает доступным включение через обычные кавычки.
PS Скачал вспомогательную либу с гитхаба (которая тоже на CMake) и хочу её поместить в подкаталог своего CMake проекта. А эта либа обращается к своим частям через инклуды с угловыми скобками.
#include <...> и #include "..." ничем не отличаются, должно и так и так работать
#include "" ищет в корне проекта где лежит исходник (если путь относительный),
#include <> в каталогах которые настроил в своей IDE
нет, это одно и тоже
просто правило хорошего тона, внутренние для проекта хэдера через "...", а системные\внешние зависимости через <...>
Мелкософт может для std такое допускает в качестве помощи, но в целом не одно и тоже. Я точно помню когда в студии на с++ писал, всякие левые либы инклудили через угловые скобки в опциях (или в настройках решения) указывали свлку этих либ.
А через кавычки он ищет по дефолту из текущего каталога или по абсолютному пути.
Извиняюсь
https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
https://stackoverflow.com/questions/21593/what-is-the-difference-between-include-filename-and-include-filename
Я симейк знаю плохо, но как мне кажется в папке с той либой что ты скачал должен быть симейк файл для инклюда. Или сделать его самому.
Я так понимаю, что просто прописать инклуды не прокатит, потому что там какие то зависимости есть. тогда я пошел по, как показалось, более простому пути. По инструкции сборки либы. Сделал все как надо, но у меня падает сборка на этапе линковки monero-project. Ругается на boost filesystem unresolved ... Че делать? У меня если че установлен libboost-all-dev
Короче ебал рот этой хуйни и плюсов тоже. Собралось под винду без проблем. Хуй знает че на линукксе не работает
Я спиздил кусок cmake из проекта. Но теперь мне надо vcpkg притянуть. СУУУУУУУУУУУУУКА. Работа с зависимостями это худшее, что есть в плюсах
> Почему opengl такой сложный
Опенгл очень простой и всю самую сложную часть работы делает за тебя. Поэтому считается за JS в мире графики и сосёт у вулкана и прочих дайректиксов.
> Что бы нарисовать одну простую фигуру нужно очень много кода
Посмотри сколько кода нужно для того, чтобы вывести треугольник на вулкане, приятно удивишься. И сколько там всего надо знать тоже на досуге почитай.
>Посмотри сколько кода нужно для того, чтобы вывести треугольник на вулкане
Изучив информацию, могу сделать вывод о том, что Sdl и SFML - это именно то, что мне нужно .
https://github.com/meltwater/served/blob/master/src/served/net/server.hpp
IP- адресов в общем случае может быть несколько, по одному на каждый сетевой адаптер. Хочешь слушать запросы только через один конкретный адаптер - указываешь его IP. Хочешь слушать только локалхост - указываешь localhost или 127.0.0.1. Хочешь слушать сразу все адаптеры - указываешь 0.0.0.0, обычно делают как раз так.
> то рассуди что это начало и конец твоей недолгой карьеры, тебя даже в рашке будут отменять, не говоря о том что в зарубежную контору с этой строчкой резюме ты не устроишься примерно никогда
Ебало ученых из Третьего Рейха и Японии представили, когда им на западе красную дорожку постелили после окончания второй дедовой? Я просто охуеваю в каком вы идеалистическом манямирке живете.
Если тот анон станет топ 1 в своей сфере и его труды убьют миллионы человек, то он станет одним из самых ценных кадров в мире.
Тупорылые старые свиньи зачем вы мне пишете этот бред? Ты лысый скуф живёшь всю свою жизнь в НИИ в пидорахе какая там тебе разница что там на мировом рынке?
Бтв, да, байтослесарь == учёный, ебало представляете, откуда у тебя столько гонору обезьяна клавиатурная? А мир живет уже давно не так как ты себе в своем селе нафантазировал, ну что перед свиньёй бисер метать, знающие люди все понимают, а те кто нет - тем и не нужно
Почему все игнорируют vulkan-hpp?
Даже при использовании плюсов, используют чистый вулкан, плюясь на плюсовые биндинги
Большинство людей\проектов которые я встретил за свой личный опыт
если это не так то расскажи о своем опыте
Потому что плюсовики не умеют в апи
Ну вот кому нахуй в голову смогло придти, что пик 2 лучше пик 1?
Прибавь к этому плюсовую магию, которую чтобы понять нужно самостоятельно идти смотреть кишочки
Ну и самое главное что нет документации, офф доки не используют биндинги, соответственно часто возникают проблему как сделать простую вещь
Помимо всего прочего, 2 вариант это буквально просто обернули все в неймспейс, метод вместо функции, просто сизифов труд.
Специально для тупых в танке: исключения должны кидаться только в исключительных случаях. Нет смысла делать бенчмарки с выбросами исключений, потому что не важно, как долго будет обрабатываться это исключение. Важно, как быстро будет работать наиболее частый случай, когда все операции проходят без ошибок и исключений.
>Важно, как быстро будет работать наиболее частый случай, когда все операции проходят без ошибок и исключений.
Как раз таки исключения тут и срут
Добро пожаловать во взрослый мир, ЗЕРО КОСТ это миф
А когда ?
Например файл Button.cpp с классом Button нужно для него создавать файл Button.h, в который нужно вынести переменные глобальные ?
Тогда, когда объявления из одного места собираешься юзать в другом. Т.е. почти всегда, кроме исходника с точкой входа.
Допустим всё что я хочу сделать, это взять из swapchain картинку, получить на cpu к ней доступ и самолично изменить пиксели на этом изображении, затем эту картинку отправить сразу на отрисовку в экран
И я вот не совсем понимаю, нужен ли мне в таком случае вобще pipeline?
Могу ли я как то без него сказать вулкану: вот данные для image валяются, на экран их покажи
зачем? хочу написать софтварный рейтрейсер простой. Знаю что есть всякие sdl и так далее которые позволяют это же сделать, но я хочу попробовать с помощью вулкана такое провернуть
При чем тут софтварный и вулкан?
Пайплайн нужен в любом случае. Вот без свапчейна можно обойтись и рисовать в файл, например.
Я хотел самолично на цпу все рисовать, вулканом я хотел просто текстурку получившуюся на экран вывести
> пайплайн нужен в любом случае
Эх(
Хотя знаешь, я поспешил с отаетом, потому что идея кажется мне бредом.
Я рейтрейсер писал на вулкане, и рпботает нормально, а на цпу в 2023... ну это шляпа.
Возможно есть какой тот маневр, посмотри сэмплы нвидии что то про совмещение вк/куда/опежл, мб поможет.
>идея кажется мне бредом
так оно и есть, чисто в учебных целях всё пишу
просто не хотелось всё в файлик писать, думал может что то похожее на реал тайм даже получится
raytracer in one weekend
В линуксе собираю с -wl, -rpath, ./ и либы ищутся начиная с текущей директории.
Как ьакое же в мсвц провернуть?
Если внешний интерфейс либы написан на C, можешь собирать другой проект чем угодно. Но если он на плюсах, тогда не то что компилятор должен быть тот же - версия компилятора должна быть такая же.
Это пиздец........
И мне интересно как на новые стандарты переезжают. Ладно, если код хороший, то надо просто пару суток все пересобирать. А если че то вырезали в новой версии? Все? Навсегда на старом компиляторе надо сидеть?
Пишут огромные портянки препроцессорных условий с костылями для самых распространённых компиляторов и такие же портянки в скриптах сборки. Пиздец, да, а куда деваться?
>>831599
Просто переписывают код так, чтобы не использовать вырезанные фичи + фиксят там, где сломалось. Если слишком сложно, копипастят прямо в проект исходники прошлых версий стандартной библиотеки.
Если я правильно помню, то abi это про то как искать линкеру функции из разных неймспейсов, хедеров и прочего. Это же не должно влиять на какие то фишки компилятора, не должно никому мешать. Так почему давно так не сделали?
Или беда в том, что у каждого компилятора своя библиотека и наличие одного интерфейса проблему не решит?
Только посмотри на этих пидорасов. Я скорее поверю в то, что они думают о том, как бы ещё затраллить программистов на C++, чем о решении насущных проблем с ABI.
Как через смэйк? Приведи пример.
@
ТРЕБОВАНИЯ: ОСНОВЫ ПХП, ОСНОВЫ ХТМЛ+ЦСС
@
ВИЛКА: 50-85к
JUNIOR C++ CV SOFTWARE DEVELOPER
@
ТРЕБОВАНИЯ: C++, boost, cmake, вышка, алгосы, openCV, алгоритмы обработки изображений и видеопотока, опыт работы в сфере
@
ВИЛКА: 40-50к
Клоунский мир.
Ну и мрази, требуют быть не совсем овощем, которого надо будет с нуля обучать всему
только опыт странно требовать
Добро пожаловать во взрослый мир, вебкамщица ещё больше обоих вместе взятых получает
>вебкамщица ещё больше обоих вместе взятых получает
Ну траллировать меня не надо, а вот по поводу ЗП придется подумать.
Наверное, легче пойти на пхп круды и сразу лутать бабки, параллельно развивая свои байтоебские проекты, чем сразу идти в байтоебание и доедать хрен с солью. На западе, смотрю, ситуация с этим немногим лучше.
Как по другому? В gcc и clangе они давно уже зеро-кост. Полно статей и тестов, которые это подтверждают, почитай на досуге.
> В gcc и clangе они давно уже зеро-кост.
Ага, если их совсем никогда не кидать
Но тогда можно и просто выкинуть их нахуй из проекта
> Полно статей и тестов
И каждый год их по штук десять выходит, каждый раз с разными результатами
> Чем хочешь заниматься?
Какой-нибудь системщиной или сетевухой.
> Чем обосновано твое решение?
Просто всегда нравились плюсики.
>Какой-нибудь системщиной или сетевухой.
>Просто всегда нравились плюсики.
Сейм, но когда я смотрю на вакансии, то просто безнадега накатывает.
Бамп
-L -l
Когда уже симейк господа раздупляться и поддержку модулей добавят?
Сколько еще лет примерно ждать?
Вот оно как, ну хоть дети мои порадуются модулям современным
Как стоит передавать в функции структуры? Допустим у меня есть struct vec3f {float x, y, z;};
Нужно ли его везде принимать по ссылку или можно со спокойным сердцем копировать или это как по производительности может ударить и лучше такого не делать?
Вобщем в такой операторе: vec3f operator+(vec3f, vec3f); Надо по ссылке передавать аргументы или лучше и по значению?
вроде как 12 байт это же достаточно маленькая структура, в том же го советуют не боятся большие структуры по значению передавать, а в плюсах мне сложно получить однозначного ответа
Зависит от функции и от структуры. Определись с тем что у тебя функция делает с этой структурой и как живет сама структура. Если там какой-то большой объект, то разумеется его лучше передавать по ссылке, но в то же время помни, что ссылка может протухнуть, когда ты создал объект в скоупе, вызвал свою функцию, а у объекта вызвался после этого деструктор. Еще не стоит забывать про мув семантики, оптимизации компилятора и прочее прочее. В общем не еби себе пока голову этим, просто пиши код
>Зависит от функции и от структуры.
Ну вот структура это вектора, а функция - оператор сложения
> Определись с тем что у тебя функция делает с этой структурой и как живет сама структура.
Объект всегда переживает функцию, так что на время жизни пофиг
> Если там какой-то большой объект, то разумеется его лучше передавать по ссылке
Ну вот мне бы понять когда обьект уже достаточно большой чтобы его по ссылке везде передавать. Вектор 12 байт еще ладно, а матрицу 3на3 на 36 байтов уже большая структура или нет?
> > Если там какой-то большой объект, то разумеется его лучше передавать по ссылке
> Ну вот мне бы понять когда обьект уже достаточно большой чтобы его по ссылке везде передавать. Вектор 12 байт еще ладно, а матрицу 3на3 на 36 байтов уже большая структура или нет?
Когда профайлинг показывает что в этом месте у тебя проеб по производительности.
Передавай по конст ссылке.
Вобщем если структура меньше 64 байт, под 02 разницы почти нет
буду передавать по значению
> что ссылка может протухнуть, когда ты создал объект в скоупе, вызвал свою функцию, а у объекта вызвался после этого деструктор
Спешите видеть, фантазер итт
Анон, сейчас смотрю лекции по плюсам Константина Владимирова, и мне чот люто доставляет на плюсах не пишу btw, другой стек, прост когда лень читать что-то более полезное перед сном смотрю лекции/доклады по разным темам.
Есть ли подобные лекции на английском? Ну т.е. и чтоб и объяснял годно, и чтоб смехуёчки присутствовали.
Как у тебя ссылка протухнет, когда ты ее передал в функцию? Она никак не может протухнуть, ВЕДЬ ТЫ ССЫЛКУ ПЕРЕДАЛ В ФУНКЦИЮ, у тебя функция в скопе объекта, это аксиома и всем очевидна, а ты просто выдумал ерунду.
Хуевый пример. Лучше покажи на рехеше/реаллоке массива.
Дерьмо хватит позориться, тред и так лоу айкьюшный, еще ваши студенческие подсеривания читать
>про потоки расскажут
>вызывать поток с ссылкой, зная что вызовется деструктор
Пока что только ты позоришься.
Ебло что ты несешь, в этом и поинт этого примера, чтобы вам вкатунцам даунцам пояснить что и такое бывает, но ты видимо запутался как всегда и пытаешься тут нелепо задним проходом догнать
Пиздец, просто не делайте так и ваши ссылки не протухнут. Есть какие то реальные примеры проёба ссылки?
Ну это база. Про инвалидацию нужно помнить.
Мир спроса и предложения. Или экономику прогерам учить запрещают?
>Есть ли подобные лекции на английском?
К сожалению видимо нет, по крайней мере я не смог найти ничего похожего
Аналогов его магистерского курса вобще видимо не существует
ну или их не записывают для ютабов
Максимум только есть пару докладчиков прикольных, которые на всяких cppcon'ах выступают
но их сам Константин Владимиров на лекциях и называет
Двачую оратора выше, спп кон. Много годноты. Бери из источников в лекциях.
"Почему УБ это УБ"
Не эксперт, но может вижуалка запускает процесс где-то внутри своей памяти.
Ну вот конпелятор и заполняет эту память значениями, чтоб там не было всякого мусора
выдели нетипизированную память new без operator
выведи на экран содержимое нетипизированной памяти без каста
об успехах отпишись в тред
еще и к auto приебался зачем-то
Не, не, ничего не перепутали, всё правильно
Блять, пиздец, оно реально существует.
Ты даже не понял сути притензий, ваще тупой походу, не трать время на плюсы.
Хотя и анон с низу про малоки прав.
так разверни мысль нах в чем причина претензий заключается
у тя там в посте только три строчки гринтекста и смишной комментарий
ну любой оператор можно так вызвать типа operator == (a, b)
конкретно operator new вызывается при вычислении new expression но можно это сделать и вручную
> Трудночитаемая магическая хуйня
Ничего лучше ещё не придумали
> магическая
Значение знаешь?
Например хочу заглянуть внутрь std ?
Вскод это текстовый редактор, он не имеет ничего общего ни с одной из стандартных либ плюсов.
> как
Зайди на сайт разраба или мейнтейнера той библиотеки которая тебе интересует, скачай сурсы и ознакамливайся.
Это копия, сохраненная 18 сентября 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.