Вы видите копию треда, сохраненную 5 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый (1000- постов, вы серьезно?) тред: >>1973041 (OP)
Я уже...
C# получше будет, катимся туда
https://citizen1980.livejournal.com/310.html
А программисты живут так же бедно в России?
> "Я отношусь к среднему классу", — с гордостью говорит человек на Западе, а потом выходит из ветклиники, в которой работает, садится за руль автомобиля и возвращается в свою виллу. На балконе виллы — благоухающие цветы и обеденный столик со стульями. "Я отношусь к среднему классу", — с гордостью говорит врач в России, а потом подходит к подъезду, возле двери которого толпится круг из десятка курильщиков, протискивается между ними, заходит в свой подъезд и нажимает на копчёную, обугленную кнопку, которая изначально была белоснежной, чтобы лифт (картинки 26 и 27) его поднял на 8-й этаж "виллы". На балконе "виллы" — лестница-стремянка, матрац, удочка и старый холодильник.
> А программисты живут так же бедно в России?
template<class T, class... Rest, template <class, class...> class Container>
void foo(Container<T, Rest...>& v) {}
Оно работает, я не понимаю как, объясните плиз.
есть 2 треда которые вызывают в одно время одну и ту же
1. static функцию класса
2. обычную функцию класса
б. разные функции одного инстанса
3. глобальную функцию
это thread safe или не thread safe
Это переусложненный шаблон, под которого все таки подходят стл контейнеры, ... там на самом деле пустой в обоих случаях.
А может и нет, у мапа же ещё сравнение есть в параметрах. Да, я наврал.
>... там на самом деле пустой в обоих случаях
В векторе есть параметр-аллокатор, а в мапе вообще их дофига.
Вообще объединить в одной функции такой функционал трудно, потому что итератор вектора возвращает само значение, а мапы - пару ключ-значение. Поэтому я советую сделать обычной перегрузкой. Ну или брать два итератора как стандартные алгоритмы и как-то с помощью if constexpr или SFINAE разруливать, но это уже если хочешь позадалбываться.
>Оно работает, я не понимаю как
Посмотри на определение мапы:
template<class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T>>> class map;
Скажем, ты передаёшь в функцию x = std::map<MyKey, MyValue, MyComparator, MyAllocator>; и делаешь foo(x);
Далее компилятор автоматически определяет шаблонные аргументы (https://en.cppreference.com/w/cpp/language/template_argument_deduction) и понимает, что T=MyKey, Rest={MyValue, MyComparator, MyAllocator}, Container=std::map<T, Rest...>. Шаблон функции инстанциируется и получается обычная функция void foo(std::map<MyKey, MyValue, MyComparator, MyAllocator>);
Забыл добавить. Дело происходит в Хохляндии.
А сколько надо ?))
Через сто лет все будут в пиктограммы тыкать пальцем и смотреть канал "Насилие"
>никогда, скриньте
Анус ставишь? Через тысячу лет проверю и заберу твой анус чтобы продать на рынке в альфа центавра
Бля буду, слово пацана.
Я сейчас 1к$ получаю +150$ за смену работы это вообще пиздец как слабо. Можно требовать, допустим 2.5к$ ? Или я охуел?
Понятное дело, что про проблемы на работе сообщать вообще не стоит, а то подумают, что я еще какой-то конфликтный или еще хуй знает что подумают. Вот что говорить им, кста, на вопрос "А почему решили сменить работу?". Сказать что-то типа "Ну, там был большой проект и на меня вешали задачи по фиксу багов и по поддержке легаси кода, а не по созданию чего-то нового. Поэтому захотел сменить работу, а то чувствую, что не развиваюсь". Норм? Или хуйня? Или можно что-то получше придумать?
Рофл чи серьезно?
Да нет. Два с половиной года (хорошего) опыта меня в ДС как раз свели на несколько офферов с как раз на 140-180к рублей, а тогда доллар примерно по 60 был.
Зачем ебать мозги себе и людям? Идёшь на собес и говоришь, что хочешь больше денег. Вот к тебе будут потом всякие отбитыши приходить и мямлить, что их обижали, не давали развиваться, их тонкая натура хочет большего... Ты их сам то к себе возьмёшь?
Скажи, что упёрся в границы как профессиональные, так и финансовые, которые тебе были доступны в той фирме. Поэтому ищешь фирму покруче.
Если ты июнь, то можехь хоть на х2 хоть на х3 идти. Если старщой, то тебе за х1.25 придётся бочку делать (это про чистый доход без учёта инфляции).
>Чтобы .hpp файлы не раздувались. Если от инклюд необязателен, как в случае, когда нужна только ссылка на объект, то лучше его не делать, так как это может привести к большим заголовочным файлам и медленной компиляции больших проектов.
Но этот .h все равно потом вставляется в .cpp, и в .cpp все равно необходимо сделать полноценный инклуд для имплементаций.
В итоге (после подстановки) .cpp получается точно такой же + предварительная декларация в довесок.
Сами по себе заголовочные файлы не компилируются, так что не пофиг ли его размер?
Если .h включается в несколько .cpp, то компилятору жевать его приходится каждый раз отдельно. Так что не пофиг.
Ну, бля. Если же сказать, что хочу больше денег скажут что-то типа А ЕСЛИ ВАМ ЕЩЕ БОЛЬШЕ ПРЕДЛОЖАТ, ТО ВЫ ОТ НАС УЙДЕТЕ?))) поэтому, думаю, нужно придумать какую-то другую причину. Про то что "обижали" вообще говорить не стоит, а то подумают, что не могу работать В ДРУЖНОЙ КОММАНДЕ или что я вообще КОНФЛИКТНЫЙ.
`operator QVector<double>() const`. Я правильно понимаю что это тоже самое что `QVector<double> operator () const` или это какая-то новая приколюха из С++1488
>компилятор ругает и не хочет компилировать, ссылаясь на безопасность
Это же с функциями си случается.
>Это фиксится дефайном
Еще, как правило, есть "безопасные" версии функций.
>с вашей точки зрения стоит ли эту хуйню исправлять или и так сойдет
Смотря какие цели твой проект преследует.
По идее ты должен знать, что делаешь, если используешь библиотеки си.
>>04856
>fopen и запись
Чем тебя iostream не устраивает?
> По идее ты должен знать, что делаешь, если используешь библиотеки си.
нуууу, я надеюсь челы, у которых я этот код скопировал, знают свое дело.
> Чем тебя iostream не устраивает?
Так я через curl скачиваю файл. Мне без fopen никак
Если тебе нравится С++, понравится и Ява. Там вакансий хоть отбавляй.
>Нравится язык
Уверен?
>учить плюсы для вката бесполезно
Ну лично мое мнение - да. Хотя есть немало знакомых, которые вкатились с нуля в плюсики и уже пару лет работают крестогосподами.
Проблема плюсов - нужно хорошо знать предметную область. И она везде разная. Где-то графику требуют, где-то глубокие познания в сетях, байтоебстве, где-то вообще пишут адово многопоточные вещи и нужно шарить за распределенные системы етц.
А условному прогеру на жс, go, джаве, питоне, шарпе, и т д достаточно знать несколько основных фреймворков, с которыми он сможет устроиться везде.
НУ стоит ли пытаться заменять функции эти на безопасные или от этого не убежать?
И вообще мне интересно часто ли такая хуйня на практике встречается?
>Проблема плюсов - нужно хорошо знать предметную область.
Иди работать в над PVS-Studio. Там сферические кресты в вакууме и есть твоя предметная область.
Правда плотют всего лишь 30к.
30к за хорошее знание крестов. Грустнота
Там нужно уметь ругать утечки памяти раста и вездесущие ансейфы.
Я для себя решил, что не стоит. Потому что мой говнопроэкт совсем не про это был. К тому же - это априори оверхед во всех смыслах.
Аще сэйф-версии даже количеством параметров могут отличаться.
А если у тебя все пиздец серьезно, то спроси у начальника.
> Аще сэйф-версии даже количеством параметров могут отличаться.
Если бы это было не так, я бы просто _s приписал и все
>А если у тебя все пиздец серьезно, то спроси у начальника.
Да я для себя пишу сейчас. Спасибо за ответы
Ну в яндексе тоже любят писать свои велосипеды. В принципе, если хорошо уметь решать литкод, то можно уже к ним пойти.
Криворукие программисты (99,8% всех программистов) пишут проги с дырками. Вы же еще хуже, зная что там потенциальная дырка - отказываетесь ее исправлять.
Олсо каждому ЛОРовцу/поппентетовцу очевидно что это из-за вашей врожденной лени.
прошу прощения за даунский вопрос, уже сам нашел что это конвершон оперейтор
Криворукие бывают только фронтендеры, а если ты плюсер ты сразу уважаемый разрабочик и архитектор, который не ошибается а делает закладки на будущее.
Я сейчас для себя пишу. Если я каждую такую хуйню исправлять буду сразу же, а не когда понадобится, я свой проект буду год писать, вместо месяца
>Криворукие программисты
Всмыси "криворукие программисты"?
Если ты соответствуешь своей должности, то ты мне нормально задачу поставишь, так чтобы я никде не наебался. Ты за это бабло получаешь.
Алсо реквестирую не мусорный гайд по заголовкам.
Компилятор знает, где искать бинарники стандартной либы и даёт тебе хедер просто как интерфейс, чтобы ты если что получил вменяемую ошибку компиляции, а не простыню из "undefined reference to" во время линковки. У него может и не быть исходников. Зачем компилиррвать исходники стандартной либы, если они уже скомпилировпны? Это как минимум очень сильно замедлит скорость сборки проекта. Более того, хедеры могут включать другие хедеры, другие - третьи и т.д. Представь, что для одного инклуда тебе придётся передавать компилятору десятки cpp-файлов. Таких проблем ты хочешь ради "универсальности"?
Нет конечно, это я написал, чтобы объяснить, что именно меня смущает. Ну вот это значит к каждому собственному .h хранить в паре .cpp, а если они используются в нескольких проектах, да с модификациями, то хранить копии их обоих. Помнить что где и как то всем этим управлять. Сложна!
Как религию. ООП это триединство
- наследования (если оно множественное, то в 2021 недопустимо)
- полиморфизма (бывает полезно, но злоупотреблять и везде пихать просто так не принято в 2021, а только по необходимости)
- инкапсуляции (в 2021 считается самым полезным качеством ООП)
И над всем этим ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ, которые надо учить.
Забыл добавить что не наследованием единым. Есть еще ГРАМОТНО РЕАЛИЗОВАНЫЕ модули в современных языках программирования
>если оно множественное, то в 2021 недопустимо
У нас сегодня composition over inheritance, ты отстал лет на 5
Уже давно не триединство. Ты видимо дед-пердед, если не в курсе, что была добавлена:
-абстракция
Не волнуйся, в кюте их вернули)
#include <iostream>
using namespace std;
int main()
{
vector<int> v{1,2,3,4,5};
vector<int>::iterator it;
for(int i=0; i < v.size(); i++){
it = v.begin()+i;
}
cout << *it;
return 0;
}
почему тут утечка памяти?
да ладно?)))
About • FAQ • Blog • Terms of Use • Contact Us • GDB Tutorial • Credits • Privacy
© 2016 - 2021 GDB Online
Language
C++ 17
source code
main.cpp
input
0x1f42c30
0x1f42c30
==19125== HEAP SUMMARY:
==19125== in use at exit: 0 bytes in 0 blocks
==19125== total heap usage: 3 allocs, 3 frees, 73,748 bytes allocated
==19125==
==19125== All heap blocks were freed -- no leaks are possible
==19125==
==19125== For lists of detected and suppressed errors, rerun with: -s
==19125== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
то какого хуя оно не проходит тест на leetcode?
Line 811: Char 16: runtime error: reference binding to null pointer of type 'int' (stl_iterator.h)
Есть функция с сигнатурой
bool is_intersect_r_r(Rectangle a, Rectangle b);
есть std::function<bool(Shape, Shape)> f;
Я хочу сделать f = is_intersect_r_r;
Но выдаётся ошибка
error: conversion from ‘bool(Rectangle, Rectangle)’ to ‘std::function<bool(Shape, Shape)>’ requested
Rectangle это наследник Shape, если что.
Там звёздочки пропали. Все аргументы передаются по указателям
В is_intersect_r_r могут вызываться методы Rectangle, которых нет в Shape.
Это паливное преобразование.
Соответственно ты и можешь передавать Rectangle в std::function<bool(Shape, Shape)> f; При этом, ты можешь использовать только поля и методы Shape.
Но у тебя не указатель на Shape, а указатель на функцию с определенной сигнатурой.
Если ты не можешь написать is_intersect_r_r() так, чтобы она принимала указатели на Shape, то и натягивать ее на сигнатуру bool(Shape, Shape) нет никакой пользы, кроме вреда.
Ок. А как мне тогда определить тип элементов контейнера, который хранит указатели на функции bool(Shape и его наследники)?
А как запилить контейнер, который принимает пофигу что, хоть инт, хоть железный винт?
А как потом работать с контейнером, который на очередной итерации выдаст тебе неизвестно что?
В языке со строгой типизацией это является признаком плохого дизайна.
Ну да, ты прав. Спасибо
Как убрать этот const?
В комментарии показываю как псевдоним Pair объявлялся
В качестве контейнера у тебя set. Iterator у такого контейнера константный. Т.е. тебе запрещено менять значение, так как оно является ключом, а на ключ завязана внутренняя структура данного контейнера (там может быть хэш или сбалансированное дерево поиска). Если ты обходными путями снимешь const и изменишь значение, то у тебя всё пойдёт вразнос. Соответственно либо убирай && и работай с копией либо меняй тип контейнера (допустим на std::map).
То же можно и со структурами. Это норма. Можно думать об этом как Машина содержит в себе Мотор.
не выёбуйся
C++: ищешь, как разбить строку с помощью разделителя.
Время разработки х4 на плюсах. Браво.
А что там на Rust кста?
русский там автопереводом генерится
Не только по стл, но и по языку тоже.
Всегда есть смысл заглянуть и туда, наряду с cppreference.
https://www.youtube.com/watch?v=AsZg6G5mzLc&list=PLvb7ivodu7oQkuxXHqv_LjUWupqSkfQKM&index=1
Пок пок пок, мне тут нужно символ в строке заменить. Напишу str[pos] = 'а'. Как это нужно создать копию, потому что строки неизменяемые? Вы ебанулись?
Пирожок, ты пойми, что другой язык это другой образ мышления. И это касается не только синтаксиса и знаков препинания, но и работа с инфраструктурой. Принципиальное отличие от пихонов в том, что нет одной коробки из которой ты достаёшь ништяки. Таких коробок много и нужно ими жонглировать и натягивать на свой проект.
Как сделать так, чтобы без километров строк кода иметь возможность получить как символ по его числу, так и число по его символу?
O(1), дурак я
Спросить на дваче. Вообще попробуй библиотечный set если с нуля делаешь. Я кстати неопытное лохочмо.
STL это по сути синтаксический сахар?
Синтаксический сахар - это часть синтаксиса языка. STL - это библиотека и не имеет отношения к синтаксису.
Я в том смысле имел в виду что возможно копировать фунционал библиотечных контейнеров и сделать свои, более простые.
Можно хоть всю стандартную библиотеку навелосипедить при желании, но сахаром она от этого не станет.
Я в том смысле что сахар не такой эффективный как хардкорный вариант. Я это так понимаю. Сделать если все на массивах то будет быстрее но объемнее, поэтому не "сахар".
Делают иногда, в некоторых очень байтоёбских задачах STL достаточно эффективна, но для большинства случаев подходит.
Платят только в Сбере и Нвидии. Опционально - в яндексе.
Если думаешь, что не потянешь - учи жабу, и иди в любой говнобанк пилить легаси дерьмо за 400кк\нс
Готов хуярить пет проекты в свободное от работы время. Смотрят ли на гитхаб при поиске работы?
Нет. Обычно предлагается тестовое задание. Потом несколько этапов болтовни по теории.
https://m.youtube.com/watch?v=_4EuZI8Q8cs
Не могу понять зачем в функции move() нужен втооой цикл for(). Он вообще ни разу не давал true:
void move(std::string str)
{
Vector2f oldPos = toCoord(str[0],str[1]);
Vector2f newPos = toCoord(str[2],str[3]);
for(int i=0;i<32;i++)
if (f.getPosition()==newPos) f.setPosition(-100,-100);
for(int i=0;i<32;i++)
if (f.getPosition()==oldPos) f.setPosition(newPos);
}
Это блендер. Посмотри туториалы по нему и поймешь насколько это "простенькое тридэ"
а где тут утечка?
вообще по индексу не перебирают вектор, можно ошибиться
пиши как по стандарту
for_each(v.begin(), v.end(), [](auto i) {
});
а еще лучше
for_each(begin(v), end(v), ...)
что бы не заморачиваться, вектор у тебя v или массив или черт с рогами.
>Он вообще ни разу не давал true
А ты как проверял?
Именно второй цикл и двигает спрайт из старой в новую позицию, тогда как первый только освобождает местоназначение, если оно было занято.
Вообще у этого чувака довольно хреново написан код. Это даже не си с классами. Даже по меркам си хреново.
Ладно.
>вкатился плюсовиком стажером на 70к в дс2
>лучший вариант для переката
Ты вкат с перекатом попутал, манька.
>это лучший вариант для переката заграницу/удаленку на запад
На запад смысла ехать ровно 0, так как уровень жизни сильно просядет + высокая преступность во всех крупных городах где есть айти.
Ну тут всё относительно. Московские айтишники очень неохотно уезжают с сытных мест. В ДС2, наоборот, быстро пакуются и на несколько лет сваливают. А так как получится.
>Я оспорил тезис сложности вката в кресты
Тезис не в сложности, а в соотношении усердие/результат. Если бы пошёл в ДС2 на пихон, то получил бы 90к на старте.
Также есть тенденции, происходящие во всём ойти, которые ты не учитываешь. В 2020 из-за коровы часть контор тормознули набор и запуск проектов и сейчас есть сильный отложенный спрос (вакансий стало на 30-35% больше). Далее демография. Из вузиков выходит всё меньше и меньше народу. Затем удалёнка (в ДС2 не самые лучшие зп). Когда откроются границы - сеньоры с мидлами начнут дружно давать по съёбам.
В такой обстановке будут брать кривых, косых, и даже тупых. В ДС 3-4-5 уже конкретно занервничали из-за нехватки мидлов и старше.
бамп
>В ДС2, наоборот, быстро пакуются и на несколько лет сваливают
А смысл? В ДС2 зарплаты не сильно ниже чем в Москве, а жилье подешевле будет. Плюс, если своя хата есть, то смысла куда-то ехать нет, ну может только в долину на грейд L5 и больше, но я бы вряд ли там выдержал работать. Здесь как-то спокойнее, хоть и раз в несколько лет происходят забавные события уровня крымнаша или обнуления.
>>09425
>Из вузиков выходит всё меньше и меньше народу
Спорный момент, конкурс в топ вузах Москвы и СПб на ИТ направления за последние годы заметно увеличился. Но и народ не только после вузиков вкатывается.
Thread safe - это не про то, где объявлены функции, а про то, что у них внутри. Если возможны ситуации, когда в двух разных потоках функция работает с одними и теми же данными, причём один поток в любой момент эти данные может изменить, пока с ними работает второй, то второй поток может получить несогласованные данные, и это нихуя не thread safe. Такая ситуация может возникнуть в любом случае, и неважно, статик или не статик.
У меня в дебаге окно вообще не разворачивается никак и не может принять никакой ввод.
Средняя зп на ~20% ниже.
Вообще из ДС2 в Москву желающих не много. В основном в Европу и Северную Америку. В Испанию в тепло из болотного климата, в Канаду за деньгами, в гермашку, чтоб спокойно, в Швецию, чтоб ещё спокойнее. Многие живут в стиле Digital Nomads и постоянно перекатываются.
Ещё у некоторых в ЕС есть родственники, знакомые по вузику, кто-то там учился или дела мутил. Движ постоянный идёт. ДС2 це ж Эуропа.
>не только после вузиков
Эти дольше обучаются, а прыгают также часто. С них профита намного меньше.
Фронт пилят на шарпе, бэк пишется на плюсах. Как оно там связывается в итоге в один апп - хз
Есть функция RegisterWaitForSingleObject
ссылка на docs: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-registerwaitforsingleobject
В неё передаёшь колбэк и данные которые будут переданы в этот колбэк (Context).
Почему когда передаю данные которые сохранил в локальной переменной (т.е. прямо перед вызовом RegisterWaitForSingleObject)
то приходит нихуя? А если переменная с данными объявлена глобально, то данные приходят.
Я так понял потому что локальная переменная создаётся в стеке и когда вызывается callback эти данные уже стёрты т.к. функция с этой переменной уже отработала?
спасибо бротан век не забуду!
Это initializer lists
https://en.cppreference.com/w/cpp/language/constructor
Не путать с std::initializer_list
Бамп вопросу.
lOOOOOl
хуйня, до входа в конструктор надо инициализировать ссылки, константы, базовые классы. А тут что-то инициализируется, хуй пойми что.
template<MyEnum me>
constexpr int f();
main()
{
constexpr MyEnum e1 = MyEnum::val1;
constexpr auto res1 = f<e1>(); // ok
constexpr MyEnum e2 = getEnum();
constexpr auto res2 = f<e2>(); // error
}
Оба енума констэкспры и выражение вычисляется, но как аргумент шаблона во втором случае компилятор не хочет принимать.
Решение - костыль, и это сделать switch блок для всех MyEnum
Компилятор, к сожалению, так не может. Зато можно пошаманить с шаблонами, и всё получится.
Насколько я помню, в режиме c++latest они не дают никаких гарантий по бинарной совместимости. То есть использовал класс, а потом раз - и его layout в следующем обновлении студии может поменяться, и библиотеки, собранные предыдущими версиями, будут тыквой при взаимодействии с более новыми.
У с++ никогда и не было бинарной совместимости, как и стабильного abi в принципе. Все интерфейсы библиотек пердолятся через extern "C".
Компулятор свежий поставь.
https://en.cppreference.com/w/cpp/compiler_support
>>11206
Охуенно ты вопросы читаешь, братан.
r-value ссылка - суть l-value?
rvalue reference, которые && - это просто возврат временной переменной. Т.к. lvalue хранится на стеке, ты просто говоришь компилятору не дропать это lvalue, а вернуть в вызывающую функцию. По сути, объявление && это типобезопасный аналог указателя на указатель.
Извини, не типобезопасный, конечно, а null-безопасный.
Ах да, нужно это для избежания копирования. Т.к. ссылка даёт только доступ к объекту, его придется переписывать, а это при присвоении копирующий конструктор. rvalue ссылка просто поменяет указатель исходного объекта, копирования не произойдет.
У студии есть совместимость, со 140 тулсета (главное, использовать линкер не ниже чем сама высокая используемая либа), пока они не скажут, что вот, меняем abi
r-value ссылка и const lvalue продлевает время жизни объекта. В сущности предназначение rvalue ссылок состоит в продлении жизни временных объектов. Если временным объектом не владеет rvalue или const lvalue ссылка то он для него вызывается деструктор. lvalue ссылка указывает на объект имеющий идентификатор. const lvalue позволяет передавать в функцию временные объекты и объекты с идентификатором, но запрещает их изменение. При инициализации lvalue rvalue ссылкой используется конструктор перемещения. Объект по rvalue ссылке опустошается и его содержимое передается в инициализируемый объект. Из любого lvalue можно получить rvalue ссылку c помощью std::move. Вот вкратце и без многих деталей.
Забыл снять сагу извините
Ну как нет, как-то что-то есть (говорят на "новый" std::string ещё не все перешли) и комитет старается как можно меньше изменять существующее ABI. Здесь в секциях 7-9 описаны пропозалы, которые не вошли или даже не написаны лишь потому что изменяют существующее ABI. А ведь некоторые очень полезны. Но нефиг, у <энтерпрайз_нейм_в_комитете> есть библиотеки пятнадцатилетней давности, которые нельзя перекомпилировать - поэтому все должны страдать с ними.
Забыл ссылку: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1654r1.html
Я помню видел где-то видел более полный список, но не могу найти.
https://www.youtube.com/playlist?list=PLvb7ivodu7oRbl-b2vGnZCAGusRaQPaUu
https://www.youtube.com/playlist?list=PLvb7ivodu7oSTD9Nh95-k9cxVs8dRTvuR
https://www.youtube.com/playlist?list=PLvb7ivodu7oQO9DtWRMdIKEznH-jYZnsB
https://www.youtube.com/watch?v=AsZg6G5mzLc&list=PLvb7ivodu7oQkuxXHqv_LjUWupqSkfQKM
https://www.youtube.com/playlist?list=PLvb7ivodu7oQLu64CHUHojXHY9Pslc78i
Вкат по видосикам и курсам прокатит в любом другом языке, но не в C++.
T() - это сишный каст, который одновременно все касты С++ в зависимости от контекста.
*_cast<> это строго определенный каст, делаюший ровно то, что тебе нужно, с компайлтайм проверками, например.
Уже пол года как вкатился на 80к в ДС в около гос контору..
В основном, это работа с удаленными устройствами, да десктоп на кьюте под линукс... На собесе поверхностно спрашивали про многопоточку, сетевые протоколы, да про стандартные структуры данных, про линукс спрашивали... были два простых пэт проекта, но их никто даже не смотрел)
Взяли один каст и разделили на 4 частных случая. Зачем? Сократить количество неочевидных ошибок. Допустим по цепочке вызовов сняли константность с объекта и модифицируем - по факту имеем ub.
А еще Страуструп говорил, что он намеренно сделал такой уебищный синтаксис, чтобы не возникало желания лишний раз применять касты.
Да и сами явные касты как таковые - это синтаксическая соль, чтобы не было пиздеца как в JS.
Они много чего затрагивают, и лучше изучить в одном месте после изучения всего этого, чем размазывать по всей книге.
там столько дохуя нюансов, что ты это не отдебажишь
Тоже пойдёт.
Бумп
Или не книжки
Хрюкни
Функция убирает все пробелы из string и возвращает его копию, которая была создана конкатенированием из char string. Индексы пробелов сверху помещаются в черный список и перед самой конкатенацией индекс добавляющегося элемента сравнивается с этим массивом запрещенных индексов.
В цикле по ii инкремент i, а не ii.
Но вообще у тебя безумный индусский код - что тебе мешало в первом же цикле пихать в ответ непробельные символы без запоминания их индексов?
А на stl это решается в одну строку.
str.erase(std::remove_if(str.begin(), str.end(), [](unsinged char c) {
return std::isspace(c);
}), str.end());
https://en.m.wikipedia.org/wiki/Erase-remove_idiom
Без велосипедов можно так
*unsigned очепятка
Зависит от задачи. Почему ты спрашиваешь?
Генерация кода из UML это возможно? Я понимаю ересь но надо на всякий пожарный.
Хочу бекенд на плюсах писать, где можно коротко и ясно прочитать про работу с http и вообще о внутреннем устройстве http и https?
нахуя тебе читать внутреннее устройство? Бери boost.beast и ебашь
Вместо использования move семантики тратить ресурсы на копирование объектов. Гениально.
Глаза разуй.
Функция создаёт новый объект. Принимаешь по ссылке, копируешь в новый, далее рво. С ремув эрейз больше накладных расходов.
Еблан, зачем создавать новую строку, если можно сдвинуть непробельные символы к началу строки и инвалидировать оставшуюся память?
Возможно (определения классов). Nclass для .Net, для плюсов что то большое и платное, не помню что
Потому что функция создаёт новую строку без пробелов, а не изменяет старую, тупая мразь.
<busconfig>
<policy user="user">
<allow own="org.freedesktop.timedate1"/>
<allow send_destination="org.freedesktop.timedate1"/>
<allow receive_sender="org.freedesktop.timedate1"/>
</policy>
</busconfig>
Но это не работает (по крайне мере в дебиане). Анон, подскажи, что я упускаю?
сыглы
у нас уходят люди выше мидла, ибл с короной просели зп, на прошлой неделе ушел товарищ в сишарпы, потому, что зп на 50к больше. тоже думаю катиться, ибо в отделе осталось 3 человека (было 9 когда я пришел год назад).
Какие шансы переехать в ваш круг работать в контору (дс5 екб) на того же джуна. Сейчас получаю в среднем 40-50к (зеленый и стажа оф год), пришел с нуля.
Навыки - линух, контроллеры (c. codesys. st. немного руби), занимаюсь безопасностью в основе. Тема интересна, сейчас учу кресты. Где можно применять их в иб, да и вообще, куда можно податься с этим набором, к 2022 думаю перекат оформлять? мейби кто из екб, подскажите конторы (кроме газпрома), так же в целом идеи и освятите путь жаждущему познать истину.
Всем спасибо
Плюсы и безопасность = Контур, Континент
Да, вполне. Есть задача - есть инструмент. Нет задачи - нет инструмента. Для какого-нибудь SDK forward нужен. В остальном всем похуй, ибо это лишний уровень "гибкости".
Корова ускорила рыночные процессы. Сам перекатился на пихон, а до этого писал зрение на плюсах. Сейчас занимаюсь тем же самым, но за больше деньги.
Я, ебаша в проде адовый С++17 с переездом на С++20 как только будет Студия 2022 - так же нираху не использовал стдфорвард, деклвал по-моему 1 раз было где-то в самопальной СФИНАЕ лапши, и енабле_шаред_фром_зис тоже ниразу не использовал.
>>17454
Я даже не соображаю, зачем нужен optional/any. Наверно, потому, что не видел никаких адекватных красивых кодовых баз с этими фичами. Из 17-ых дёргал только structured binding и расширенный if. Даже не нашел, где можно было бы decltype(auto) воткнуть.
Фич дохуя, и мне кажется, что их точно нужно использовать, не просто так же ввели.
>что их точно нужно использовать
Зачем? Девиз крестов - ты не платишь за то, что не используешь.
Optional крутая вещь, имхо, постоянно использую. А вот Any - тоже 0 юзкейсов.
volumeField<decltype(Type() & vector())> divergence(const volumeField<Type> & inField)
?
В примерах обычно ставятся переданные аргументы, но у меня Type и vector засунуты в поля внутри inField, и доступ к ним многословен.
>decltype(Type() & vector())
Я нихуя не понял, но возможно тебе надо писать возвращаемый тип через ->?
auto divergence(const volumeField<Type> & inField) -> volumeField<Type> {...}; или типа того.
Перфект форвардинг - это вполне в стиле 11
> -> volumeField<Type>
В том то и дело, что у возвращаемого значения тип не Type, а должен вычисляться на основе произведения Type & vector, но чтобы взять объекты для этого из переданного inField, мне придётся написать
decltype(
inField.ref()[0] & inField.meshP()->surfaces()[0].N()
),
что выглядит очень громоздко.
Наверное можно сделать шаблон с возвращаемым значением шаблонизируемого типа. Using и вот это все.
Для этого есть даже специальная функция в STL https://en.cppreference.com/w/cpp/utility/declval
>на основе произведения Type & vector
А для этого есть std::result_of или std::invoke_result, начиная с C++17.
А это точно stl?
result_of депрекейтед уже
logger << "out" << "a" << endl;
То на "a" вызывается деструктор и анлочится мьютекс. Как фиксить?
Помогити...
Забыл сказать. Если возвращать из логера по значению SynchronizedStream, то он падает сразу. А если по ссылке, то только уже на втором чейне. (Тот самый "а")
И еще, нужно чтобы оно вызывало деструктор для SynchronizedStream в конце чейна.
То есть есть у нас такой чейн:
logger << "Print me!" << "And me!" << "And me!" << endl; (здесь вызывается деструктор SynchronizedStream)
А что не так? Отрицательный 0 - допустимое значение для флоата и дабла.
Посмотри как в бусте сделано.
https://github.com/boostorg/log/blob/master/include/boost/log/sources/record_ostream.hpp#L566
Там специально хитровыебнулись, чтобы не вычислять аргументы, если у тебя уровень логгирования ниже (через цикл for), и через мать его lifetime extension сделали record_pump чтобы объединить всю цепочку "<<" в одну логическую запись - сюда ты как раз и сможешь мьютекс вставить.
Но вообще << логгирование уже прошлый век, у нас есть вариадические шаблоны и можно спокойно сделать логгирование обычными функциями а-ля spdlog (сам недавно реализовывал свой велосипед в таком стиле - очень просто и лаконично получается).
Недавно писали, что Страуструп специально сделал для кастов уёбищный синтаксис, чтобы их юзали редко. Выходит, стримы тоже надо юзать редко.
> а-ля spdlog
Я вьебал в свое время 5 выходных дней, на то, чтобы с уебищного самопального<<логгера, переписать вообще все логирование в проекте на fmt (spdlog низя было, т.к. мы логируем в виндовые ETL'ки, а не в текстовички).
Так вот - это охуенно, логи стали чистенькие и LOGE("{}, {}", "сука", "красивые"); а не LOG << "ебучий " << "сблев " << "обезьяны" << OUT_ERR;
>Слава аллаху за стандартизацию std::format
> (since C++20)
Воистину Аллах велик и всемогущ! И слышит молитвы тех, кто просит. Аж с 90-х годов просит.
С одной разницей что твои строки формата могут теперь не соответствовать списку аргументов, и в случае какой-нибудь редкой ошибки ты получишь не красивое сообщение в лог, а кривой эксепшн и вероятно сегфолт.
Забавно что сишные строки форматирования компиляторы умееют проверять, а хипсторский фмт - нет.
Я кстатит после долгих проб и ошибок пришел к форматированию через <<
Остальные способы имеют критические недостатки.
> и в случае какой-нибудь редкой ошибки ты получишь не красивое сообщение в лог, а кривой эксепшн и вероятно сегфолт.
Получал, чинил, полет отличный дальше
Это execution reached the end of a value-returning function without returning a value.
и что это значит? у меня все функции возвращают всё. в visual studio всё работает, а на codewars нет
>хипсторский фмт - нет
Уже давно как может: https://fmt.dev/latest/api.html#compile-time-format-string-checks
Единственный минус - надо обмазываться макросами
>>11886
>>11893
Коллеги, я знаю как пользоваться r-value. Меня интересует другое.
Есть функция
T && fun(T && s)
{
return std::move(s);
};
T t1;
T&& t2 = fun(std::move(t1)); //t2 - r-value ссылка
T&& t3 = t2; // ошибка. Казалось бы, почему к r-value ссылке нельзя присвоить r-value ссылку? Но компилятор пишет:
cannot bind rvalue reference of type ‘T&&’ to lvalue of type ‘T’.
То есть в этом контексте компилятор t2 считает l-value.
То есть r-value ссылки это l-value по сути своей?
бамп
Ссылка в большинстве контекстов обозначает объект, на который ссылается. Поэтому да, t2 - это l-value.
Хуй знает. Походу должно в мейне возвращаться значение какое-то, а оно не возвращается.
Такая ошибка будет отловлена уже на этапе компиляции. Судя по всему в рантайме произошло что-то, что не дало функции выполнится до return statement, например выбросило исключение
Так ссылка после инициализации уже не ссылка
Мы вам перезвоним.
Так можно ссылку на вопросы плюсовому мидлу?
int f() {
if (false)
return -1;
}
Не все пути ветвления исполняемого кода имеют возвращаемое значение.
Но это же совсем для даунов. Какой миддл?
Че хотя бы примерно спрашивают? Норм с 2-умя годами опыта в плюсах требовать 2-3к долларов(город Харьков, Украина)?
В одном из производных классов мне теперь нужно кой-чего дописать в деструктор.
Это деструктор производного - он virtual ... override или как?
твой шаблон функции должен принимать пару итераторов, определяющих диапазон, а не сам контейнер
посмотри реализацию любого алгоритма из стандартной библиотеки и делай так же
эмпирическое правило - менять работу только если будет больше 30%
чтение срачей на форуме rsdn в нулевые как ни странно, где срались что мол в крестах ненастоящий ооп
ну и еще разглагольствования страуструпа что мол у него в языке есть 3 вида полиморфизма и бахвальство что у него динамический полиморфизм работает почти бесплатно, с дотошным обьяснением механизма работы виртуальных членов-функций
челибоня, ты опоздал на четверть века
кому нужно было тот уже все написал под себя
держат только по паре обезьян на саппорте второй линии зачастую, чтобы они че нибудь слегка дописывали
поезд hft ушел
вложенные классы в крестах имеют набор вполне конкретных use cases, поэтому ни к чему приплетать какую то философию
практический подход
тащем та челики из комитета все же прогнулись, и теперь в стандарте тоже есть сплит для строк
как говориться - если дураки продолжают лезть в окно, то рано или поздно на месте окна придеться вырубать дверь
вот так ляжешь с аппендицитом а тебе вырежет почку такой же врач-троечник и неуч
почитай по сишный каст и не вводи в заблуждение других
есть отдельные книги по шаблоном и по том что можно на основе их делать, и ты, щеня, охуеешь их читать
ну, челик, знаешь как выходит: вроде и пишешь мультиплатформу, а по факту оказываеться что прога под линукс плюс порт под винду
так это и работает
уебишьно
ибо линукс одна из самых уебищьных осей
респект, лучшая книга страуса после "дизайна и эволюции"
чувствуешь масштаб крестоапокалипсиса?
вон, вверху треда челик за 11к рубасов фултайм работает
кого обидел - не жду прощенья
адью
Когда ты упоминаешь переменную, к её типу приебашивается ссылка. В твоём примере, T && + & -> T & -> can not bind reference. Если тебе не это нужно, можешь указать явно:
T &&t3 = static_cast<T &&>(t2);
Собственно, std::move примерно этим и занимается.
Дополню ещё.
https://gcc.godbolt.org/z/soqM4njE7
Вот тут видно, в чём разница между std::move и std::forward, и как отрабатывает universal reference. Полезно для понимания, как ссылки работают. Я лично советую забыть про всякие категории lvalue/rvalue, пока нормально не разобрался, что к чему.
Маловероятно. Такое может быть если тебя берут с расчетом на то что ты будешь заниматься еще и билд-системой.
Да хоть на автохотскрипте, если можешь функции из ntdll вызывать (ну или где функции изменения параметров свопа на винде находятся).
почему?
Если ты не используешь, то не значит что никто другой не использует. Это полезная штука в юнит тестах. Чтобы не писать var_a01, var_a02... в каждом тесте. А просто писать эти фигурные скобки и в них в каждой свой var_a для своего теста.
Ладно.
Когда я пишу v1 = v2, то просто v1 ьеперь указывает на v2? А что теперь с данными v1? Они просто лежат в памяти не удаленными? А если после этого я еще и v2 удалю, то вообще все данные похерю что ли?
Вполне себе используется в паре с RAII примитивами.
Допустим тебе надо под мьютексом сделать что-то. Берёшь и пишешь { unique_lock(mutex); do_something; }.
Спасибо
Там внутри указатель на кусок памяти и переменная с количеством элементов. Они меняются местами в v1 и v2.
Можешь архивировать перед выгрузкой, тогда отдельно качать файлы не придётся.
Вы медленные тут, пиздец, меня уже в FAQ треде научили что к чему.
Как перестать орать. На хакатоне просят сделать систему пластиковых карт для города. Финальный приз (не факт что получишь) 55 кк деревянных на команду. При этом функционал как положено.
Эй глядите как. У нас тут философ завелся в треде. Расскждает на тему околоскрепных конструкций.
Х сп.....
55 миллионов рублей
Тебе ответят позже не надо бампать.
Причем я могу подключиться к обычным сайтам, но не onion. Проблема наверное в том, что я косо настроил socks для тора
Господи. Нужно было написать socks5h://127.0.0.1:9050 вместо socks5://127.0.0.1:9050
пиздец
Когда в прошлый раз пытался понять, зачем он, мне мозг распидорасило от байтоебских подробностей. Слышу о нем только то, как же он хуево задизайнен.
Boost.
Frfh hh
всё так
Туда же, куда уходят программисты после 40. Ковырять легаси говно, руководить чем-нибудь, пердеть в штаны в гос. конторах.
Слабая динамическая "типизация" - худшее изобретение человечества после атомной бомбы.
кто нибудь может пояснить мне за СЛОЖНОСТЬ этого языка? Учу по learncpp.com, уже на 14 главе, вообще ни одной сложности не возникало, хотя единственное, на чем до этого прахрамировал - пассаль в школе. Разве что забыть только могу что-то и потом бегать по главам вспоминать, но такое, в принципе, не часто.
В хакатоне не участвуй, сделай систему сам с корешами (хотя бы часть функционала для демонстрации), а потом, когда на хакатоне будет ноль результата, попытайся продать это решение городу по более адекватной цене. Как там с юр лицами и связями быть хз, опыта не имею.
В своё время, помню, норвежская контора обещала АЖ ЦЕЛЫЙ АЙПАД, если им пришлют реализацию нового нелинейного способа управления их оборудованием (типа пи-регулятора на матрицах, только на нейронках или ещё как). И по итогу конкурса они соблаговолили бы взять на работу победителя. Но так никто и не участвовал в этом наебалове, лол. Алгоритм с патентом сам может стоить на порядки дороже, чем весь этот айпад. Интересно, часто ли на фриланс-биржах норвежцы показывают такую жадность.
Почитай C++ Templates: The Complete Guide от David Vandevoorde and Nicolai M. Josuttis
template<size_t N>
ct_string( char const ( & )[N] )->ct_string<N - 1>;
>learncpp.com
Там все сложные (и не только сложные) места молча опущены.
>кто нибудь может пояснить мне за СЛОЖНОСТЬ этого языка?
Это СЛОЖНО.
А еще есть такие продвинутые книги по плюсам? Вот чтобы прочитать их все и ощутить сложность.
Это сарказм?
>ощутить сложность
Сиплюсплюс не делался для того, чтобы быть сложными.
Это не какая-то концептуальная сложность, которую нужно воспринимать как челлендж для своего интеллекта.
Если тебе нужно развиваться физически, то ты идешь в качалочку, а не таскаешь с собой постоянно рюкзак с кирпичами.
Если тебе нужно развиваться интеллектуально, то ты грызешь гранит науки, а не ебесся с узкоспециальными проблемами неудачного дизайна.
Сложность крестов по большей части состоит в исторически обусловленной непоследовательности. Почти любое правило языка сопровождается списком исключений и специальных случаев. Сами правила просты, а специальные случаи обусловлены совершенно разными, не связанными причинами, и поэтому требуют от тебя определенного бэкграунда. Такое не берется наскоком; хорошей памяти и природной смекалочки тут недостаточно.
На практике это выливается в то, что в языке не работают аналогии. Точнее они почти всегда работают, но вовсе не так, как ты ожидал.
Удивительно то, что поверх этого пиздеца удается создавать библиотеки с совершенно противоположными качествами: ты просто усвоил общие принципы, на которых построена библиотека и тебе не нужно ее изучать всю от и до. Например, ты вполне можешь себе позволить не знать о существовании какой-нибудь функции, потому что при необходимости ты можешь по аналогии предугадать существование этой функции вплоть до ее точного имени и с какими аргументами она должна вызываться.
Хотя бы в нетворкинг попробую. Что если вместо того чтобы быть рабом Я сам стану рабовладельцем создав там свою маленькую галеру? Главное найти кнут. Пряник будет виртуальным.
Двачую. Страуструп уже выжил из ума к моменту, когда придумывал инициализацию фигурными скобочками.
Ну ты нашел, где спрашивать, конечно.
Там отдельный язык придуман называется Max. Устанавливаешь его в Ableton и теоретически можешь делать любое преобразование на самом "низком" уровне. Зависит от скилла конечно. Возможно профи делают по-другому.
Начал смотреть видео по Hello World. Лектор говорит "надо в main добавить "return 0;" ,объязательно. Там все такие в этом Яндексе?
UB тоже разрешено стандартом.
Это давно не секрет.
deduction guide
Вот такой появился вопрос к знатокам.
А что если параметры человека будем хранить в одной переменной int х (например поместим туда age, где достаточно три бита; поместим gender, допустим 125 гендеров, как сейчас модно, где также достаточно 3 бита для хранения и т.д.). Эта переменная будет хранится в классе Human. Битовые маски для получения значений будут хранится в отдельной функции.
И собственно вопрос. Если будет много экземпляров класса (например 200 npc в локаии) скажется ли это положительно на производительности и ресурсозатратности или наоборот все будет хуже из-за дополнительных вычислений?
> или наоборот все будет хуже из-за дополнительных вычислений?
Да, плюс по памяти экономия выйдет незначительная на фоне всяких имён, адресов и прочих строковых данных.
Если тебе нужно просто дописывать в конец файла, открывай ofstream с флагами std::ofstream::out | std::ofstream::app.
Я загружаю файл в вектор построчно, делаю с ним что надо и перезаписываю обратно целиком. Самому не нравится, но все что мне нужно это пронумерованные строки и сохранение, т.к. есть более насущные проблемы тупо совладать с синтаксисом.
Со сдвигами и масками доступ к данным медленнее конечно. Но есть нюанс - у тебя больше уместиться в кеш, а с кешом проц работает где то в 100 (сто) раз быстрее чем с обычной ОЗУ. Так что все как обычно решается профилированием.
>ты можешь по аналогии предугадать существование этой функции вплоть до ее точного имени и с какими аргументами она должна вызываться
Это потому что Степанов придумал невероятно годный, продуманный и последовательный дизайн в STL.
Потому-что не надо делать геймдев на С++, а делать надо его на юнити\блюпринтах
Ну на движке пилить игры довольно уныло имхо, самое интерсное как раз кроется под капотом в движках.
Ну и многие студии разоряются, потому что на играх заработать удается далеко не всегда. Собственно поэтому пилится очень много игр уровня "три в ряд под андроид с донатом и кучей рекламы", потому что здесь хоть что-то можно получить.
В гейдеве не работал. Чисто собесился и ходил смотрел как там на месте всё устроено. Офферы - через раз - серые зарплаты (30% официально по ТК, остальное мимо кассы). Офисы во многих случаях забиты людьми под завязку. Работяги часто выглядят задроченными. Круг задач - в основном работа с мутным легаси кодом, который надо либо оптимизировать либо портировать либо довести до стабильного состояния.
Ну и сами собесы довольно неприятные в плане общения. То какие-то выёбщики, то неадекваты, то вообще всем похуй кого и зачем собесят (хотя потом звонят и делают оффер).
Как скомпилировать это https://github.com/moneymanagerex/System.Data.SQLite/tree/master/SQLite.Interop
в System.Data.SQLite.dll (содержащий SQLite.Interop.dll внутри себя),
производя компиляцию на linux, с помощью mono xbuild/msbuild ,
и сделать это так, чтобы на выходе, была windows-длл-ка,
первые байты которых, начинаются с MZђ , а не с ELF ???
Этот файл: https://github.com/moneymanagerex/System.Data.SQLite/blob/master/Setup/compile-interop-assembly-release.sh
выдаёт ELF, под названием SQLite.Interop.dll
Но это не виндовая либа System.Data.SQLite.dll (с SQLite.Interop.dll внутри),
которая генерится на windows, cmd-файлом:
>set fdir=%WINDIR%\Microsoft.NET\Framework
>set msbuild=%fdir%\v4.0.30319\msbuild.exe
>%msbuild% System.Data.SQLite\System.Data.SQLite.Module.2010.csproj
>%msbuild% SQLite.Interop\SQLite.Interop.2010.vcxproj
>pause
Хочу, чтобы mono выдало мне именно этот файл System.Data.SQLite.dll который многовесный, и который с интеропом этим, внутри, и чтобы win32 он был.
Какие флаги задать нужно? Или может что-то поставить нужно в линуксе, дополнительно?
Дизассемблировать.
Да, перед деаллокацией памяти выделенной под объект вызывается деструктор объекта.
Этот код https://ideone.com/IUcG2T в VS 2019 компилируется на /Wall без предупреждений. Но стоит вынести объявление approximation за while, как в строке 19 возникает C5045: Компилятор вставит компонент устранения рисков Spectre для загрузки памяти, если указан параметр /Qspectre. Что это означает? На предупреждения C5045 стоит обращать внимание, или забить?
Ясно. То есть, исправить это предупреждение в общем случае можно только включением /Qspectre (в случае MSVC). То есть, пытаться править код в общем случае бесполезно, потому что баг не на стороне пользовательского кода, я правильно понимаю?
ага, компилятор вставит барьер там с такой опцией.
Да не знает тут никто, это шарпистская тема, хоть что-то и написано на плюсах.
Твоя задача - получить боевой опыт, хоть какой-то. Дальше уже будет сильно проще. Иди хоть подносителем кофе сениором.
хм, сложные книжки именно по языковым особенностям это джефф элджер "библиотека программиста", александеску "современное проектирование на с++", абрахамса "шаблонное метапрограммиование", коплиена "стили и идиомы"...
а щас все проще стало делать в языке, поэтому скучнее и книги проще..
Я ничего не понимаю в ИБ или КБ, но мне кажется вопрос странным. Ведь если скачать себе на комп хотя бы тестовый файл с псевдовирусом, антивирус поднимет тревогу либо в момент скачивания, либо уже при запуске. Значит, и зашифрованный вирус будет отловлен при исполнении уже расшифрованных инструкций. Я это так вижу.
Ну собственно у меня в этом и непонимание. Что мешает антивирусу в момент исполнения задетектить угрозу. Но тогда в чем смысл крипторов не понимаю. Они +- распространены
Ничего не мешает, и они собственно так и делают.
Будь ты хоть миллион раз перешифованный, сделаешь что нибудь не по понятиям (прописка в автобуте, посягательство на какой-нить lsass) - значительно повысишь шансы улететь в карантин.
И наличие/отсутствие криптора здесь особой роли не играет. Основная цель криптора - обойти статик детект и эмуль, который используется только определённое время после старта проги
Ну во для примера взять майнер. Он же ничего в рантайме плохого не сделает. Он по сути через интернет данные передает и считает что то. То есть в автобут не прописываеися, диск не шифрует и тд. Есои закриптовать его , то по сигнатуре до запуска антивирус не спалитт его, но спалит ли антивирус его уже после дешифровке по той же самой сигнатуре? Просто я не понимаю почему так не происходит, а если так происходит то в чем вооьще смысл крипторов?
Пердоли будут жрать говно, выписывать кренделя и дрочить вприсядку, лишь не ставить нормальную ОС и нормальную IDE
Там есть задачи по типу "реализуйте сортировка_нейм" или только комплексные какие-то задачи? Я с литкода только пару задач решал, потому и спрашиваю как там это устроено, может к задачам нужны ещё знания какие-то.
> Плюс статьи
Они в самих задачах или где-то во вкладке на сайте? Вроде потыкал по кнопкам сейчас и не нашёл.
винду уставаливай и wsl накатывай для своих пердолей
>"Unlocked algorithms" Кормена
Не сильно отличается от "Грокаем...".
Недостаток подобных книг - это отсутствие реализаций структур данных. Много ли толку читать про графы, если ты даже примеры из книжки скомпилировать не сможешь?
>Посоветуйте какое-то лёгкое чтиво по алгоритмам и структурам данных
- Род Стивенс - "Алгоритмы. Теория и практическое применение", или, если 500 страниц для тебя слишком много,
- Вирт - "Алгоритмы и структуры данных".
Если тебе все же приспичит разобраться с реализацией каких-то структур данных, то
- Каррано, Причард - "Абстракция данных и решение задач на C++" или
- Уильям Топп, Уильям Форд - Структуры данных в C++
Почему после того как я начал сидеть в C++ треде он стал так популярен? Или мне кажется.
>Грокаем алгоритмы
Такая пораша фууу
Индус ебанный писал. Бесит реально. Еще картинки там, и перевод говнище.
Не знаю, сколько ты здесь сидишь, вот тебе график количеств постов в день за полгода. Здесь всегда на удивление высокая активность, один из самых живых тредов.
В 2019 такого вроде не было.
> Вирт - "Алгоритмы и структуры данных"
Это как раз то что мне и нужно было, спасибо. Реализацию с особенностями языка я загуглю и гляну вне книги. Задачки с литкода возьму. Возможно в будущем серьёзней этой темой займусь с последними двумя книгами, сейчас вряд ли потяну.
Мне показалось или ты намекаешь на то, что я неясно выражаюсь?
Если
>>Он же ничего в рантайме плохого не сделает
тогда антивирь его и пропустит, не за что на бутылку сажать. Если ты конечно проц на 100% им грузить не будешь, тогда и самому юзеру станет понятно, что его поимели
Тебе это всё с какой целью надо кстати?
Как писать либы и делать на этом бабос?
Потому-что закрытый код в 21 году нигде, кроме ебейшего энтерпрайза не используется.
И очень много либ есть с открытым кодом, но платные.
А полноценный попенсорц бесплатный - считай пиар и продвижение своих технологий в мир.
Я понимаю например что Майкрософт подсаживает всех на свои продукты.
Как либа может быть платной если возможно просто скопировать код?
Если ты нарушаешь лицензию в своем продукте на 3rdparty библиотеки - тебя можно в суде выебать в жопу.
Так Я просто беру копирую код и говорю что сам его написал. Переписываю в крайнем случае. Или они проверяют совпадения?
Берёшь и продаёшь библиотеку, делов то. Hyperscan до того как его Интел купило продавали свою либу, Visual Studio использует платный EDG в качестве фронтенда плюсов для всякого автодополнения, RAD Game Studios всю жизнь продавало свои изделия типа видеокодеков, сжимальщиков, телеметрии и тд. XPDF предоставляет двойную лицензию и нужно купить, если не хочешь попасть под GPL. Главное, как везде - найти нишу и сделать продукт, только продукт в твоём случае - библиотека.
В Яндексе стажировка по плюсам есть. Что спрашивают на собесе?
Думал он про деньги.
Копипейст нельзя. С учетом того, что бизнес обычно состоит больше чем из одного человека, в случае чего в суде будут свидетели.
Переписывать дорого, и потом самим поддерживать придется
Поддерживать? Классы добавлять что-ли? Там же вроде ничего не должно сломаться.
>кто-то случайно .pdb файлы наружу да или просто забыл случайно отключить дебажные символы в исполняемом файле или динамической библиотеке
>кто-то посмотрел и увидел символы из GPL-ной библиотеки
Вот и всё, привет судебные разбирательства.
Если случайно этого не сделать?
Да даже проще, кто-нибудь из сотрудников стуканет или по глупости разболтает и все.
Можно ли сравнивать его с nullptr, чтоб это значение было как знак ошибки?
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] -> [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ДВАЧ.
Computer = Computer
ФУНКЦИОНАЛЬЩИК сожрал бумажку и высрал работающий системный блок с ВОДЯНЫМ ОХЛАЖДЕНИЕМ и предустановленой WINDOWS 7. На компьютере уже был установлен АЛАН ВЭЙК и ХАСКЕЛЛ ПЛАТФОРМ. Корпус был красного цвета, с наклейкой ТУРБО на прозрачной боковой крышке. Затем ФУНКЦИОНАЛЬЩИК написал в 2 строчки старую версию G++:
Compiler :: [C++SourceCode] -> [ExecutableFile]
Compiler source =(Link . Compile) source
СТРАУСТРУП взял исходники своего дома и запустил компиляцию. Компилятор начал дристать СООБЩЕНИЯМИ ОБ ОШИБКАХ. СТРАУСТРУП попытался разобрать первую строчку, но увидев такое, дальше лезть не решился(таблица умножения и так вымотала его):
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::map<std::basic_string<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>,std::allocator<char> > const, std::basic_string<char, std::char_traits<char>,std::allocator<char> > > > >
Высрав 10 000 СТРОК СООБЩЕНИЙ ОБ ОШИБКАХ, компилятор скончался от ЛЕНИВЫХ ВЫЧИСЛЕНИЙ ПРЯМОЙ КИШКИ и из монитора вылетела ЛЯМБДА. Придерживая круглые скобки квадратными скобками, ЛЯМБДА в ужасе съеблась под ближайший камень. Ей еще долго не захочется принимать и возвращать значения. Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку, но передумал и решил вначале запостить эту историю на ДВАЧ.
>Довольный СТРАУСТРУП плюнул в руку, чтобы наслюнявить хуй и уже решился залезать на мамочку
От жары не могу кодить. Может пойти охотиться на тянок?
Её нет со мной больше.
лол))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Конечно - в исключительных ситуациях. А не когда надо вернуть пустой итератор.
>Тебе это всё с какой целью надо кстати?
Я раньше думал, что антивирусы это какие то ебы, которые дохуя по умному работают, а сейчас стал интересоваться и читать что да как, и удивляюсь как все в некоторых моментах очевидно что ли. Я просто ожидал прочитать что антивирусы это такая хуйня, которая делает проникновения вируса почти невозможным и надо очень постараться чтобы кого то заразить, а сейчас все больше складывается впечатление, что нужно просто написать вирус с нуля самому и его никто не задетектит (до определенного времени конечно)
Напишешь вот так сам, используя стандартные техники, а потом словишь дженерик детект.
Но всё конечно возможно, сложность и цена вопроса только со временем возрастает, с появлением всяких антиэксплоитов/антируткитов. Зачастую настолько, что уже что-то нормальное в одну клаву и не сделаешь
Пока выделил следующие:
- Боттлнек на I/O. Как с этим быть? Считывать большими чанками по несколько Мб?
- Парсинг. Стоит, наверное, проверить, можно ли (и имеет ли смысл) что-то попараллелить.
- Учёт количества вхождений. Наивный подход - std::unordered_map<слово, счётчик>. Сразу возникает мысль, что при парсинге большого файла с огромным количеством разных слов может тупо не хватить памяти под мапу. Также нужно будет ещё как-то трекать именно топ-100 слов, не сортировать же всю мапу после парсинга.
Также разрешено использовать буст. Буду очень благодарен за любые советы и наводки, анончики!
>- Боттлнек на I/O
А какой у него боттлнек?
Он же поток, он никогда не пытается загрузить весь файл, у него буфер.
>std::unordered_map<слово, счётчик>. Сразу возникает мысль, что при парсинге большого файла с огромным количеством разных слов может тупо не хватить памяти под мапу
Не может, а точно не хватит. Столько оперативки не бывает, чтобы все возможные слова поместить.
Дженерик детект это типо по поведению?
>Столько оперативки не бывает
Очевидно - создаешь рядом еще файл на 4Тб, помещаешь слова туда.
>- Боттлнек на I/O. Как с этим быть? Считывать большими чанками по несколько Мб?
mmap на nix'ах. На виндах тоже что-то есть, но я хз
>- Боттлнек на I/O. Как с этим быть? Считывать большими чанками по несколько Мб?
>- Парсинг. Стоит, наверное, проверить, можно ли (и имеет ли смысл) что-то попараллелить.
Пох. Займет пренебрежимо мало.
>- Учёт количества вхождений.
>может тупо не хватить памяти
Поточный алгоритм.
>Очевидно - создаешь рядом еще файл на 4Тб, помещаешь слова туда.
Или берёшь готовый файл в виде любой key-value базы (ту же leveldb) и фигачишь слова/вхождения туда, не зная бед.
https://onlinegdb.com/HkjeXzo_u
trie же
> но если программа многофайловая
Типо dll? просто копируй их вместе с exe
> нужно создать установщик, это не подойдёт.
Почему? Установщик это же exe и данные, которые он распаковывает. В чем проблема?
Проблема в том, что я хочу красивую кнопку "Опубликовать", на которую можно нажать и программа будет готова для использования конечным пользователем. Как то же это делают разработчики, а как - я не знаю.
Не понимаю. exe готово к использованию. Обычно если используются dll, то exe просто лежит в папке с кучей dll. установщик просто exe, dll и всякие другие файлы копирует в нужные ему папки. Можешь сам писать установщик, но нахуй надо. Просто dll копируй и все если для себя пшешь
Кнопку где?
Ты можешь сделать установочный файл .msi. Есть плагин для visual studio. Есть отдельные утилиты, чтобы делать установщики типа InstallShield.
Ещё ты можешь сделать пакет для менеджера типа chocolatey или vcpkg.
Самый простой для тебя способ сделать exe архив из содержимого папки release (если у тебя проект простой и не тянет сторонние зависимости и либы).
Ну проект сделан на make, как и всё остальное в лялексе.
В файле README подробно написано как собрать.
Как?
Просто я так понимаю, что алгоритм работает следующим образом:
Нашли К, если после К идёт I, то ок, потом I-N, N-G, G-? Дойдя до последнего элемента, алгоритму не с чем сравнивать G и он его не выводит. Я добавлял условие для поиска связи для элеммента
if(i >= sizeof(buf2)-1 && (buf2[i-1] == arr[j][k] (и так далее), но на выходе всё-равно получаю говно
Если ты знаешь как это сделать проще, то подскажи плз, дедлайн горит
Спасибо!
Разработчики такой сценарий в свой проект не закладывали. Тебе в любом случае придётся поставить mingw или cygwin, чтобы у тебя был GNU тулчейн, необходимый для сборки (компилятор gcc, сборщик make, генераторы скриптов autoconf/automake и отладчик gdb).
Саму студию под этот тулчейн настраивать крайне геморно, так что используй вместо студии VSCode.
У меня такая приложуха была в виде курсовой на 3 курсе. Как-то слабовато для диплома.
А почему нельзя как то этот make проект в vcxproj конвертировать? как то очень странно, что для компиляции c++ проекта приходится дрочиться с разными компиляторами. А можно просто в vs создать проект и просто все исходники ctrl c ctrl v сделать? Будет работать?
Ну потому что make чисто под линукс и его утилиты. CMake кроссплатформенный и он из промежуточного представления CMakelists делает проекты/скрипты под разные тулчейны и IDE.
Одних исходников в проекте мало, ещё нужны правила сборки - указать список внешних зависимостей (библиотек, заголовков и т.д.), указать какие файлы надо компилировать, указать флаги для компилятора (стандарт c++, уровень оптимизации, архитектуру и т.д.), указать во что нужно компилировать (исполняемый файл или библиотека), указать значения макросов, используемых для условной компиляции.
Вот это вот всё находится в Makefile / CMakelists.txt файлах. Если проект маленький, то содержимое можно ручками перенести в vcxproj. Но для таких проектов как у тебя это нереально.
программа второстепенна. Там надо алгоритмы на графах реализовать. Метод ветвей и границ, метод потенциалов и т.д. И чтоб при этом результат визуализировался со всеми данными
там нечастое обновление просто, 15-20 кадров в сек
> Одних исходников в проекте мало, ещё нужны правила сборки - указать список внешних зависимостей (библиотек, заголовков и т.д.),
Ну это же в vs делается. Пути к хедерам где то в настройках проекта указываются, зависимости через vcpkg установлю.
> указать какие файлы надо компилировать, указать флаги для компилятора (стандарт c++, уровень оптимизации, архитектуру и т.д.), указать во что нужно компилировать (исполняемый файл или библиотека), указать значения макросов, используемых для условной компиляции
Это же само при создании проекта делается.
Кстате да. Благо оно там в одну строчку включается.
Как оно само поймёт что проект состоит из нескольких vcxproj и в какой последовательности они собираются и линкуются? Никак. Ещё в makefile есть разные таргеты под разные платформы с cuda и без. Ещё там pre и postbuild скрипты с использованием чисто лялексных команд типа touch, grep, tar, ldconfig, cp, которые тебе на виндовский эквивалент нужно будет ручками переписывать.
Короче в проекте больше, чем laba1.cpp, ты задолбаешься все настройки переносить из Makefile в vcxproj. А ещё его надо потом обновлять как-то до последней версии.
Пока молодой - обязательно попробуй гейдев
Ну vcxproj тоже место на помойке. Частично привязан к оси, ide и тулчейну, да ещё и в XML формате.
Ты между сортами говна мечешься.
Бери ue4, за него деньги нормальные платят.
Что тогда?
>вылетает
Может обращение к нулевому указателю, может проехался по памяти, может другое. Дебаггер должен указать точное место, где происходит "вылет".
vcxproj - нажал одну кнопку и работает. Это именно так, как должна работать система сборки. И никак иначе.
Чёт ты попутал. В лялексе и большинстве современных IDE нет под него кнопки. А ещё он к версии студии привязан и в старой студии его не открыть, а в новой он конвертируется с ошибками (весело, да?). Тогда любители "одной кнопки" ставят себе ещё одну студию (естественно на виртуалку, чтобы говном не измазаться).
Если и есть волшебная кнопка, то называется она CMake.
> В лялексе и большинстве современных IDE нет под него кнопки.
В который искренне радуюсь, что под это дерьмо мне не надо писать.
> Если и есть волшебная кнопка, то называется она CMake.
Симейк это настолько ублюдочное дерьмо, что прям очень хорошо говорит об экосистеме С++ как таковой. Когда такой сблев стал де-факто стандартом.
Вообще, как же охуенно, что мы новые проекты на работе начали на неткоре писать
Привет
Реально. А что мешает собственно? Если ты безвольный который не хочет зубрить книги по языку, то он тебе не нужен.
Собственно, пытаюсь совместить свою любовь к онеме и любовь к программированию, чтобы кодить хотелось еще сильнее. Это же круто, когда помимо самого кодинга, кодинг еще и в интересующем тебя домене?
Так вот, если брать аниме, мне интересна наверное обработка видео, улучшение качества и быть может кодирование. А именно, например, улучшение качества видео, апскейлы, восстановление, вот это всё.
Так вот вопрос, мне хоть в какую сторону копать начать? Типа, что это за область, чем можно в ней заниматься? Есть какое-то отдельное направление про которое можно почитать?
Спасибо.
Ну так ты не сказал возраст, пол, наличие времени и денег для учебы и т.п. На основе чего рассчитывать шансы?
Просто звонишь им и говоришь "Я самоучка, хочу пройти собеседование, дайте тестовых заданий" Тебя возьмут. Им не бумажка нужна, а РАБОТИНК
Если ты выучишься по книжам, курсам, гайдам индуса с ютуба, то тебя возьмут на работы без вышки. Если конечно ответишь на вопросы и пройдешь тестовое задание на собеседовании
Не монтаж. Кодирование, апскейл, стриминг быть может. Можно, конечно, еще сюда нейроночки прикрутить, чтобы улучшать качество старого онеме. Но здесь понятно куда копать.
Ответ правильный, это в твоём тесте ошибка.
Ответил ты правильно, но я самого вопроса не понимаю. Можешь обьяснить вопрос пж?
Вероятно в тесте ошибка. Правильно будет "В качестве образца по отношению к классу выступает?"
Просто звонишь им и говоришь "Я самоучка, хочу пройти собеседование, дайте тестовых заданий" Тебя возьмут. Им не работник нужен, а РАБ
пофиксил
Перекатыйвайся полностью в C#, если тебе нравится студия и дотнет (кор).
У меня проект кроссовый и мультиязычный и я даже не представляю как его без гомоебли в студии можно сделать (микросервисы - неткор, фронт - жопаскрипт, бэк и железо - с/c++/asm/cuda, ещё пихон под всяко разно).
Апплаишься на галеру и год там веслаешь. Потом может в нормальную разработку выплывешь. Заодно поймёшь что такое "программирование".
Если у тебя нет диплома (да любой бумажки об образовании), значит ты не хочешь учиться. А если ты джун, который не хочет учиться, то зачем тебя вообще на собес приглашать?
Я не хочу учиться в учебном заведении т.к. считаю что их подход к обучению неэффективный, а знания устаревшие. Вопросы?
>Симейк это настолько ублюдочное дерьмо, что прям очень хорошо говорит об экосистеме С++ как таковой. Когда такой сблев стал де-факто стандартом.
В чем проблема Cmake?
C++make
Устаревший знания я и дома получу пупсик., но быстрее и дешевле.
Я конечно понимаю, что у нас к сожалению, почти везде есть устаревшие знания, но я что то очень сомневаюсь, что ты знаешь все лучше, чем тебе могут объяснить в какой нибудь чебышевке, пми вшэ/пми
Насколько актуален список книг для обучения на картинке?
Открой любой cmake файл, хули. И сравни эти кракозябры с ХМЛем студии, который читаем и понятен
https://github.com/libarchive/libarchive/blob/master/CMakeLists.txt
например - говнолиба из нашего прода
Боюсь представить каких размеров будет эквивалентный vcxproj (проект из одного файла это 5kb текста). А ещё ты, наверное, очень любишь переводить проекты на новую студию каждые 2 года (казалось бы открыл sln и работай, а вот хуй).
> А ещё ты, наверное, очень любишь переводить проекты на новую студию каждые 2 года (казалось бы открыл sln и работай, а вот хуй).
Угу, переезжали, без проблем. И на 22 переедем.
Бэкенд много на чём пишут, в чём посыл то твой? У меня проект текущий имеет несколько разных бэков под разные конфигурации. Один бэк на шарпе, второй на плюсах.
Зачем это делать, если можно не делать? Открыл cmake, выбрал версию студии и нажал generate. Всё.
> Зачем это делать, если можно не делать? Открыл cmake, выбрал версию студии и нажал generate. Всё.
Зачем вообще все эти танцы с симейком, когда просто открыл студию и все?
Раз в 2-3 года одному программисту нажать Upgrade на солюшен не убудет, лишь бы не ебаться с симейком
Так в крупных проектах апгрейд не срабатывает автоматом. Нужно закатывать рукава и разгребать говна в proj файлах.
Закатать рукава нужно 1 раз, сделать все нормально, и дальше после этого проект взлетает автоматически.
Когда мне дали анальную легасню из студии 2012 - я ее уже перевел на 2015, 2017 и 2019. Первый апгрейд некоторое время сожрал небольшое (2-3 дня афаик, и то большая часть проблем - с расширениями языка и 3рдпатями) - дальше мы апгрейдились одной кнопкой.
Ну я в таком не пачкаюсь. Беру виртуалку и на неё ставлю легаси студию, легаси проект и весь легаси тулчейн. Для говна должна быть отдельная банка с плотной крышкой.
Когда сказано, что говно надо активно девелопить, после того, как оно уже засохла - ты достаешь леечку и говно начинаешь размачивать, хули еще делать
Ну так тебе код надо переписывать, а не devops переделывать. Ты не в ту сторону воюешь, братан.
Я уже свое отвоевал, и у меня охуенный проект, который компилируется 1 кнопкой сразу после git clone.
Полпроекта я там тоже переписал в свое время, с охуительными коммитами вида +7 -27000
У нас проект клонируется, компилируется, тестируется и отгружается одной командой (под 3 разных оси/платформы на выбор). Всё делается не выходя из уютненького VSCode.
Нахуй мне его читать. Это компилятор/линковщик пусть его читает
Я вижу, что cmake кроссплатформен, под кучу ос и компиляторов работает. Заебись же. Что не нравится?
Ладно, не скомпилировал. Что делать с этим? Я просто не понимаю как узнать что не так по этим краказябрам. Некоторые штуки даже поиском по файлам не находятся
Не разрешенный внешний символ - это значит либо где-то инклуда не хватает, либо не подключена/криво подключена библиотека.
Поскольку ты компилишь отлаженный проект, то скорее всего ты где-то проебался с подключением библиотеки.
>Некоторые штуки даже поиском по файлам не находятся
Линковщик работает уже с обработанными файлами - ему с кракозяброй удобнее, чем с исходными именами.
Хуячишь две unordered_set из своих контейнеров, профит.
Может, на x86 есть сегментные регистры для доступа к памяти base:offset. Сейчас используют линейные адреса. На других архитектурах есть инструкции для загрузки данных из памяти.
>В сях не сделали доступ к регистрам из-за кроссплатформености
Возможно, в любом случае работу с регистрами лучше возложить на компилятор, даже register выпилили кейворд оставили, но компиляторы его игнорируют, т.к. мало кто знает как эффективно юзать регистры.
Да, программы взаимодействуют с регистрами, обращения к памяти занимают много времени, поэтому у нас есть кэши и регистры, также в регистрах хранится состояние.
>ассемблерная вставка магическим образом не ускорит производительность
Т.к. я нюфаг, то не ебу. Скорее всего ассемлерная вставка даст прирост производительности там где требуется задействовать векторизацию или специфичные команды конкретной архитектуры. К счастью, популярные компиляторы могут в автовекторизацию и оптимизацию под конкретные архитектуры.
Вообще встроенный ассемблер не стандартизирован, поэтому, например, в gcc и msvc способ записи отличается.
чтобы принимать итераторы в алгоритмы, а не твой VasyanContainer
template<typename T>
map& operator[] (int index) {
map<T>::iterator it = _mapname_.begin();
while(index-- != 0) {
it++
}
return *it;
}
Гениально, отправляй заявку для стандарта 23.
Когда-то давно для диплома для пробегания по алгоритмам и некоторым основам сжатия я использовал Data Compression: The Complete Reference. Ещё по работе для некоторых вещей связанных с анализом мпега читал Video Demystified: A Handbook for the Digital Engineer. Ну и, естественно, просматривал исходники ffmpeg и GStreamer. Но вот прямо про полную с нуля теорию и практику сжатия (особенно в видео) я хз, это реально нужно знать матан. Сам я кодер который проводит нетривиальный rate-distortion анализ с более-менее сложным форматом даже боюсь начать писать.
Но вот недавно у меня была прихоронена ссылка про LZ-кодирование, может с неё можешь как-нибудь начать: https://glinscott.github.io/lz/index.html
То есть частичный порядок у тебя. Ну вот такой алгоритм:
>Строишь диаграмму Хассе для обоих контейнеров
>Проводишь топологическую сортировку каждого из них
>???????
>Не знаю, не придумал
При выполнении метода Token::tokenTypeToValue с параметром TokenType::empty метод не находит параметр среди первых членов пар из вектора Token::tokenTypeToString_pairs, хотя там есть пара {TokenType::empty, ""}. Причём отладчик говорит, что внутри метода Token::tokenTypeToValue вектор Token::tokenTypeToString_pairs имеет размер 0, то есть пустой. Но выше вызова этого метода находится определение этого вектора. Странно, почему так?
https://pastebin.com/MThvHGFf - Token.h
https://pastebin.com/nxHCL8qS - Token.cpp
Информация о человеке должна быть записана в struct
Вот создал я структуру
struct Human {
string name;
int year;
string section;
};
А как посчитать кол-во section с разными значениями и вывести имя этого человека?
https://ideone.com/EqAmWc
Всё работает. Возможно ты обосрался с порядком создания static объектов в другом месте.
А где это место может быть?
Перед main() находится объявление объекта класса TokenStream:
TokenStream tokenStream;
Это объявление вызывает конструктор TokenStream по умолчанию:
TokenStream::TokenStream()
: isFull{false}, buffer{TokenType::empty} {}
Этот конструктор вызывает конструктор Token:
Token::Token(TokenType type)
: type{type} {
value = tokenTypeToValue(type);
}
Этот конструктор вызывает статический метод tokenTypeToValue, который в файле Token.cpp был представлен и который выбрасывает domain_error.
Не понимаю, где здесь ошибка.
Класс TokenStream:
class TokenStream {
public:
TokenStream();
Token get();
void putback(Token t);
void ignore(TokenType toThis);
private:
bool isFull;
Token buffer;
};
А где это место может быть?
Перед main() находится объявление объекта класса TokenStream:
TokenStream tokenStream;
Это объявление вызывает конструктор TokenStream по умолчанию:
TokenStream::TokenStream()
: isFull{false}, buffer{TokenType::empty} {}
Этот конструктор вызывает конструктор Token:
Token::Token(TokenType type)
: type{type} {
value = tokenTypeToValue(type);
}
Этот конструктор вызывает статический метод tokenTypeToValue, который в файле Token.cpp был представлен и который выбрасывает domain_error.
Не понимаю, где здесь ошибка.
Класс TokenStream:
class TokenStream {
public:
TokenStream();
Token get();
void putback(Token t);
void ignore(TokenType toThis);
private:
bool isFull;
Token buffer;
};
Общая идея такова, что статические объекты (static Token::tokenTypeToString_pairs) и объекты в глобальной области видимости (TokenStream) создаются до вызова main(). При этом порядок создания/инициализации определён только в рамках единицы трансляции (файл cpp). Так как у тебя они в разных файлах, то статические члены Token видимо создаются после конструктора TokenStream.
Если не понятно, то просто перенеси TokenStream в main(). Скорее всего отпустит.
Я перенесу TokenStream tokenStream в main(), но это потребует архитектурных изменений. Впрочем, они и так напрашивались.
Спасибо за совет!
Спасибо. Еще вопрос. У конст ссылки мы не можем взять адрес, так как она становится rvalue?
Можно. Такое делают, когда в operator= на самоприсваивание проверяют, вроде if(this != &rhs){...}. А такие слова, как rvalue, вообще забудь.
Указатель это просто переменная, хранящая адрес в памяти. Всё что происходит по этому адресу к обычному указателю отношения не имеет.
Если у выражения есть имя (а у ссылки имя есть), то оно lvalue.
Вообще можешь рассматривать ссылку как альтернативное имя объекта. Если ты у объекта можешь брать адрес, то и у ссылки тоже.
#pragma warning (push, 0)
// инклудишь хедеры СТЛ здесь
// вместо 0 можно задать любой уровень предупреждений
#pragma warning (pop)
Страуструп с лебедями
читать надо БАРБАРУ МУ
Но у меня много где включаются заголовочные файлы стандартной библиотеки. Могу, в принципе, везде так написать, но есть ли способ "красивее"?
C++ Primer же, последней редакции. И зачем тебе переводы, ты что, на русского барина работать собираешься?
Выглядит как-то не очень удобно. Есть что-нибудь сопоставимое по уровню комфорта с Visual Studio?
clion,имхо он даже лучше студии в некоторых моментах,но
там все платно и анально-проприетарно.На рутреке лежит,если че
Потому что создавалось для наших бабушек и дедушек и давным-давно устарело, оставшись уделом троллей на дваче.
Альтернатив полно - code blocks, eclipse, kdevelop, но ничего и близко до студии не дотягивает.
Сначала не очень удобно, потом за уши не оторвёшь. Ну и полезно это, многое узнаешь. Я после vim-а и уютной консоли смотрю на visual studio, как на нелепую неповоротливую неудобную хреновину. Но это во многом дело привычки и вообще зависит от задачи. Небольшие проекты я бы точно из-под консоли делал, с большими не уверен.
В студии очень удобны дополнителные фичи (профилировщик, анализ памяти, даже мешанины из managed и native, дебаггер больше нравится чем gdb). А так согласен, если пользоваться только навигацией да автодополнением, то действительно достаточно вима с какими-нибудь YCM и nerdtree.
Мимокрокодил
Вот профилировщики и анализаторы, как по мне, на лялексе поинтереснее будут. perf пушка, valgrind туда же, address/ub/thread/ещёкакие-sanitizer-ы есть.
>>36925
Наверное, не пробовал. В проекте на работе несколько сотен тысяч строк, но я там редко ковыряюсь. Приходилось grep-ать пару-тройку раз. В модуле, который я написал, около 200 файлов с сорцами, по которым размазано 12к строк кода, и мне очень комфортно. Плагинов у меня нет, я чудной.
Ассемблерные вставки делают, чтобы использовать SIMD, их потоковые и векторные расширения (SSE, AVX, NEON и так далее). Во всяких кодеках и обработчиках медиа контента они иногда встречаются. На уровне регистров уже никто не пердолится.
VSCode. Под убунтой и лялексами с окошками весьма удобно. В качестве бонуса многие хоткеи и навигация как в студии. Можно накатывать сверху плагины под всё что угодно и кодить на нескольких языках, жонглировать гитом и докером, дебажить удалённо ардуинку и даже gpu код.
Второй вариант Eclipse. Он устарел в плане юзабилити, но под него есть очень крутые плагины для специфических задач.
А VIM он для говноедов и работников станций техобслуживания. Такой себе универсальный мини набор для работы в пиздецких условиях (например под Gentoo).
Остановился на VSCode. Даже хеллоуворлд сделал и работает.
Только вот не понял, Makefile надо вручную делать? Ни каких облегчений нет?
Microsoft доделывает плагин Makefile Tools. Можешь попробовать его.
Наборы интринсиков у разных компиляторов разные. Да и сами функции это крупные строительные блоки из asm команд. Языковая вставка - более гибкая и универсальная конструкция.
Предположим я хочу написать функцию, которая перемещает элемент контейнера из одного места в другое.
Делаю следующее:
auto tmp = *i;
i = container.erase(i);
// UB starts here
container.insert(pivot, tmp);
Если контейнер это std::list то всё ок. Но вот если std::vector, то возникают проблемы, так как erase (да и insert) инвалидируют итераторы.
В общем, рассмотрел несколько вариантов и остановился на if constexpr(). Всё правильно сделал?
Также я узнал про Boost::Context, что там используется свой шедулер, аки в микроконтроллерах, и мне кажется, что сложий механизм позволит точнее рулить ядром.
Анон, как быть? И как работают аудио/видео кодеки, обеспечивая реалтйцм?
inb4 #pragma warning(disable: 4820)
У vector, array и list итераторы bidirectional. Собственно в qsort тебе надо свопать значения итераторов и двигать их влево и вправо операторами ++. --. Зачем ты вообще erase/insert используешь?
Только с forward_list нужно сделать шаблонную специализацию, так как там forward итератор.
Ну так это понятно, что в его шаблоне параметр T& container лишний.
>Предположим я хочу написать функцию, которая перемещает элемент контейнера из одного места в другое.
Она называется std::rotate.
>чтобы лишний раз проц не грузить,
Не получится. Грузи ядро и молись чтобы ос не часто тебя переключала, или ставь нормальную рт ос, благо они и бесплатные есть, или навешивай на Винду рт расширения (за деньги).
а ничего что квиксорт использует просто обмен двух элементов (std::swap)?
потому что перемещение - это O(n) на векторах и вместо квик у тебя будет пиздецсорт O(n^2 log n)
Конечно установка русского - это не самый очевидный процесс, пришлось повозиться.
А вот касательно работы, то всё заработало можно сказать из коробки. Скачал модуль на С/С++, создал проект и всё откомпилировалось без проблем.
Действительно.
Qt я пробовал ещё в винде и мне он не понравился по интерфейсу. Слишком своеобразно там всё. Хотя вроде работает.
Kdevelop не компилирует проекты. Не знаю в чём проблема. Видимо, надо допиливать вручную.
Идея слишком жирная, умудряется подтормаживать на i7 с 16 ОЗУ, когда как вижуалка даже на моём старом домашнем кудахтере летает.
Коммунити-версия.
четыре да
Тогда есть Eclipse CDT
>И как работают аудио/видео кодеки, обеспечивая реалтйцм
Буферизация. Аудио-библиотека сразу запросит у тебя несколько миллисекунд и будет сама потихоньку их проигрывать. Причём с запасом, чтобы в случае косяков и временных замедлений не выдавать ужасный треск на колонках. А у тебя кроме как поллинга судя по всему нет вариантов, если драйвер твоего устройства не умеет как-нибудь непрочитанные данные складывать в своём буфере и сигнализировать потом об их наличии.
> не умеет как-нибудь непрочитанные данные складывать в своём буфере и сигнализировать потом об их наличии.
Потенциально умеет, так как это пилит другой человек на ПЛИС. Видимо, это самый правильный путь с буферизацией данных на устройстве и их слив через дма.
Толсто
Потому что это книги для вкатывальщиков, и в консоли ввод-вывод тривиален, когда даже для простейшего гуя нужно понимать десятки концепций и писать кучу строк. Читай в книгах про конкретные gui-либы, тот же говно-Qt.
Книга Макса Шлее про культи тебе дана
Visual C++ всегда компилировал настоящий нативный код.
Но для эстетов есть всякая хуйня типа C++\CLI, C++\CX, Managed C++ и тд, которую надо специально выбирать, и специально на ней писать.
Хотя ладно, C++\CLI я 1 раз использовал, как middleware между сишным интерфейсом ДЛЛины и кодом на дотнете.
Всё там можно анон, смотри внимательнее. Я давно правда qtcreator на вантузе использовал. Сейчас просто кросскомпилирую с ляликса под винду, можно и 64 и 32
Концепции можно легко выучить, а вот если нет интерфейсов кроме консоли, то это серьёзно ограничивает возможности.
>Как программировать графику?
Ставишь соответствующую библиотеку и програмироваешь.
>Почти все книжки посвящены пердолингу с консолью,
Не припомню ни одной такой книжки, где центральной темой был бы именно пердолинг с консолью. Обычно книга посвящена языку в целом, или его отдельным, аспектам или какой-то парадигме программирования применительно к языку.
>а вопросы работы с графикой не рассматриваются.
Потому что в стандарт не входят никакие средства для работы с графикой. Работу с графикой обеспечивают сторонние библиотеки.
>Но вот как это сделать, нигде не пишут.
Пишут в соответствующих книгах и в документации к библиотекам.
В студенческие годы я программировал графику на WinAPI и получал пятёрки, потому что другие вовсе писали в Borland C++ 3.0 в старых видеорежимах VGA 640х480.
Прошло уже два десятка лет, а ничего нового похоже не придумали. Все сидят с умным видом и изучают консоль в надежде, что это им как-то поможет стать крутым программистом. Но ни один заказчик не станет покупать консольную программу. Под программой все понимают графическое приложение с привычными элементами управления: меню, кнопки, поля ввода и т.п.
>ничего нового похоже не придумали
Новое по твоему - это чтобы в книге по крестам был еще и референс по вин апи?
Я начинал свой путь программиста ещё со старых 8-разрядных ЭВМ и поэтому я прекрасно понимаю все эти консоли и прочие старые методы ввода/вывода. Но в 2021 изучать консоль - это архаизм. Книги надо переписывать с учетом программирования в графическом режиме.
>Но ни один заказчик не станет покупать консольную программу
Лёл, где ты у сервира ГУЙ увидил?
Если сделать графический интерфейс к серверу, то он сразу будет выглядеть как профессионально сделанная программа.
ты побольше шизоидов слушай, еще не такое узнаешь
Какой же ты отсталый. Так видимо и остался в начале 2000-х.
На плюсах gui делают не более чем в четверти современных проектов.
А тебе к сессии надо готовиться, первокур. Все lab.cpp уже сдал, а то допуска к экзамену не получишь?
Получается можно не платить жадным разработчикам десктопных IDE и писать всё в webIDE?
Хеллоуворлды - да. Что-то сложнее - ой сомневаюсь.
Есть функция
bool match(vector<Vertex>& left, vector<Vertex>& right),
которая возвращает true, тогда и только тогда, когда для каждой вершины из left найдётся вершина из right, такая, что в графе есть путь между ними.
Можно ли ее реализовать быстрее, чем за O(n^2)?
Ну в смысле O(m*n^2)
Дак что мне теперь делать? Отказаться от графических приложений и писать веб-сервер, чтобы конечный пользователь работал в браваёзере?
Тогда не особо С++ и нужен получается. Я такое и на РНР в своё время писал.
Не слушать долбоёбов, например.
Старый код (от 10 лет и более), требующий доработки. Чаше всего это десктоп и энтерпрайз.
Если ты пройдешь сюда - то лучше го к нам в нвидию пилить дебаггер для тегры, денег х2 от самсунга.
И тот же бизнесцентр
Сделайте лучше тегру X3 по цене между Xavier и X2. А с дебаггером мы и без вас разберёмся.
Скажи по секрету - новый свитч будет? А то NMH3 на горизонте и не знаю, покупать старую модель или нет.
Да должен быть, сам жду его.
Программистов на чём угодно больше, чем вакансий для них, примерно раз в 100.
Гугли книги по системам рекомендаций
>Если ты пройдешь сюда - то лучше го к нам в нвидию пилить дебаггер для тегры, денег х2 от самсунга.
а накидай вопросы с ваших собесов? Или от себя, что считаешь чел. должен знать, чтобы ты с ним хотел работать?
+ в ту команду спрашивают всякое про компиляторы\дебаггеры и прочее.
Ебланы значит. Ну я не шучу.Че за бред написать фибоначчи или обратиться к двумерному массиву через указатель без []? Реализация string или vector. Ты про нее читаешь просто когда знакомишься с ними. Там должно быть написано как они работают, а на cppreference вообще реализция каждой функции лежит. Это уровень 11 класса. Может по синтаксису только что то не для 11 класса, а так ничего сложного нет. Я надеялся встретить ебать какие задачи на логику, а тут хуита какая то
Ну, я персонально еще просто спрашиваю за С++, всякое разное, словами. Там про линковку\компиляцию например, или про шаблоны.
А вообще - я сам, когда начал собесить, у меня волосы дыбом были, когда приходит наночелик с опытом в 10 лет, хочет 300к на руки, а знает столько, что задаешься вопросом - чел, ты 10 лет кофе программистам носил? Или что вообще делал?
я вот больше >5 лет в си/с++. Что я знаю про линкомвку и комплияцию? Да каша у меня: знаю если стат. линковка, есть динамическая. Стат. во время комплилияции резолвит все зависимости, дин. - динамический линкел. Есть там в gcc всякие weak линковки - можно подменять либы, например через LD_PRELOAD_LD. В никсах nm вроде можно посмотреть символы - какие динанмичискеие, а какие статические. В винде при чём студия для дин линковки всё равно требует либ файлы почему-то специальные для dll. Что, я совсем быдло? А если мне не пригождалось это во время работы? Ну спроси меня что--нибудь, давай, опусти меня полностью
Спрашивать я ничего не буду - я когда собеседую, я пытаюсь узнать ПОНИМАЕТ ли человек, или просто как обезьяна что-то делает по заученным паттернам.
Все эти вопросы - на понимание. В итоге у меня были сениор девелоперы, которые не понимают указатели, не понимают компиляцию, да вообще нихуя не понимают. Выучили некий сабсет языка, научились в вижуалстудию\симейк добавлять новые С++ файлы и все. Что они делают - не понимают.
И твой ответ, впринципе, меня бы устроил +-. Еще один из любимых вопросов - когда надо юзать эксепшены, когда не надо.
Там просто слушаю, как рассуждает человек и его аргументацию.
Ответы уровня - ЭКСЕПШЕНЫ ЭТО МЕДЛЕННО - сразу нахуй. А вот ответы - я бы юзал их в XXX, но не юзал в YYY, потому-что ZZZ - это заявка на понимание.
>когда надо юзать эксепшены
Для меня это пипец трудный вопрос. Какой-то больше философский. Главное, чтобы весь проект был однородным в отношении этого. Вот это главное
> Главное, чтобы весь проект был однородным в отношении этого
Это не такой плохой ответ, но опять же - почему. Учитывая, что у нас есть куски без эксепшенов, а есть с эксепшенами. Само собой, на границах модулей все обернуто в try\catch.
Да ты и сам сабсетом пользуешься. Вопрос про POD, ну такое. После 5 лет писанины такое вообще из головы выветривается полностью (я бы только ответил, что это plain old data и это вроде как встроенные типы и структуры из них). Фибоначчи тоже не помню (а ты помнишь что такое золотое сечение?). Про стринг - не все знают/помнят про SSO.
Но скорее всего ты обычный педант, поэтому за 2 года никто мимо тебя не проскочил.
>Да ты и сам сабсетом пользуешься
Я понимаю, что я делаю. В этом разница. И мой сабсет достаточно нихуевый, у нас есть пара кусков написанных мной, где прям охуенное метапрограммирование.
Про PODы, кстати, вопрос не мой, и фибоначчи тоже.
> Но скорее всего ты обычный педант, поэтому за 2 года никто мимо тебя не проскочил.
Отнюдь, я просто отсеивал профнепригодных. И, кстати, это окупилось, т.к. те ребята, которые прошли сквозь меня - просто охуенные. С одним из них ща на проекте сидим - полное взаимопонимание.
Я сам не собесил, а получал людей как есть. Некоторых удавалось вывести на хорошую производительность, некоторых - нет. Но, с таким самоподдувом, как у тебя, сложно собрать рабочий коллектив.
> Но, с таким самоподдувом, как у тебя, сложно собрать рабочий коллектив.
Не знаю о чем ты, но у меня шикарная и суперскилловая команда. Я тут, оверолл, готов работать всю жизнь.
>Be prepared to write your code on white board.
>How std::string is implemented?
>How std::vector is implemented?
Как вообще, в рамках интервью, должен выглядеть ответ на подобные вопросы?
Чтоли берешь маркер и херачишь на доске полную реализацию "1 в 1 как в msvc"? а потом тебя поъёбывают на тему, что в gcc оно иначе реализовано.
Я, всё таки, ощутимо выше середняка, учитывая что у меня грейд сениорский в топ конторе мира. Ну да ладно.
Да тут ещё попробуй договорись, кто такой середняк.
В FAANG N это Netflix. Не путай больше.
>у меня грейд сениорский
Знаешь в чём разница между смотрителем переезда и директором шлагбаума?
У меня qml получает данные класса через паблик слоты. Есть кнопка, которая вызывает паблик слот, который меняет некоторые данные. Но проблема в том что данные не обновляются. Пробовал связать коннектом сигнал и слоты, которые данные возвращают, эмичю этот сигнал в функции которая через кнопку вызывается и данные не обновляются. Ну и что н так?
В классе сделай купроперти с твоими данными, и эмить сигналы об их изменении, в кмл просто забиньдся на эти проперти. Не забудь зарегистрировать класс для кюмл, и тип данных если нестандартный.
Да у меня зареган класс через engine root context
Я знаю про макрос Q_PROPERTY, но проблема в том что у меня данные организованны по-другому, а мне допустим только строку надо вернуть, и регать это все в Q_PROPERTY создавать в классе еще одну переменную, такое.
Кароче можно именно как-то эти функции перевызвать чтобы данные обновились?
Но я вообще обычно пихаю в проперти, если ее делать как member там только остаётся сигналы слать об изменении и все, а в кюмл совсем элементарно.
У тебя нет биндинга текста, функция запрашивает его только при старте. Ты можешь сделать проперти и прописать ее в Text, или дать твоему тексту id, и при нажатии кнопки делать textId.text = tempClass.text();
В мейн файле создается объект и регается через engine.rootContext()->setContextProperty
Около секунды где-то через ctrl-r
Я так понимаю там компилируется только крестовая часть, кюмл и жс делает джит компайлер при старте программы.
под виндой - вообще любой код это обертка над Winapi, как и под никсами - это обертка над POSIX Api, рофел
ООП нет в винапи, МФЦ это попытка сделать ООП на его основе. Лучше чем было но все равно та ещё жопоболь.
Я в универе спаял транзистор, лол.
>пара кусков написанных мной, где прям охуенное метапрограммирование
Так это ты делал ту знаменитую компайл-тайм хеш таблицу на 50 элементов?
Судя по комментам, он SDK пилит и всякие обёртки.
Ноп, чел с другой команды
Просто бери самое популярное решение, и проблем не будет.
Вот примитивная программа, чисто в итераторы потыкаться: https://pastebin.com/ZhyrMJNt
Первый пик - если вводить меньше пяти значений, второй - больше пяти.
Функцию заканчивает работу и память за ней подчищается? Но в программе же по прежнему остаются итераторы, ссылающиеся на эту область.
Да и почему в такому случае после некоторого количества введенных значений программа начинает работать как и задумывалось?
Если не выебываться и возвращать вектор, то все, очевидно, работает.
Что происходит с вектором v после выхода из функции foo?
переменная вектора v в функции локальная, после выхода и функции вектор перестаёт существовать. Всё , что содержал удаляется. И итераторы ссылаются на непонятно что.
В общем, самый очевидный ответ и есть истина.
Меня с толку сбило то, что при небольшом количестве элементов память перераспределяется сразу, а при чуть большем - остается нетронутой. И то, что я больше по питону, а там, пока есть ссылки, объект будет существовать.
И еще вопросик.
Получается, если возвращать напрямую вектор, то будет создана его копия?
>Меня с толку сбило то, что при небольшом количестве элементов память перераспределяется сразу, а при чуть большем - остается нетронутой. И то, что я больше по питону, а там, пока есть ссылки, объект будет существовать.
На разных компах может быть разный результат. Тут неопределённое поведение. Может у другого программа просто упадёт.
>Получается, если возвращать напрямую вектор, то будет создана его копия?
Скорее всего будет вызван перемещающий конструктор и данные, которые содержал вектор в функции, просто присвоятся новому вектору.
Простите за дубль, мб тут быстрее ответят, надо на завтра сделать
Здравствуйте. Надо реализовать паттерн стратегия. На с++ давно ничего не писал, инфы по проблеме не смог сам найти.
Сам код: https://ideone.com/kHTnS3
Как мне в метод PaymentPoint передать обьект типа CashPay или CardPay как реализацию интерфейса IPay?
Что я делаю не так и как будет правильно?
Пикча отвалилась
Отбой, все заработало. Я до этого закомментил строки с наследованием чтобы протестить и забыл раскомментить.
кек
один
Один.
Óдин
Метод це тупо функция, которая вызывающий её объект класса принимает по указателю и обзывает его this.
хорошая попытка, питонист.
твоя зп +15% - ЭТО МИНИМУМ,НИЖЕ КОТОРОГО ТЫ ДАЖЕ НЕ ПОДЫМАЕШЬ ПОПЧАНСКИЙ. Проси выше, но в разумных пределах.
Посмотри на dou.ua какие там ЗП у мидлов.
вот сей курс.
https://youtu.be/IH493f9Vo7E
сия книга
http://padabum.com/d.php?id=174372
Ну еще есть Пол Айра.
и вот сия книга
https://www.manning.com/books/object-design-style-guide
это ооп. А именно - композиция.
>>06825
в Qt об этом уже подумали за тебя.
А так - ничего такого
https://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c
>>07920
Нормально. зарегайся на линкедыне, добавь туда свои скиллы, пройди тесты на знание навыков и хрюши тебя сами будут искать.
плюс имей гитхаб.
А вообще возьми доучи нормально С++ и работай себе. Если плюсы реально надоели - тогда смотри другие технологии. Возможно, тебе подойдет какой-нибудь другой язык.
std::cout << "PROGRAMM START\v" << std::endl;
У меня тоже самое было, в студии
Потому что винда и кодовые страницы - зло, которое должно было умереть в восьмидесятых.
>Тогда и contain должен быть помечен как const.
Он должен быть константным (если может) безотносительно этой лямбды.
>Разве не стоит в парламенте дямбды принимать const auto& i?
Страуструп пишет, что передача по ссылке имеет смысл, когда параметр имеет размер больше 2х-3х размера указателя.
>И cbegin, cend вместо begin, end.
Если предикат const-корректный, то это избыточно.
В Visual Studio если забываешь выбрать пустой проект, то она создаёт какую-то дичь с дополнительными файлами. Потом их уже нельзя удалить, проект без них не компилируется.
Так это не статический массив, а массив который должен создаваться для каждого объекта класса map. Он же не должен быть общим.
Загугли "static dynamic array" и поймёшь.
Спасибо. А есть ли готовый способ автоматически, в зависимости от типа, передавать его по ссылке или нет? Само собой, с шаблонами.
Как тебе компилятор должен рассчитать размер статического массива через переменную, которая получит значение только в runtime?
Принципиально есть. Готового и элегантного нет.
Через хуевое и очень опасное расширение, не надо так
Да.
Замени const на constexpr.
Нужно посчитать функцию пикрил 1 в точке 1.0. Для этого я пишу программу пикрил 2. В ней я пишу функцию, а во второй строке то, как я бы считал на калькуляторе. Получаю пикрил 3, причём во второй стрчке верный ответ, можете сами посчитать на калькуляторе. Сижу с горелой дупой уже третий час.
ЧТО ЭТО ЗА СРАНЬ НАХОЙ????!!!1
Может функция exp() какую-то еболу возвращает. У меня так было с функцией pow() из этой же библиотеки.
exp(1) возвращает правильное значение экспоненты.
Потому что целочисленное деление: (1/32) == 0
Лучше перепиши явное приведение к типу double, хотя бы так:
(1.0/32.0)
У тебя 1/32 == 0, потому что оно вычисляется целочисленным делением, потому что оба операнда целочисленные.
Вот так будет правильно считать:
return (x / 16 - 1 / 32.) exp(2 x);
Спасибо, работает как надо.
Как там компилировать большие проекты из нескольких файлов? Самом писать Makefile?
>>37051
Все плагины оказались говно. Дальше компиляции одного файла ничего не работает.
>>36879
А как они смогли пропихнуть CLion на Linux, где всё собирается из сырцов? Может всё таки есть исходники и их можно собрать и получить бесплатную версию?
Эту, типы же аргументов совпадают. Только это конструктор, а не просто функция.
Ух бля, спасибо! Ща затестим
То есть "сдал экзамен по этой хуйне несколько лет назад, с тех пор помню только пару формул, остальное забыл в силу неиспользования" - это хорошее знание и понимание математики, так?
Блять, я сейчас сгорю нахуй. Взял две либы с cmake, сгенерил sln, собрал статические либы. Всё без ошибок, всё ровно. Беру эти либы, линкую к проекту в студии. Судя по выхлопу с verbose, линковщик их находит и успешно линкует. Но, блять, мне один хуй пишет unresolved external symbol! Какого хуя? Я уже всё проверил - всякую парашу вроде МТ, чарсета, calling convention и прочей ебатени. Всё сходится, нихуя не работает. Ни одной ошибки кроме unresolved external symbol. Ну ёбаный рот ваших крестов. Как мне узнать в чём дело? Почему каждый раз какой-то лютый дроч с линковкой?
Понял, спс.
Может ты проебался с calling conventions (extern C, mangling). Может просто нет реализации у методов. Может ты разными компиляторами собирал и теперь линкуешь. Да масса причин может быть.
А есть вообще нормальные способы проверить что там собралось в либах? Я год назад их собирал и линковал без проблем, правда сразу с cmake собирал, а не через проекты. Сейчас решил через проекты делать чтоб можно было их вместе с основным проектом собирать автоматически. Я уже просто всё что можно было проверил, в основном проекте копипастой всё как в либах пробовал даже выставлять. Один хуй он не видит реализации. Может cmake как-то серит мне в штаны и выдаёт нерабочий проект? Просто если я сейчас соберу напрямую с cmake и нихуя не заработает, я нахуй разъебу пол квартиры.
В принципе рабочий вариант, но это очень специфичный способ (в PCSX2 как раз так делали емнип для плагинов, но их недавно выпилили). Обычно просто в рантайме прыгают на функцию с нужными инструкциями в зависимости от CPUID. Кажется у Агнера Фога в гайде была глава как раз про такую диспетчеризацию
Посмотри, какой символ требует твоя прога и какой экспортирует твоя либа. Не знаю как на винде это делается, но 100% можно.
А есть в ваших библиотеках какая-нибудь хорошая книга с полным погружением в шаблоны, где используются классы тайп трейтов, появившиеся уже после 11 стандарта? А то в шапке все на 03 указаны
Прекрасное место, узнал там всё, что нужно знать. Если есть cppreference, то книги не нужны.
Раньше вот библиотеки были более адекватными и там просто вызываешь нужную тебе функцию, а сейчас понадобавляли всякого наследования, чтобы вообще не логично и не понятно.
Я вот раньше программировал на ZX Spectrum и там самое сложное было найти инфу про какую-нибудь подпрограмму ПЗУ. А когда находил, то проблема снималась и просто вбивал в регистры нужную инфу и делал вызов подпрограммы. Всё четко и ясно. И ни какого наследования не нужно было. Всё работало!
Раньше огонь для готовки еды добывали трением палки и тоже все работало.
Но современный дискурс: агрегация лучше наследования.
Ну ты же на Basic писал, а не на c/c++/c# и их родственниках.
> Но современный дискурс: агрегация лучше наследования.
Лет через 15, может, плюсы и эволюционируют до прогрессивного мира, но в 2021, где cmake до сих пор не сдох, этого ждать рано.
У этого класса есть методы, которые должны возвращать экземпляр класса.
Сейчас я заметил, что в этих методах я объебался и возвращал вектор, но при этом все прекрасно работало.
Получается, что если метод должен возвращать экземпляр класса, а в ретерне возвращается такой тип данных, какой конструктор может принять на вход, то конструктор будет неявно вызван?
Конструктор вида MyClass(SomeType st) задает неявное преобразование из SomeType в MyClass.
Если оно нежелательно, то объявляй конструктор со спецификатором explicit.
Кто-нибудь юзает Code::Blocks + gcc на винде?
Как заставить gdb корректно работать и не падать при каждом чихе?
Ну и я о том же.
Я пришёл к выводу, что на винде только две альтернативы: Visual Studio (но она платная) и Qt Creator. Последний включает в себя набор MinGW. Ничего настраивать не надо, просто ставишь Qt и всё работает.
Ты ей пользовался? Там надо быть постоянно онлайн, чтобы просто она запускалась. Я пару месяцев не запускал и у меня слетела авторизация, дак пришлось заходить на сайт, выполнять авторизацию, на почту пришло подтверждение и только после подтверждения с почты, я смог снова зайти в студию.
Так же ты не являешься владельцев программ, которые написал в этой версии студии. По сути ты бесплатно пишешь для Microsoft код. Так что кроме учебных целей, она ни для чего не подходит.
Qt же можно использовать и для коммерческих целей, только надо делать динамическую линковку библиотеки. Либо открывать код для всех. Авторство у тебя никто не отберёт.
Разрешаю хотеть.
> Так же ты не являешься владельцев программ, которые написал в этой версии студии. По сути ты бесплатно пишешь для Microsoft код.
А можно пункт из соглашения и конкретную цитату?
>>Так же ты не являешься владельцев программ, которые написал в этой версии студии. По сути ты бесплатно пишешь для Microsoft код. Так что кроме учебных целей, она ни для чего не подходит.
так ведь похуй
>Так же ты не являешься владельцев программ, которые написал в этой версии студии. По сути ты бесплатно пишешь для Microsoft код. Так что кроме учебных целей, она ни для чего не подходит.
Ну ты ебанутый...
Я, кажется, начал понимать вимопердолей, кок-блокс-дебилов и прочих любителей доставания гланд через анальное отверстие.
Напридумывают себе сами какой-то полной хуйни, что МИКРОСОФТ ЗЛОЙ ВЛАДЕЕТ ТВОИМ КОДОМ САМ БИЛЛ ГЕЙТС ЕГО ВОРУЕТ, и пердолятся дальше.
Я прочитал ЛС для VS 2019 Community, ничего про "ты не являешься владельцев программ, которые написал в этой версии студии" не нашёл
Я студии программировал на I5-4210U (2 ядра 4 треда), 4гб памяти и ссд на 128 гигов. И прод писал, норм было.
Правда я с этой дерьмоконторы все равно сьебал как только смог
8, когда начальник был на месте, 0, когда начальник был в командировках, а он был часто в них
Ладно, можешь не отвечать. Просто я 1.5 года веслал на средних размеров галере и нигде ранее не видел такого слабого менеджмента (вменяемыми были только гендир и менеджмент на 1-2 уровня ниже). Ну и "начальник отдела с++ программистов" намекает, что ты залётный. Кстати, у нас были "начальники" с писечкой, а у вас есть такие?.
Если ты месяц поработаешь в макдачке - то ты на авито купишь компуктер, на котором студия будет летать
Я с Core2Duo обновился еще в 2010 году, рофел
>Говорю что некро не тянет студию
>Фаза 1
>Не верят, пишут, что у них на на некро все летает
>Фаза 2
>Ряяяя да это же ноут 2010 года
Чет не перестаю с вас проигрывать
Съеби в /b/, рачьё.
Они старых ПК и не видели наверно. Я вот вообще начинал с ZX Spectrum'а, потому что IBM PC тогда стоил астрономических денег.
О! так там самое сложное было найти инфу про какую-нибудь подпрограмму ПЗУ. А когда находил, то проблема снималась и просто вбивал в регистры нужную инфу и делал вызов подпрограммы. Всё четко и ясно. И ни какого наследования не нужно было. Всё работало!
Нет, самое сложное было - это работа с магнитной лентой, потому что дисковода не было.
Это не как сейчас CTRL+S нажал и файлик сохранился.
>У вас не некро, а просто слегка устаревшие модели.
Удваиваю этого // Pentium 4 / Windows 7 / MSVC 2015 / C++Builder 6.0
Тогда зачем ты взял самое пидорское что есть в виде эклипса? А гачи-натурал?
То есть лялех ты осилил, умеешь собирать через autotools и cmake, а эклипс решил принести сюда?
Хз, я дело только с ffmpeg'ом имел немного. Отправляй ему всё и надейся на лучшее.
> У меня теория о том, что плюсы привлекают шизоидов и хоббистов.
> Т.к. никто РАДИ интереса не будет трогать джаву, питон и прочий мусор. а С++ можно.
Подтверждаю. Два года работаю на джаве, но по вечерам играюсь с плюсами.
Я ребенок и мне 9 лет. Вот решил заняться самообучением, а вместо советов получаю здесь ну то что ты пишешь. Трудно помочь? Ах да ты ведь местный тролль и помочь чисто не в состоянии.
Vim уже совсем казуальный, он выдаёт пикрил на Ctrl-C.
>нигде ранее не видел такого слабого менеджмента
Собалезную. Зато бесценный опыт "как не надо"
>Ну и "начальник отдела с++ программистов" намекает, что ты залётный.
Ващет на галерах деление идет именно по ЯП, максимум мобильщиков могут вместе согнать
>Собалезную. Зато бесценный опыт "как не надо"
Как не надо что? Мне нужен был опыт в определённой области, поэтому я нырнул в говна. Сейчас я общаюсь с product owner'ами, а не с клоунами типа "начальник программистов c++".
>деление идет именно по ЯП
Нет, деление идёт по заказчикам и их пулу проектов (средние галеры и выше не берут мелкую залупу от всяких ИП). А на проекте ты лишь формально "программист c++" (по факту ты пишешь на 2-3 языках, допустим, c++, пихон и жопаскрипт).
>Сейчас я общаюсь с product owner'ами
Кек, а я еще с PM-ами и BA-ями общаюсь. Ты вообще понял что спизданул?
>Нет, деление идёт по заказчикам и их пулу проектов
Что, матричную структуру все еще неасилили?
>(средние галеры и выше не берут мелкую залупу от всяких ИП)
>А на проекте ты лишь формально "программист c++" (по факту ты пишешь на 2-3 языках, допустим, c++, пихон и жопаскрипт).
Рашн девелопмент, индусятня отдыхает. Может ты еще и мануал куа делаешь?
ну меня ~400 на руки + еще 350 примерно с акций, если годичный вестинг размазывать по месяцам.
Начинал с 250 на руки.
нихуя себе. Офигеть. Почти лям в месяц. Порше кайен за год. Мда... Ты меня унизил. У вас многие там так шикуют? Ты какой-нибудь крутой ph.d, да?
Я сто раз писал, что я самоучка.
А зарабатывают так +- все, т.к. акции дают всем и оно наслаивается.
> Порше кайен за год
Я на трешку в Москве накопил за 4 года
> Как пройти собес к вам?
Я просто на hh в свое время закинул резюме без особой надежды, и оп - получилось.
Серьезно - никакой магии нету. Но да, я сурово С++ выдрачивал.
Диванон @ лигивон. Но, оверолл - нет, я просто рядовая С++ обезьяна без каких-либо суперзнаний в области 3д графики или нейроночек.
Ну, у меня есть достаточно уникальный бэкграунд в том, что я дохуя чего знаю от вообще почти всех областей. Я и админил, и девопсил, и, лол-куашил (иногда руками), писал код на 4х разных языках, зная только С++ из них.
Когда поняли, что мной можно заткнуть вообще любую дыру - это очень оценили, и в последнее время все мои задачи звучат как "придумай" или "разберись". За это, вестимо, и платят. У нас есть кому писать код, всем вокруг - я уже упоминал, что я далеко не самый сильный программист в команде. Но вот то, что я могу делать вообще все - ценится.
Ну тогда питайся через жопу
>Ты вообще понял что спизданул?
Что тебе не понятно? В терминах твоей галеры я имею прямой выход на заказчика мимо всяких прокладок типа тебя. Формулировка задач из первых уст, оперативная обратная связь, возможность влиять на проектные решения, прозрачное распределение денег.
>Что, матричную структуру все еще неасилили?
Не знаю о чём ты. Есть там всякая хуета типа skill matrix и по ней формируются проектные команды.
>Рашн девелопмент, индусятня отдыхает. Может ты еще и мануал куа делаешь?
Та галера не была таким днищем. Но идея то одна - сэкономить на работниках. Для этого нужны люди, которые будут переобуваться на ходу (либо "руководитель c++ программистов" берёт в аренду людей у "руководителя других программистов", что не так выгодно).
Гугли eclipse cdt примеры. На аглицком вот тут подробно написано.
https://www3.ntu.edu.sg/home/ehchua/programming/howto/eclipsecpp_howto.html
>мной можно заткнуть вообще любую дыру
>я могу делать вообще все
Сдать бы тебя на галеру. По рефералке за тебя несколько твоих зп дадут.
const char ptrStr переписать как
char (const) ptrStr
или
const char & Str переписать как
char (const&) Str
>>Ты вообще понял что спизданул?
>Что тебе не понятно?
Маня, product owner - это должность, а ты кидаешься терминами в которых не разбираешься
>В терминах твоей галеры я имею прямой выход на заказчика мимо всяких прокладок типа тебя. Формулировка задач из первых уст, оперативная обратная связь, возможность влиять на проектные решения
Ахуеть удивил - менеджмент на проекте оказывается с кастомером общается!!111 Кек, сразу виден твой уровень (джун), если тебя раньше постоянно отодвигали раньше от выхода на кастомера. Видимо боялись что ты хуйни наморозишь.
>прозрачное распределение денег
АХАХА!! Либо ты сейчас же называешь внешние рейты всей команды, либо идешь нахуй.
Нет, эстимирование в сторипоинтах - это не распределение денег
>Есть там всякая хуета типа skill matrix и по ней формируются проектные команды.
Оно-то ясно-понятно, ты даже не понял идет речь
>либо "руководитель c++ программистов" берёт в аренду людей у "руководителя других программистов", что не так выгодно
Лол, я наоборот лучше спихну вакансию на профильный отдел, чем поучаствую в выгорании своего подчиненного.
Насчет выгоды - это вообще что-то за гранью, всё равно кастомер платит
Проверь в eclipse указаны ли пути к компилятору в настройках. Сам эклипс это просто редактор кода. Можешь для начала вообще не использовать его, а просто сохранить код в текстовом файле и скомпилировать gcc/g++ в терминале "g++ tvoycod.cpp -o prog"
Пердоля, спок.
Можно, но типы будут разные.
const char "ptr
и
char const "ptr
- одно и то же
char "const ptr
- #этодругое
const char "const ptr
и
char const "const ptr
- это третье
В первом случае указателю ptr можно присваивать адрес любой константы char.
Во втором ptr хранит адрес неконстантного char. Указателю ptr нельзя присваивать новый адрес; он всегда указывает только на тот (неконстантный) char, который был задан при инициализации.
Третье - это как второе, только char уже константный.
В случае со ссылками второй и третий кейсы не имеют смысла, т. к. ссылка итак всегда связана с ровно одним объектом (тем, который задавался при ее инициализации).
На 4к баксах нужно знать почти все в плюсах.
Я ожидаю полные ответы на:
0. английский на уровне intermediate+ или advanced
1. мув семантика, перфект форвард и универсал референсес
2. руле оф 3, 5, зеро
3. виртуал фанкшенс, виртуал тейбл, пьюре виртуал (может ли чисто виртуальная функция иметь тело?)
4. лямбды (можно ли привести лямбду к указателю на функцию?)
5. констэкспр
6. темплейты (СиЭрТиПи)
7. контейнера, алгоритмическая сложность, инвалидация итератеров
8. исключения (эксепшен гарантииес)
Если ты еще знаешь Qt/QML, то всё, вы приняты!
А какой смысл вообще плотить за знания, а не бизнес велью?
Этож какая-то выслуга лет получается как у тупой военщины.
>А какой смысл вообще плотить за знания, а не бизнес велью?
Бизнес велью - это и есть знания и умения быстро писать код без траты времени на фикс своих ошибок.
>выслуга лет
Выслуга лет - это безумная тупая фигня, именно что важны знания, а не кол-во лет на секундомере
Вы в проекте реально используете все эти хипстерские навороты, или это чисто так, вкатунов покошмарить?
>Бизнес велью - это и есть знания
В чистом виде знания составляют бизнес велью разве что только у инфоцыган. Да и то не у всех.
Тут скорее тема о том, пытается ли чувак разобраться в новом молодежном сам по себе (т.е. его драйвит) или он учится из-под палки.
Но вообще большую часть юзаем.
Энивей, не знаешь чо учить - учи английский
У инфоцыган софтскиллы, а не знания
Что за засада?
>>>2053070
Второй пик отклеился
>кидаешься терминами
Product owner сидит с нами в одном офисе и с ним обсуждаются любые проектные вопросы напрямую, а не через "менеджмент".
>менеджмент на проекте оказывается с кастомером общается
В нормальной конторе с кастомером могут общаться все. На галерах доступ к кастомеру стараются ограничить. Работяги могут договориться напрямую и съебать на шлюпке (я был свидетелем таких событий). На моём проекте, когда кастомер вышел на работяг, то сразу сбросил за борт "руководителя" (типа тебя) и ещё пару "аналитиков" (норм у них пердаки тогда полыхнули).
>внешние рейты всей команды
У меня сейчас такого нет, мы RnD контора, а не галера.
>Оно-то ясно-понятно, ты даже не понял идет речь
Ну так это часть твоей работы, нести пургу всяким терминами и пускать пыль в глаза кастомерам и работягам.
>спихну вакансию на профильный отдел
Не неси хуйни. У твоего отдела один кастомер, у соседнего другой. Если ты спихиваешь работу в соседний отдел, то люди начинают выгорать там (время работяг чётко расписано и за просрочки кастомер жёстко ебёт). Если в соседнем отделе манагер не совсем долбаёб, то хуй тебе он людей даст за просто так.
Ты задал один и тот же вопрос 100500 раз. Неоднократно получив ответы, ты отписываешься, что "тебе не помогло". Гуглить ты не умеешь и повторяешь вопрос тем, кто ответа не знает и гуглит за тебя, потому что никто этим говном здесь не пользуется. Уже реально на шизу похоже. Я не верю, что бывают настолько тупые вкатыши, даже я не задавал таких вопросов в самом ю начале. Скорее всего, ты тролль, и ответ тебе не нужен, тебе нужно всех заебать. И ещё говоришь что-то про бан, это именно тебя надо было давно забанить.
>Product owner сидит с нами в одном офисе и с ним обсуждаются любые проектные вопросы напрямую, а не через "менеджмент".
Маня, продакт оунер и есть менеджмент
>На моём проекте, когда кастомер вышел на работяг, то сразу сбросил за борт "руководителя" (типа тебя) и ещё пару "аналитиков" (норм у них пердаки тогда полыхнули).
Ну и пизда им, кек, раз они не могут оплатить юриста, чтобы вписал пнукты о не переманивании ВЕЗДЕ
>У меня сейчас такого нет, мы RnD контора, а не галера.
Ясно-понятно, "прозрачно" кек. Денежные вопросы никогда не выходят за пределы сейлзов и финансового отдела
>Не неси хуйни. У твоего отдела один кастомер, у соседнего другой
Какая ебанина. Кастомер есть не у отдела, а у галеры. Точка блядь. И это задача галеры - собрать гребцов из разных отделов на проект. Хоть из разных городов, но чтобы попадали по скиллсету.
На проектах гребцы отвечают перед ПМом, лол. Но никто (кроме тебя) не называет "отдел" --- "проектом". А у тебя эти понятия нахуй спутаны.
https://en.wikipedia.org/wiki/Matrix_management
>Седжвика
Тот еще мозгоеб. Ты ничего не потеряешь, если забьешь на его книжку в пользу какой-нибудь другой.
>Зачем он сделал цикл for без инкремента?
В иллюстративных целях.
Годных ответов не было. Один щитпостинг. Гуглить умею. Возьми и напиши нормальный ответ на вопрос если ты можешь ( в чем я лично сомневаюсь ). Я десятилетний школьник который пытается учиться на каникулах, а у вас такое отношение...
>>53174
Да все, вроде понял уже.
Короче он как бы от одной цифры идет по ссылке к другой, пока не встретит цифру равную самой себе. И вот уже тогда их связывает присваиванием. Я просто не сразу догнал как у него фор без тела цикла работает.
>В иллюстративных целях
Ну мог бы и не изощряться да попроще написать, да.
>Ты ничего не потеряешь, если забьешь на его книжку в пользу какой-нибудь другой
Что можешь посоветовать по алгоритмам?
Нормальный ответ - не пользоваться говном, которым не пользуется вообще никто почти.
У нас пока все норм, но вангую что маздай через 20 лет будет без твоего спроса сливать и закачивать любую инфу с/на твой ПК
Вдогонку.
Эклипсом пользуются в основном несчастные, которые делают что-то супер узкоспециализированное, т.к. для этого какие-то садисты написали эклипс плагин. Всё, по собственной воле эту парашу никто не юзает.
Ну тебе уже ответили >>52821, но ты проигнорировал и продолжаешь постить одно и то же.
Последний раз объясняю последовательность действий.
1. Проверяешь настройки эклипса, знает ли он о пути к компилятору
2. Проверяешь, установлен ли в системе компилятор
Вангую, что проблема может быть только в этих двух пунктах.
Если ты не в состоянии это сделать, значит тебе нужно изучать основы работы с ОС, а не программирование.
>Маня, продакт оунер и есть менеджмент
Я тебе про доступ к менеджерам разного уровня говорю. И о том, что на галерах есть большая прослойка из говноменеджеров. Когда через них идёт информация, то она очень сильно искажается.
>о не переманивании
Каком переманивании? Люди не пошли в штат заказчика. Они сами окуклились в рабочую единицу и брали у заказчика подряды.
Во втором случае заказчик пообщался с конечными исполнителями и сократил штат до смысла, что в итоге ударило галеру по карману.
>Денежные вопросы никогда не выходят
У галер довольно запутанные цепочки подрядов и субподрядов, а также список исполнителей. И в этом болоте исчезает довольно много денег.
>собрать гребцов из разных отделов
И зачем тогда вообще такие "отделы"? Получается, что "начальник отдела программистов с++" - хуйня без задач.
>matrix management
На пике: research prodction sales finance
Это вообще не про галеры, дебич. Откуда там research и sales? Это для компаний полного цикла.
>какие-то садисты написали эклипс плагин
This. Например пидорасы из NVidia, сделавшие Eclipse NSight Edition.
Зачем вообще деструктору default?
struct Foo {
Foo() = default; // 2
int x;
~Foo() = default;
};
>И о том, что на галерах есть большая прослойка из говноменеджеров.
Та нет такого
>Каком переманивании?
О таком, что пидорнули посредника. Значит посредник долбаеб
>И зачем тогда вообще такие "отделы"? Получается, что "начальник отдела программистов с++" - хуйня без задач.
1. Решать вопросы по стеку входящих проектов ("этот проект для C++ или нет?")
2. Быть первым кто ответит на вопрос, кто подойдет на новый проект по скиллам
3. Проводить собесы гребцов в команду
4. Отвечать на сложные вопросы подчиненых, помощь с проектом, менторство
5. Остужать горящие пердаки заказчиков, когда кто-то из подчиненных обосрался
6. Заниматься передачей опыта по горизонтали
7. Выходить на звонки с кастомерами по технической части
8. Педалить блядь код
>>matrix management
>На пике: research prodction sales finance
>Это вообще не про галеры, дебич. Откуда там research и sales? Это для компаний полного цикла.
Мань, включить мозги и увидеть там PM, BA, FrontEnd, BackEnd, QA --- что, религия не позволяет?
Алсо, ору с "компаний полного цикла"
Как зачем? Это ты явно указываешь компилятору создать деструктор, но он бы его и так создал, так что это пустая команда
Ишак ты ебаный. Попробовал бы сам скомпилить раз такой умный. Компилятор установлен по умолчанию удот ты ебаный мамку твою трахал. По настройкам хз.
Братик запиши видео пожалуйста как ты это сделал. Прям с 0 создание проекта и т.п. Когда я создаю проект у меня нет папки includes. Может у меня что то настроено в компиляторе не так хз. Ну или инструкцию в скриншотах сделай.
Не знаю. Реально зашел думал тут помогут, а по факту один токс. Вот школьник пытается учится на каникулах, а вы так..
Я просто установил eclipso, настроил язык. Все. Больше ничего не настраивал. ( ну может пару окон закрыл, а потом вернул).
пока ты тут занимаешься хуйней - уже бы мог писать код как нормальные люди в MSVC
Поставь Qt Creator и не парься. Это самый лучший совет. Там ничего настраивать не надо. Всё работает сразу.
Тем более для 300к/нсек всё равно Qt надо изучать.
Большая часть разработки на С++ там, где гуй не нужен. QT знать лишним само собой не будет.
Я хочу в твой IDE так сделать.
У меня 4 параллельных проектах на плюсах, и на 3х из них юзается Qt (аж в одном случае --- QWidget'ы, а не QML)
У вас заказчики принимают консольные приложения? Меня бы на 3 буквы послали за такую поделку, потому что все хотят нормальное графическое приложение.
тварь что ж ты делаешь...
qt тянет за собой тонны из за кроссплатформенности + он весь в лицензиях. Лучше использовать mfc.
Лучше веб-параша на говнореакте, чем ебучий mfc.
Студия платная и с анальной регистрацией, чтобы микрософтам было легче воровать твой код. Плюс ещё ограничения на коммерческие продукты.
Шизоиды боятся, что их хеллоу ворлд своруют.
Спойлер алерт - студия бесплатная, регается на любую говнопочту с мейлру. Ограничения на коммерческие продукты есть только у тебя больше 5 разрабов или оборот больше ляма баксов в год. И ТО - эти все ограничения снимаются покупкой лицензии.
Если ты будешь зарабатывать миллион долларов - то ты поймешь, что продуктивность разработчиков стоит цены студии.
>на любую говнопочту
Тут ты сильно ошибаешься. Я регистрировался ещё в 2009 и пришлось писать в тех. поддержку, чтобы добавили мою почту (mail.ru). Благо тех. поддержка за сутки ответила и помогла с проблемой.
Возможно сейчас с этим проще.
{
std::string str;
str.~string();
}
---------------------------------
error C2300: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>': class does not have a destructor called '~string'
вспомнил, что string - это basic_string<char>:
{
std::string str;
str.~basic_string();
}
---------------------------------
OK
НО
{
using std::string;
std::string str;
str.~string();
}
---------------------------------
Тоже ОК
Откуда этот ~string() вместо ~basic_string() берется?
Он вообще есть или нету его? поиск в заголовках по "~" находит только ~basic_string()
{
std::string str;
str.~string();
}
---------------------------------
error C2300: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>': class does not have a destructor called '~string'
вспомнил, что string - это basic_string<char>:
{
std::string str;
str.~basic_string();
}
---------------------------------
OK
НО
{
using std::string;
std::string str;
str.~string();
}
---------------------------------
Тоже ОК
Откуда этот ~string() вместо ~basic_string() берется?
Он вообще есть или нету его? поиск в заголовках по "~" находит только ~basic_string()
понел
Пчел, ты откровенно стебешь сейчас, в виме нет вообще нихуя, кроме подсветки синтаксиса по словам (вне контекста). После того, как ты сверху наворотишь стопицот плагинов - ты получишь некую уебищную карикатуру на IDE по функционалу, только вот все равно там не будет ни интегрированной системы сборки, ни нормального GUI к дебаггеру.
>>53550
Я начал изучать С++ где-то в 2013 году, скачал коммунити 2013 студию, без проблем зарегал ее на свою говнопочту на мейлру.
>без проблем зарегал ее на свою говнопочту на мейлру
А у меня через некоторое время начала просить перелогиниться. А в логин без телефона не зайти.
В принципе эту шляпу можно было игнорить. Но после длительного перерыва прям наотрез отказалась меня пускать и все тут. Пришлось им слить номер телефона.
я на 10 минутную почту регаю, а потом, когда попросит, делаю новый акк с 10 минутной почтой
Консоль - это часть ОС.
Пердолься с апи своей ОС или ставь ncurses/pdcurses, которые пердолят апи твоей ОС за тебя.
Я так пробывал, но второй логин микрософты у меня сразу же забраковали.
Для студии плагин действительно убогий был (впрочем, как и все плагины для студии).
А Nsight это не плагин, а целая IDE.
Так ведь делают как-то подобные вещи и у них вообще ничего не лагает. Это что за такой пердоль? ncurses ?
>Та нет такого
Тебя нет на твоём пике с менеджерами.
>Значит посредник долбаеб
Что допустил прямое общение работяг с заказчиком, да. Для этого и делается боттлнек из пма и пары доверенных ему лиц.
Пп 1-8 указывают, что у вас там полный бардак с организацией. Ты говоришь, что у тебя проекты к отделам не привязаны => в твоём отделе N проектов и ты во всех кодишь, тушишь N жоп и обслуживаешь N заказчиков сразу? И несёшь перед ними ответственность за лиц из других отделов, которые на тебя хуй клали? Ахахах блядь, ебать ты лошара.
Полный цикл это сами придумали, сами разработали и сами продали. Естественно что не всё на 100% сами, но на галерах полностью отсутствует "придумали" и "продали".
По идее можно менять цвет и частоту мигания курсора (как минимум через настройки консоли).
>через настройки консоли
Ну вот то-то и оно. Это уже фактически на стороне ОС делается.
cin/cout ничего не знают про настройки консоли (читай всех существующих консолей, где c++ запускаетя). Да и кому оно надо, чтобы банальный <iostream> еще за собой подтягивал йобу уровня windows.h ?
лол, как по твоему cin\cout взаимодействуют с консолью? Через платформенное апи, как раз через тот самый windows.h
>как по твоему cin\cout взаимодействуют с консолью?
Через минимальный набор системных вызовов наверное.
А где эти системные вызовы находятся?
В виндовых длльках, которые линкуются к твоему проекту, а декларации функций - в виндовых хедерах
>Ты говоришь, что у тебя проекты к отделам не привязаны => в твоём отделе N проектов и ты во всех кодишь, тушишь N жоп и обслуживаешь N заказчиков сразу?
Ты еблан? У меня не проекты, у меня люди
>И несёшь перед ними ответственность за лиц из других отделов, которые на тебя хуй клали
Ебать, ты далбаеб, тебе говорят - отвечает ПМ, а ты опять витаешь в своих фантазиях
>Полный цикл это сами придумали, сами разработали и сами продали
Это называется "продуктовая галера". Ебать ты нифтеме вапще, ору с тебя
Стандартная библиотека тоже немало занимает, и похуй компилятору, что ты не юзаешь её целиком.
>У меня не проекты, у меня люди
>8. Педалить блядь код
>отвечает ПМ
>5. Остужать горящие пердаки заказчиков, когда кто-то из подчиненных обосрался
>"продуктовая галера"
Галеры иногда пишут свои проекты, но это обычно касается управления собственными ресурсами и персоналом. Проекты на продажу совсем редкость.
Как можно организовать чтобы он всю ее не засовывал туда?
Динамически пробовал линковать - программа вылетает при запуске, но даже если обновлю нужные длл то размер хеллоуворлда неприемлим - 21 Кб
На галерах есть мутная позиция типа deliveri director. Этот товарищ занимается конкретно людьми и заказчиками (но не кодит, не собеседует, не менторствует и т.д.). Ты же скорее тимлид, на которого накинули непрофильных задач и назвали "руководителем", чтобы ты не догадался, что тебя поимели за дёшево.
Если нужно чтоб совсем мало, то отсекай использование std. Используй сишное наследие типа printf().
Ну и флаг оптимизации побольше постав.
Не знаю, но такой же код на чистом C точно будет меньше.
Потыкал чутка. Под студией получилось 9кб. Думаю, что можно до 2-3 довести.
Ты необьективен. Я обучаюсь. Новые ошибки взамен старых это прогресс :) Маня как же у тебя рвется от того что другие прогрессируют:) Завистливая тупая токсичная сука.
:) :) :) :) :) :)
Я прочитал и все равно не понял. Зачем ты в треде сидишь если тебя так разрывает от безобидных вопросов новичка-школьника? Человек сидит старается, не в минекрафт играет, а ты....
Так ты советы не слушаешь, ты траллируешь тут своей тупостью. Иди лучше в майнкрафт поиграй, в фортнайт там, что сейчас модно у дегенератов
Я слушаю советы. Ты скинул ссылку - я прочитал и не понял что делать. Если ты не способен отвечать на вопросы новичков смысл сидеть в треде?
>не понял что делать
Тебе миллион раз сказали в треде - поставить вижуал студию, где всех ебанутых проблем, что ты пытаешься сейчас тут решить - просто нету.
Все нормально с кодом, проблема с компиляцией. Сноси к хуям еклипс и качай гецеце
Проиграл с комментариев, что-то уровня:
int main() //заголовок функции
{ // открывающая скобка
} // закрывающая скобка
Блять, че-то вспомнил как с десяток тредов назад один полуёбок создал проект на С++/CLI вместо нативного. И два дня шумно бугуртил на компилятор, студию и всё вокруг, требуя всё более подробных инструкций..
Хорошо.
У меня не в этом проблема. Полупокер как раз таки ты если не можешь помочь с такой простой задачей.
В том что ты умственно отсталый кретин.
Попробуй дизассемблировать программы которые используют Qt и смотри как они работают. Там очень много завязано на системе виджетов и событий
Охуительный совет, я в голосину просто
У меня всегда такие ощущения, когда я тыкаю какую-нибудь незнакомую либу или тулзу. Куча зависящих друг от друга понятий, кажущаяся важной хуйня не поясняется, а затем резко понимаешь и начинаешь юзать.
>дизассемблировать программы
Чел... ты это... какой-то вариант для слабаков предлагаешь.
Имхо гораздо лучше написать свою версию Qt с нуля, тогда точно будет понятно как с ней работать
>ну тип эта штука делает то-то, а ещё у нас в библиотеке есть такие штуки... кек пук...
Краткое содержание 95% книг по тулкитам.
Проще читать доки и пилить какие-то свои штуки, чтобы разобраться.
Когда я читал "Программирование для Win95" Ч. Петзолда, то сложно было только в начале принять событийный механизм программирования в WinAPI, а потом всё пошло как по маслу.
В Qt же надобавляли всяких расширений языка, свой препроцессор, свой язык разметки, но толком не объясняют как этим всем пользоваться. Примеров очень мало.
Просто скопируй текущий ОП-пост, увеличь номер на 1, исправь ссылку на прошлый тред ("(OP)" удали), с тегом не проебись, на пикчу поставь аниме-девочку на тему C++. Остальное похуй.
Ну ты нашел кому создание треда поручить...
Именно.
Адекваты проходят в ассемблер-тред, остальным сочуствую
Код скомпилился, но не запускается. Как решить?
Что за событийный механизм? Опиши
>Есть продуктовые галеры, ау
Какие есть примеры на просторах СНГ?
>устройте соревнование за проект между отделами блядь
У вас там отдел Java соревнуется за проекты с отделом С++?
>Тимлид - это позиция на проекте, а не в отделе.
Это звено общей иерархии руководителей (типа сержанта в армии). И ты выполняешь функции этого звена, потому что:
>8. Педалить блядь код
Ты ж его не в отдел пилишь.
>4. помощь с проектом, менторство
>3. Проводить собесы гребцов в команду
В проектную команду (не на бенч же).
Общий посыл в том, что ты выполняешь роли кодера, пм, тимлида, delivery directora и ещё хуй пойми кого (да, некоторые роли могут пересекаться, но не в таком количестве).
Как я писал ранее, на галере ты лишь формально кто-то ("программист c++", "руководитель отдела с++"), по факту ты постоянно переобуваешься между ролями и компетенциями. Из-за этого на галерах довольно говёно в плане организации рабочих процессов.
Маловато будет
я все знаю, откуда это, хочу работу сменить
Вы видите копию треда, сохраненную 5 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.