Это копия, сохраненная 15 января 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2451830 (OP)
Тогда похуй, пусть тонет.
> Нихуя не понятно по коду, где объект, а где ссылка на него
Дерефененсинг никак тебе в этом не помогает, ты можешь это узнать только из типа
но и тебе и не нужно знать, когда ты обращаешься к объекту, находится он под ссылкой, или под указателем
> где копирование объекта, а где копирование указателя.
Опять таки никак тебе он тут не поможет и плюсы это живой пример этого
> Нельзя одновременно отстаивать идею написания читабельного кода и автодереференсинг в языке.
Тем временем
Читаемые языки: все имеют автодереференсинг и явное копирование
плюсы сюда не входят, в си хоть явно понятно когда ты что копируешь
Модер пофиксил.
Лол, я по превьюхе подумал, что у неё бейджик участника конференции.
Иди работай, незнайка хуев. Применение языка настолько обширно, что будучи сенькой, ты можешь быть слит ещё на этапе подачи резыме.
Пхи, пхи, мы сейчас ищем узкого специалиста, а у вас не так узко как нам надо.
>$2.5к на ноде в стажёрские/джуновские пару сотен
Чел, 2.5$ это 150к (мидл +/-), а где нода сейчас нужна, так никто и не вспомнит.
>нестжс
Чем глубже кроличья нора, тем сложнее из неё выбраться. Ты бы хотя бы во фронт переобулся (я не про хохлов, хотя вон Путин 195к (~3200$) всем мобилизованным обещал).
Я тебе ответил - иди работай. Сам недавно собесился - в одной конторе сделали оффер в день собеса на около 4к, в другой прислали пхи, пхи сразу после просмотра резюме.
Учить ты можешь всё что угодно и не добиться ничего. Большинство вакансий сейчас это c++14 и qt. Чтобы апнуть 4к и более нужно вовсе не с++ знать.
Если этот твой ГнездоJS для бэка, тогда дрочи многопоток, асинхронность и корутины, чтобы ты сам мог написать похожий фреймворк на c++ (очевидно под Linux и чтоб в докере деплоился). Не прыгай из угла в угол - накапливай экспертизу в уже известной тебе сфере.
Если ты секретутка, точишь ноготки в ворде, тогда дрочи COM/OLE, чтобы ты сам смог написать подобный мсофис на С++ (очевидно под Linux и чтоб в докере деплоился). Не прыгай из угла в угол - накапливай экспертизу в уже известной тебе сфере.
Лучшие девочки двача выбирают #Дотнеткоре (VSCode и Docker).
>в прогерство с сишки начинал вкатываться
А вот эти вот все попёрдывая кряхтят про OLE/COM/ATL/WTL , GUID, CLSID, IUknown, CoClass, marshalling и regsvr32 huita.dll.
Хоспаде, какое же говнищще это было. Даже хуже, чем нода.
>Учить Qt? Многопоток? Шаблоны?
Ну да. А еще boost и библиотеке в сфере, в которой ты будешь специализироваться.
Создаю новый обьект класса путём = присваивания. В классе динамически выделяется память new, ну я как в школе учат в диструктор ебанул delete.
Теперь после присваивания одного обьекта другому выскакивает ошибка рантайма double free(). Ну я так понял, что диструктор два раза вызывается.
Как исправить?
>зло
Нет, обычная операция.
>насколько сильный оверхед
Нулевой. Это проверка времени компиляции, а не рантайма.
Ебало мое представили?
Скорейшей смерти твоему коту и твоей шлюхе-мамаше.
Я давно заметил, что всякой научной хуйнёй с программированием занимаются в основном те, кто больше математики, чем программисты. Они сначала пишут на бумажке математическое решение, а потом переводят его в лютый говнокод, выглядящий как лаба первокурсника с проёбанным форматированием, копипастой, однобуквенными переменными и без комментов, но в масштабе. У датасаентистов та же болезнь.
Кажется сам нашел в чем проблема.
Вопрос только появился один.
Я же правильно понимаю, что компилятор может пропустить мой конструктор присваивания(решит что хуйня он не оптимальная)
и запустить конструктор копирования ?
Блять он снова сейчас засрёт все доски....
Чем меньше ему донатят - тем чаще он срёт. В последнее время срёт не переставая, видать анон поумнел.
Ты нахуя кота на авито продаешь? Когда он уже умрет?
Что за книга?
Вот у меня есть шаблон функций
И его специализации под разные типы (нужно так как в зависимости от типа там разное поведение)
А как-то можно узнать специализиованный тип чтобы его не писать внутри функции?
То есть сейчас я там внутри пишу Test1 t. Но это дублирование, ведь я же указал этот тип в Foo<Test1>. Короче, из-за этого ошибки, когда я после копипаста тела забывают поменять тип
Хотелось бы как-то так:
T t1;
Пока что спасся через using
using Test1 T;
Чтобы внутри тела не писать сто раз этот тип, но есть какое-то другое решение?
int y(int &) { return 1; }
int y(int &&) { return 2; }
template <class T> int f(T &&x) { return y(x); }
int i = 10;
std::cout << f(i) << f(20);
На выходе получаю 11, чому шаблон итерпретирует вызов f(20) как вызов метода с аргументом lvalue ссылки?
>и напаяли столько физической памяти
Байка. Столько памяти на ядерных ракетах не будет, там древние технологии.
Потому что после того как ты попал в f, T &&x - уже становится l_value
Чтобы оно стало r_value ты должен его смувать снова, то есть
template <class T> int f(T &&x) { return y(std::move(x)); } // выводит 22
Но так как у тебя T &&x - universal referense, чтобы мувалось только r_value тебе надо использовать std::forward()
template <class T> int f(T &&x) { return y(std::forward<T>(x)); } // выводит 12
Привет, погромисты.
Есть один опенсорс на c++ и qt. Хочу добавить в него свой функционал (типа эдит-бокса в котором пишут +тег и -тег, вместо тыканья в чек-боксы, как реализовано сейчас).
Я не программист, но и не совсем нуб. Начал читать Липпмана введение С++. Каковы мои шансы? Куда копать, чтоб реализовать эту штуку?
Пробуй сначала собрать проект. Если не получится, шансов ноль.
Понял, спасибо!
Вот пример с двумя тредами.
В 14 строке поток1 оповещает поток2 и происходит разблокировка мьютекса.
Затем в 19 строчке мьютекс лочится в потоке2.
И в wait происходит проверка на "случайное пробуждение".
И если лямбда вернёт false, то мьютекс разлочится, поток снова уснёт.
Если true, мьютекс залочится (точнее, по идее, состояние мьютекса меняться не будет, он ведь был залочен до wait) и идёт дальнейшее выполнение с выводов в консоль.
Если бы в данном примере было 3 потока, то при notify_one выполнился бы какой-то случайный из них (2 или 3)?
А если notify_all, то как? Последовательно 2, а потом 3?
Вообще не очень понятно зачем тут cv, одного мьютекса бы просто хватило?
Скорее всего из-за совместимости с сисечкой.
Как корутину из C++20 разместить на стеке без new?
Есть ли литература по современной чистой няшной сишке стандарта C17? Или, после появления плюсов, C == C89?
Туда 5 фич добавили, зачем тебе отдельная книга по C17? Такую впрочем можно нагуглить "C23 draft"
>то при notify_one выполнился бы какой-то случайный
да, хотя ос может делать мультикасты и пробуждать сразу несколько (для этого и нужна проверка).
>при notify_all
Выполнятся все. Порядок случайный и зависит от того, в какой последовательности они получат общий mutex m (хотя могут и на разных мьютексах сидеть, тогда вообще параллельно).
>зачем тут cv, одного мьютекса бы просто хватило?
Если убрать cv, то нужен цикл, который постоянно крутится и захватывает mutex + проверяет codition - это кушает процессорное время. А так он спит и ничего не кушает.
>Если убрать cv, то нужен цикл, который постоянно крутится и захватывает mutex + проверяет codition - это кушает процессорное время. А так он спит и ничего не кушает.
А разве это не похоже на такую ситуацию: один поток записал данные в структуру данных, а второй хочет прочитать?
И там и там для защиты используется мьютекс.
Ну так читающий поток может запросить данные ещё до того как пишущий вообще запустился. Данных нет и неизвестно когда будут. Что ему делать? Держать mutex он не может, иначе записать нельзя, продолжать работу без данных тоже не может. Только крутиться в цикле и ждать данные? периодически хватая mutex.
Ну теперь вроде стало понятнее, ключевое тут это некое условие в wait.
А как это работает если внутри wait будет false, то дальше исполнение кода не пойдёт? Т.е в том примере выше на 20 строке поток прервётся и будет выполняться другой?
Когда поток получает сигнал от ОС о пробуждении он сначала захватывает mutex, потом под ним проверяет условие. Если true, то выполняется код после wait (потом нужно mutex разлочить руками m.unlock()). Если false, то код после не выполняется, mutex отпускается и поток засыпает до следующего сигнала от ОС. С новым сигналом всё повторяется заново.
Ну то есть это бесконечное ожидание в точке wait до тех пор, пока условие не true.
Спасибо, анон
Вот в этом примере вывод был такой:
Waiting...
Notifying falsely...
Notifying true change...
...finished waiting; i == 1
Я сначала подумал из-за того тред2 спит 200мс, то выполнился тред1, но после notify_one в 25 строчке он не вызвался снова.
Т.е. не было "Waiting..." ещё раз.
Какая тут могла быть логика исполнения?
Первый поток запускается, пишет "Waiting...", потом ждёт в cv.wait(), затем выполняет оставшийся код (пишет "finished waiting") и завершается. В 15 строчку он уже в принципе не может вернуться.
>затем выполняет оставшийся код (пишет "finished waiting") и завершается.
Как? Если в этот момент i равен нулю
В 29 строчке стоит i = 1, а в 34 notify_one(). После выполнения 34 поток 1 получает сигнал к пробуждению. Он видит, что i == 1 и выполняет оставшиеся строки.
А в 25 было фейковое пробуждение. Почему после него не было ничего сделано в потоке1?
А что он должен делать, если данные не готовы (условие готовности лямбда == false)?
Поток 1
- проснулся
- захватил mutex
- выполнил лямбду
- заснул
Запустился поток1
Чекнул wait, условие не выполнилось, заснул.
Поток2 сделал notify_one
Поток1 чекнул wait, условие не выполнилось, заснул.
Дальше продолжился выполняться поток2
Там снова notify
Поток1 чекнул wait, условие выполнилось, выполняет код дальше.
Не так?
>Поток2 сделал notify_one
>>Notifying falsely...
Меня этот момент и интересует.
Почему после первого notify ничего не произошло?
>то ничего не делай и жди дальше.
Но там до wait, вывод в консоль.
Notify два раза, а Waiting... только один
Каждый раз, когда во 2 потоке происходит notify, поток 1 пытается продолжить выполнение с 16 строки и до конца. А "Waiting..." у тебя стоит ранее на 15 строка. Ты хоть 100 раз кинь notify, но в 15 строку не попадёшь. Только один раз при старте потока 1.
Почитай авторов языка, там вроде C99
А есть есть книжка про С11, дейтел вроде
В целом, этого достаточно
Встала задача: как хранить пользовательские настройки?
Например, пользователь может сделать коллекцию текстур для быстрого использования, создать свой набор кистей (размеры, прозрачность, давление и тд).
Сейчас для каждой такой настройки делает класс который наследуется от базового, которые затем хранятся в менеджере.
Когда я меняю/добавляю настройку, то через менеджер получаю ссылку на класс и работаю.
И всё это потом сохраняется в каждый свой жсон файл.
Выглядит это как-то ублюдочно, не хочется городить по куче классов на каждую настройку.
Не трудно заметить что всё это, по сути, ключ-значение. Где значение может быть список строк пути к текстурам, структура флоатов настройки кисти.
В общем, как сделать класс словаря с классным интерфейсом?
Очевидно, что хранить надо в реестре Windows.
Никак.
Сходил, вроде норм прошло. Посмотрим, что ответят
Читай K&R потом C23 draft, он не сложный, с чего ты взял? Ну если и будут проблемы, загугли статьи по какой то фиче.
> Получается при выходе из скоупа вызываются деструкторы всех объектов, созданных в скоупе.
Только объектов, созданных на стеке.
> А сишка получается быстрее, потому что никаких деструкторов не вызывает, а сразу берет из регистра адрес начала стека верхнего скоупа и прыгает туда.
А в сишке ты сначала вызываешь вручную десяток free(), close(), release(), finalize(), destroy() и получаешь ровно те же тормоза. Забыл что-то вызвать - получаешь утечку ресурсов.
Ну вот на стеке создается объект, и не важно есть в нем указатели на внешнюю память или нет, в любом случае будет вызван деструктор, или компилятор все это оптимизирует?
Оптимизация тут не при чём. Гарантируется, что если ты создал объект в стеке текущего скоупа, то при уничтожении скоупа будет вызван деструктор и память освободится. Если у тебя объектом является сам указатель, то он будет уничтожен, а данные, на которые он указывает, так и останутся, если у тебя не unique_ptr или другой умный указатель (а они уничтожают объекты логикой в своих деструкторах).
Аноны, как подключить сторонюю библиотеку к моему проекту?
Вот я скачал архив, распаковал его, закинул в папку с моим helloworld.cpp. Написал #include <huipizda.h>, а оно всё равно не билдится почему то.
> Написал #include <huipizda.h>
Это не достаточно, надо указать компилятору в include path пусть к папке с хедерами, в в library path - путь к папке с DLL-ками.
Как-то очень расплывчато.
Допустим можно отсортировать массив и получить в нём последовательности повторяющихся элементов (запомнив их старые позиции). Таким образом мы получили повторы из 1 элемента. Далее смотрим каждую такую группу в отдельности - сортируем её по элементу из позиции, следующей за исходным - получаем повторы по 2. И так далее редуцируем группы, добавляя по 1 элементу в хвост.
Я могу и сам написать алгоритм, но это же время на отладку. Вопрос есть ли он в стандартных либах или бусте где то.
Есть.
Че? Нахер мне вакансии, Я всегда для себя программирую.
Естественно нет, потому что бизьнесу нужно унылое говно вроде однотипных сикуэл запросов и красивых формочек ввода.
Это не полностью избавит проект от буста, но немного уменьшит его в коде.
Это как-то может положительно сказаться, например, на сборке проекта?
А ты интересовался, по каким причинам в проекте используют буст? Там тоже не дураки сидят и вполне могли решить, что в бусте определённые алгоритмы реализованы эффективнее, чем в стандартной библиотеке. Да на сборке проекта скажется положительно, но легко может сказаться отрицательно на функциональности.
Там несколько классов из 17 стандарта используется.
Разработка идёт под шиндой, видимо, когда их добавили студия не поддерживала полностью 17 стандарт либо разработчик работал на старой версии.
Ты чо совсем ебнутый?
Работает - не трогай!
Толсто, писать на джаве сейчас это как писать на c++ 98
Если с системой сборки ещё можно играться (новые заголовки добавляем не часто) То вот с удобный отладчик необходим.
>Вопрос - на что?
nvim/emacs + gcc/clang + cmake/mason + gdb/lldb
>То вот с удобный отладчик необходим.
GDB
https://www.youtube.com/watch?v=kZCPURMH744
Под вторым иногда подразумевают Managed C++ или COM. Будем надеяться на лучшее.
>какие вещи можно поделать на плюсах на маке для ознакомления и тренировки?
Такие же как и на других ЯП? Здесь ты ограничен только фантазией и своими ресурсами.
qt creator + cmake
ну типа фронт пилить на плюсах - идиотизм (мб разве только пробовать свой движок браузера написать, но это наверное слишком сильный размах)
мобилки тоже лесом
стандартный бек с крудами тоже мимо
я хотел мб на анриале попробовать пописать, но на обычном м1 производительность компилируемых демок страдает + по отзывам анриал и юнити (хотя это уже шарп) не оч кайфово идут под силиконом
вот и встал вопрос - а что остается. Я подозреваю есть два пути - либо делать десктопное ПО вместо свифта использовать плюсы,
либо как писал выше пробовать в свои реализации движков и типа такого
поэтому и спросил какие есть варианты, поправьте если где-то проебался
Если хотел с анрилом побаловаться, то попробуй написать 3д игру на своем движке.
Vs code.
>фронт пилить на плюсах - идиотизм
Сейчас как легко для такого, есть emscripten, есть wasm, для бэкенда тоже пишут CMSки, форумы.
Проект старый, ему уже 10+ лет точно
Я внезапно столкнулся с тем, что для unordered_set в библиотеке нет простейших операций типа пересечения и объединения, а для set они выглядят пиздец уродливо. Я сам питонист. Так вот, я чувствую, что не понимаю идеи, которая за всем этим стоит, с пониманием которой все эти контейнеры-итераторы станут сразу простыми и очевидными, и можно будет не лазить на cppreference.
Тут дело в уебанском названии. unordered_xxx это не xxx. uordered_xxx контейнеры это хэш таблицы hash_xxx.
Set или map внутри это бинарные сбалансированные деревья поиска (поиск, вставка элемента делается за O(logN))
https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0
Unordered_set это хэш таблица (поиск, вставка элемента делается за константу O(1)).
https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0
>я хотел мб на анриале попробовать пописать
Не советую, там очень больно с плюсами работать к тому же там свой мирок, где все делается не так как вне анрила.
Юник поинтеры медленнее только при создании и удалении.
>А нах вообще нужны умные указатели?
Чтобы автоматизировать мемори менеджмент.
>Это медленная хуйня
Смотря какие.
>покажите мне где без них не обойтись
В многопоточке, например.
Ну вот допустим есть класс, в котором есть обычный указатель.
Я выделяю new в конструкторе и удаляю delete в деструкторе. В чем сука смысл? Компилятор сам определяет где вставить вызов деструктора, а иначе бы приходилось его вручную вызывать.
Потому что если ты делаешь не laba2 в вакууме, то ты этот указатель скорее всего куда-то передаешь, например в другую функцию или класс. А там этот указатель могут сохранить в переменную или поле. И вот ты у себя уже сделал delete, а тот код продолжает обращаться к удаленному месту (use after free) или вообще лезет теперь в память чужого объекта. Если ты пишешь web-браузер, теперь хакеры могут воровать так кредитки и пароли. Ты можешь сказать - ПРОСТО не обращайтесь к уже удаленному. Так вот механизм подсчета ссылок это и есть простейший способ контролировать, а не надеяться что кто-то правильно понял архитектуру.
а все я разобрался. С++ запутанный ужас
А там ведь даже подчеркнуто.
На HTML, CSS и JS.
Так гордишься тем, что установил убунту/арч и теперь нитакой как все? Промолчать же ты не смог.
template< typename T1, typename T2 >
auto foo(T1 a, T2 b)
{
return a + b;
}
Какой будет тип auto, если вызвать foo<int, double>? int или double?
int hui = 1;
std::string huistr = std::to_string(hui);
MessageBoxA(NULL, huistr.c_str(), "HUI", MB_OK);
Микрочел, я вовсе не хотел задеть твои хрупкие пендузятные чувства, чего ты так нагрелся?
Ты наверное вообще сейчас охренеешь когда я тебе скажу что я и виндой дома пользуюсь, и юниксами для мака и на работе. Для каждой задачи - наиболее удобный инструмент. Человек прямоходящий просто сделал замечание, вам, ползающим на спине тараканам, что вообще то нормальные люди этим не занимаются. Как минимум нужно было задуматься: а вдруг он прав? Но да, промолчать ты не смог
>Это я и сам знаю.
Нихуя не знаешь, иначе не высирал бы тупорылые вопросы.
>А кроме как в многопоточке еще где?
Помогаю загуглить: https://stackoverflow.com/questions/48834271/shared-ptr-real-life-use-cases
Это мертвое экспериментальное говно C++/CLI, форк плюсов от M$, который уже не плюсы по факту, но ещё не стал шарпом.
Вопрос: В файле с расширением .h определяется класс, который уже был определён раньше, в других хедерах. Зачем это делается? Теперь , когда я пытаюсь получить ссылочный доступ(->) к функциям экземпляра класса, я получаю в еблет "member access into incomplete type 'blabla' ".
Ты точно ничего не путаешь? Картинки хоть покажи.
> файле с расширением .h определяется класс
Это порочная практика, в .h пишут только объявления, но не определения (если речь не о шаблонном классе).
>который уже был определён раньше, в других хедерах
Когда программа состоит из более, чем одного файла, нет таких понятий как "раньше/позже", есть область видимости (scope).
Компилятор компилировает в ему одному известном порядке. Не стоит делать никаких предположений определен класс в некоторый момент компиляции или пока еще нет.
>member access into incomplete type 'blabla'
incomplete type это когда имя класса (объявление) компилятор видит, а определения нет.
ну
видимо, все, работа на с++ окончательно загнулась в россии
в 90е когда проектировали stl, у богатого игрового пека было 16 мбайт оперативы, но было много компов где оперативы было меньше, windows 95 спокойно работала в системах с 8 мбайт оперативы
А по моему это просто мода и ничего больше.
Несколько лет назад все только и говорили:
не с чего ходить - ходи с бубей вектор;
семь раз отмерь, один вектор;
вектор рубль бережет;
в Тулу со своим вектором не ездят;
и тд и тп.
страуструпу пришлось ввести в язык механизм исключений потому что иначе никак было не вернуть ошибку из конструкторов и перегруженых операторов
отказ от использования исключений в создаваемой библиотеке ведет к некрасивым архитектурным решениям, в частности приходиться использовать подходы двойной инициализации объекта класса, приходиться отказываться от перегрузки операторов заменяя их аналогичными по функционалу функциями-членами
поэтому не стоит быть столь категоричным
да, в некоторых проектах приходиться по некоторым причинам отказываться от исключений, но во многих проектах можно их прекрасно использовать, делая код гораздо лаконичней, компактней и красивей
> двойной инициализации объекта класса
Нормальное решение, ничего некрасивого.
А перегрузка ухудшает читаемость.
Предположим у меня есть переменная
uint16_t size = 65535;
Какого типа будет выражение size + 1 ?
Не вызовет ли проблем выделение памяти таким образом
char* ptr = new char[size + 1]; ?
Я попробовал, вроде памяти выделяется сколько надо и всё работает, но хотелось бы полной ясности.
>
>
>> файле с расширением .h определяется класс
>Это порочная практика, в .h пишут только объявления, но не определения (если речь не о шаблонном классе).
>
>>который уже был определён раньше, в других хедерах
>Когда программа состоит из более, чем одного файла, нет таких понятий как "раньше/позже", есть область видимости (scope).
>Компилятор компилировает в ему одному известном порядке. Не стоит делать никаких предположений определен класс в некоторый момент компиляции или пока еще нет.
https://apc.u-paris.fr/~franco/g4doxy/html/G4LivermorePhotoElectricModel_8hh-source.html
Если int 16 бит, то unsigned, результат 0.
Если 17, то int, результат наибольшее отрицательное или еще что.
Иначе int == 65536.
То есть это зависит от настроек компилятора? и выражение size + 1 имеет тип int?
TL_DR: чтобы пофиксить твою ошибку, в том файле, где выстреливается ошибка, нужно прописать #include с определениями этих классов. Названия заголовков из справочника библиотеки узнаешь.
46-48 строки это предварительное объявление, но не определение.
Объявление делает видимым только имя класса, под ним можно объявлять указатель и/или ссылку на такой класс, все остальное компилятору неизвестно, ни члены класса, ни его размер, только имя. incomplete type вобщем.
>>498803
>Зачем это делается?
forward declaration
Объявление можно писать сколько угодно раз, а определение должно быть только одно.
К примеру, когда два класса должны ссылаться друг на друга, ты не можешь начать сразу с определения одного из классов, потому что не будет видим второй. Чтобы разорвать этот порочный круг, делают предварительное объявление.
Еще бывает, что делают forward declaration вместо включения заголовка с определением просто чтобы пошустрее собиралась программа.
а литерал "1l" минимум 32-битный по стандарту
Я два часа смотрел на return и не видел его
В вакухах требуют буст, значит похуй, надо учит.
И при этом должна быть возможность получить из класса "глубокую" копию этого контейнера методом а-ля get_container().
Как бы это покрасивее провернуть? Хранить голые указатели стрёмно -- надо вручную их удалять когда приходит команда внести изменения в контейнере (удалить элемент). Возвращать в геттере копию контейнера тоже неудобно, надо будет делать копирование каждого элемента контейнера (создание полноценной копии, а не копировать указатель), поскольку приложуха имеет несколько потоков и в них может понадобиться глянуть на содержимое контейнера.
Хранить в контейнере всякие unique_ptr и прикрутить к хранимым объектам специальную функцию копирования и при запросе get_container() тупо через неё всё копировать в возвращаемый контейнер?
> И при этом должна быть возможность получить из класса "глубокую" копию этого контейнера методом а-ля get_container()
> Возвращать в геттере копию контейнера тоже неудобно, надо будет делать копирование каждого элемента контейнера
Может я тебя неправильно понял, но это ведь как раз то, что тебе нужно, нет?
>Может я тебя неправильно понял, но это ведь как раз то, что тебе нужно, нет?
Ну да, только тут мне нужно будет самому запариться и написать соответствующий код.
А может есть какой-нибудь класс, который для поинтеров обеспечивает поведение, аналогичное обычным значениям (т.е. удаление объекта при уничтожении поинтера и автоматическое копирование объекта, на который поинтер указывает при передаче поинтера по значению). Т.е. чтобы при возврате контейнера поинтеров, по факту оно само всё за меня сделало, скопировав не только поинтеры, но и объекты, на которые они указывают.
Не всё так просто, у меня же хранятся разные наследники в виде указателей на базовый класс. Соответственно, надо разруливать, чтобы делалась копия наследника, а не базового класса.
Пока видел вариант сделать что-то типа виртуального метода copy() в базовом классе и его переопределять в наследниках. И при возврате контейнера пройтись по всем элементам и его вызвать.
А тип элемента да, какой-нибудь unique_ptr<Base> ебануть, чтобы он хотя бы сам удалял соответсвующий объект при удалении элемента.
>А может есть какой-нибудь класс, который для поинтеров обеспечивает поведение, аналогичное обычным значениям (т.е. удаление объекта при уничтожении поинтера
Сборщик мусора такой класс называется.
Ну начнём с того как ты собственно хранишь эти унаследованные классы, если ты хочешь из хранить в одном контейнере - значит ты будешь хранить указатели на них, пускай будут умные даже - unique ptr. Собственно хранятся они в единственном экземпляре.
Далее тебе надо сделать deep copy. Здесь тебе грубо говоря надо побитово скопировать всё, на что ссылается содержимое твоего контецнера. Сделать это иначе как созданием отдельного контецнера, и выделения памяти под каждый класс заного так то не возможно (опять же - мы хотим deep copy). Соответственно вся ебля будет в основном с копирующем конструктором и одновременно с выделением памяти в куче. Впрочем пока писал дал ответ.
Крч, в deep_copy код должен делать что-то такое:
- создать вектор с капасити как у текущего
vec<uptr<base> result;
result.reserve(m_elements.size())
- далее в циклe
for const auto& elem: m_elements
result.emplace_back (make_unique<dervA|B|C>(*elem) )
На сколько помню тут не надо мува отдельного, т.к. тут будет r val ref типа объект без имени.
return result
Пишу ночью поэтому кое что могу прокбать. Например не помню сработает ли здесь норми named copy elision или нет. Вроде должно.
Если кто-то знает более красивый способ поделитесь. Но этот самый простой.
Только сейчас допер что у тебя тип то базовый хранится и простой copy ctor не сработает. Тогда наверное да, придётся пилить виртуальный clone который возвращает uptr на копию класса.
result.emplace_back (elm->clone)
Забавно, внезапно паттерн этот пригодился в плюсах.
uptr<base> clone () const {
return make_unique<CurrType> (*this) ;
}
Если юзать rtii то можно в одну общую функцию ебануть.
Вообще тут можно всякого по напридумывать с шаблонами, макросами и метопрограмированием.
Хотя clone самый простой вариант.
....
Прикольно, что где-то хоть с натяжкой в плюсах в теории надо юзать такой паттерн.
Ну а тогда в чем смысл специализации?
Ты можешь сделать так: определённому набору типов соотв. какой-то код, это делается через sfinae или сейчас через concepts ( cpp20)
тебе нужно реализовать полиморфное копирование для иерархии классов, указатели на объекты которого будешь хранить в этом контейнере, если тебе требуется глубокое копирование контейнера
для этого есть различные способы, начиная с примитивного через .clone и кончая различными вариантами фабрик классов
альтернативный вариант - это использовать специализированный контейнер для хранения полиморфных объектов, в бусте есть такие например
>>500027
Эх. Ладно, пока попробую через .clone, а там посмотрим, как оно себя покажет.
>использовать специализированный контейнер для хранения полиморфных объектов, в бусте есть такие например
У меня что сервис, что клиенты на Qt, поэтому стараюсь обходиться по минимуму с точки зрения подключения ещё более других либ.
Clang, он в кют Креатор встроен. Показывает все ерроры и варнинги по мере набора текста, удобно.
Я более специализированные вещи имел ввиду. Например, valgrind, pvs-studio и т.д.
Пошли со мной в дивный жаба мир.
Попытался реализовать простой семафор:
class Routine {
public:
void operator() () {
while (!sem);
sem = 0;
cout << this << ' ';
for (int i = 1; i <= 5; ++i)
cout << i;
cout << '\n';
sem = 1;
}
private:
static volatile int sem;
};
volatile int Routine::sem = 1;
Но получил не то, что ожидал:
>0x56526a446008 12345
>0x56526a4461580x56526a445eb8 123145
>0x56526a4462a8 12345
>2345
Я так понял, проблема возникает как минимум тогда, когда потоки переключаются между
> while (!sem);
и
> sem = 0;
Возникает вопрос, а возможно ли в принципе написать свой собственный примитив синхронизации? Получается, std::mutex и std::thread не независимы друг от друга, и как-то согласуются между собой?
Попытался реализовать простой семафор:
class Routine {
public:
void operator() () {
while (!sem);
sem = 0;
cout << this << ' ';
for (int i = 1; i <= 5; ++i)
cout << i;
cout << '\n';
sem = 1;
}
private:
static volatile int sem;
};
volatile int Routine::sem = 1;
Но получил не то, что ожидал:
>0x56526a446008 12345
>0x56526a4461580x56526a445eb8 123145
>0x56526a4462a8 12345
>2345
Я так понял, проблема возникает как минимум тогда, когда потоки переключаются между
> while (!sem);
и
> sem = 0;
Возникает вопрос, а возможно ли в принципе написать свой собственный примитив синхронизации? Получается, std::mutex и std::thread не независимы друг от друга, и как-то согласуются между собой?
cppcheck, но он туповат
>Возникает вопрос, а возможно ли в принципе написать свой собственный примитив синхронизации?
В принципе, можно.
Но это надо не быть тобой, как минимум
Советы из гугла не работают, нету нужной кнопки.
>>500526
Блять, я в курсе, что делает volatile. Заставляет компилятор избегать оптимизаций, и при каждом обращении реально считывать значение из памяти. В чём проблема с кодом я уже понял. Лучше бы пояснили, как внутри устроен атомик. В моём представлении, внутрь атомика тупо встроен мутекс, который блокирует поток перед тем, как что-то с объектом сделать. Но я не понимаю, как добиваются того, чтобы переключение на другой поток не произошло в момент, пока выполняется lock(). Всё же должно сводится к одной атомарной инструкции, перед и после которой безопасно прерываться другим потоком. И как тогда написать свой мьютекс или свой атомик? Ассемблерные вставки ебошить? Я просто хочу разобраться!
К системе обращаться, чтобы она заблокировала поток.
volatile не спасает от перестановок команд в рантайме, он вообще не про синхронизацию.
>Я просто хочу разобраться!
Читай книжки, смотри видосы.
>внутрь атомика тупо встроен мутекс
Nyet. std::atomic<T> могут быть с мутексом, а могут и без. Зависит от платформы.
>как добиваются
>как тогда написать
Допустим спинлок на std::atomic_flag. Он атомарен всегда и везде, где есть C++ компилятор.
>поток не произошло в момент, пока выполняется lock()
В ассемблере есть префикс lock, гарантирующий что следующая операция будет атомарной. Работает довольно ограниченно, но на вызов lock() хватит. Как и на операции с небольшими данными.
В одном потоке отрисовываешь окно, в другом выполняешь работу. Так работают загрузочные экраны в играх, установщики, архиваторы и т.п. Так или иначе, они либо запускают другой процесс, либо создают новый поток. А ещё, если у процессора несколько ядер, можно ускорить какие-то вычисления.
>если у процессора несколько ядер, можно ускорить какие-то вычисления
Дурацкая фраза-клише. Какие еще вычисления, нет никаких вычислений.
Вот есть хорошая программа irfanview, там пакетная обработка изображений. Всё заебись. но медленно, пердолит одно ядро по одной картинке по порядку. А у меня 16 потоков, мог бы ускорить, но хуй тебе, а не ускорение. Вот какова реальность. Пиздеть теоретически все горазды, а на практике всем насрать, пишут как удобнее, а мультипоток это жопная боль, никто не хочет ним ебаться.
То есть тебе попалась одна конкретная программа, написанная долбоёбами, и ты теперь думаешь, что браузеры, IDE и игры тоже не используют многопоток?
Сыгл епту бля, нахуй мы ваще тут сидим какую то хуйню дрочим, лучше пойти машку пошпехать гыгыгы
>Дурацкая фраза-клише. Какие еще вычисления, нет никаких вычислений.
> пишут как удобнее, а мультипоток это жопная боль, никто не хочет ним ебаться.
И нахуя ты сам себе противоречишь?
Гои воистину ГОИ пиздец
А можно узнать, что принципиально нового появилось в вычислительной технике с 70-х годов, кроме увеличения "мощности"? Предлагаешь на ЖС писать?
Современные кресты к тому 40-летнему говну мамонта никакого отношения не имеют. Куколды, которые пилили то говно, пусть на нём и пишут под свою систему, если из этих пенсионеров хоть кто-то ещё жив.
Язык для написания бесконечного ряда факториалов.не подтолкнёт индустрию, он её остановит.
Лучше на лиспе тогда. Да и под капотом все та же лапша работает на которую ты жалуешься, а аппаратно функциональщина не выполняется пока что.
>принципиально нового появилось в вычислительной технике с 70-х годов
Дед, ты выпил там? Суббота, понимаю (нет)
>Предлагаешь на ЖС писать
Тебе ничего не предлагаю нового. Ты гой.
а для израильских братьев лисп и пони тель хай братья! Продолжаем наебывать гоев, они не догадываются
>не ответил на прямой вопрос
>предложил использовать говнолисп из родом из 70х, называя кого-то дедом
Ладно
ТЫ СУКА ГОЙСКАЯ!!!
Медленная память, проц быстрый. ПОнимаешь хуйло? Память у тебя как дискетка длять работает
Алсо, твоя скриптовая хуйня в любом случае не способна выполняться настолько быстро, чтобы упереться в узкое горлышко io. Этим как раз страдают те языки, которые ты критикуешь.
Что значит медленная память? Как скорость обращения к памяти может зависеть от ЯП?
сап. пытаюсь нагуглить решение задачи: надо сделать альтернативное решение для проверки на четность с помощью обычной функции, которая возвращает modulus %2 аргумента типа return input %2 == 0. Я подумал может как-то проверить только последний бит числа и тем самым избавиться от лишних вычислений, но не знаю как это сделать. Если я буду пользоваться методом сдвига битов чтобы сократить число до последнего бита, то проблема в том что я не знаю размер числа и дополнительные проверки займут время. Наткнулся в вики на проверки хеш-суммы, но это похоже не то что нужно.
На чётность влияет только последний бит, как и с десятичнвми чётность определяется тупо последней цифрой. Надо выполнить input & 1
Спасибо. На стаковерфлоу почему-то вариант который занял больше всего голосов утрверждает что в асемблерном коде нет различия между двумя вариантами. Но у стандартного еще и преимущество потому что работает с отрицательными числами.
https://stackoverflow.com/questions/160930/how-do-i-check-if-an-integer-is-even-or-odd
Как же гоям нравится говно жрать...
Получается различия только в -Os и в результате только в количестве использованного места? Это повлияет на быстродействие благодаря уменьшению .exe?
С такими микрооптимизациями, как проверка на чётность, ты не выжмешь и 0.00000001% перформанса.
>В одном потоке отрисовываешь окно, в другом выполняешь работу. Так работают загрузочные экраны в играх, установщики, архиваторы и т.п.
самое распространенное заблуждение последних лет
прекрасно можно и гуи отрисовывать и работу делать в одном потоке
почему что 30 лет подряд разработчики делали прекрасные сложные приложения с гуи интерфейсом, и все это работало в одном потоке
но по видимому теперь это становиться забытой магией древних
Я просто хочу разобраться чем проверка бита лучше чем обычное сравнение с modulus в теории.
да ладно
аж три уровня кешей на одной подложке с cpu, оператива ddr5 c пропускной способностью 32гб/c, современные ssd c безумно быстрым рандомизированным чтением по сравнению с hdd, через интерфейс nvme через шину pcie у последних вариантов контроллер на одной подложке с cpu..
Ничем. Код должен быть понятным.
Когда запускаешь summ от типов без оператора +
Теперь подскажите, как сделать более красивой строчку 10
Хочу просто в конструктор класса передать уже проинициализированный другой класс, который будет храниться в private переменной. После этого требуется дёргать методы переданного класса при необходимости.
Фактически простейшая задача для какой-нибудь java разработки, но на плюсах случился обсёр.
Разрабатываю в PlatformIO + C++11 с Arduino Framework, если это имеет значение.
Диплом он вроде как про что-то новое. Terrain engine уже как 10 лет назад написали. И Speed Tree написали и PhysX с Bullet'ом и ещё всяких движков разных.
Уже бы ничего нового в бакалавриате не осталось давно, еслиб каждый студент что-то новое находил.
Диплом это научно исследовательская работа, у которой должно быть обоснование. И это не обязательно новизна, просто она самое очевидное что может быть.
Ну если у тебя ландшафт нейросеть будет генерить или ты напишешь 3д реконструкцию, то может и сгодится.
Хз, щас мб и пальцем в небо ткну, но 90% дипломов бакалавров – рерайты иностранных работ с сайхаба.
немного мало. нужно ещё-что то. вишенка. Например, визуальное программирование. чтобы туда сюда эксель инфу переделывал. Можно было выделить выброс, и в эксельку экспортировать
Двач, я неудачник 30 лвл эникей.
Я долго понял, что сделал не так.
И сегодня всё понял.
Я понял, что надо было вкатывать в кодинг, но меня пугали люди, пугало бесконечное количество фреймворков, этот спринт технологий и спринт умов, огромное количество 20-летних парней сверх-замотивированных и стремящихся к конкуренции. Да ещё ультра токсиков, мыслящих "ты либо успешный успех, либо отсталый дед"
Я понял, во что надо вкатываться. Надо вкатываться в кресты.
Много лет назад, в универе, был дружбан, для которого кресты были философией. С ним было легко общаться, он не стремился показаться умнее или глупее, чем он есть. Я понял, что это философия. Кресты они здесь и сейчас, они всегда. Это философия.
Как вы оцените, правильно ли вкатываться в кресты, если я мечтаю просто кодить на них, делать нормальную работу, без тимлидства, без жуткого задроства, а поменять сам стиль жизни под кресты? Один раз, и навсегда?
Значит не норм прошло.
>>502215
Не лезь блядь, вкатывайся во что попроще. А если называешь себя неудачником, то будешь неудачником вдвойне, ведь вакансий по плюсам крайне мало.
спасибо, гуру. я отнесусь с ответственностью. жаваскрипт?
думаю, крестовики самые спокойные и взвешенные люди, без троллинга. возможно, я пишу бестактно, прошу прощения.
может, просто кандидата другого нашли
нулевые - десятые путь был такой обычно: эникей - сисадмин - девопс
альтернативный путь - 1с
так же некоторые увлекались железом и уходили в ремонтники - ноуты, мобилки, etc
1) Деб пакеты gtest и googletest ставятся в /usr/src
2) GTEST_ROOT не реагирует ни на одну из этих папок
3) на стековерфлоу пишут, что надо сделать cmake .. либы и make install, но это полная параша блядь, это вообще не правильно нихуя
4) я не понимаю, как быть, если я захочу автотест в докер образе запустить. Вроде бы ставить зависимости дпкг, в том числе хедер-онли, нормальная процедура для автотестов, но такая пидорасня с гтестом как-то всё почему-то усложняет блядь
Как правильно пользоваться этим говном? Почему стало резко сложно так?
Чуть шарю
Короче, норм результат съема картинки с сенсора (или другого высокоскоростного интерфейса, хоть шдми) и передачи по Ethernet (предположим, делаем ипкамеру) достигается только на специализированных DSP (гугли линейки AnalogDevice по категории Видео) или ПЛИСинах (Xilinx Virtex, ZYNQ). Комп сосет, с задачей справится, но лаг будет пиздец (можешь через влц перепаковать трафик из веб-камеры в ш264, лаг будет минута).
Щас в качестве базы часто используются SoCи, где пара мощных арм ядер для фронтенда (сетевой обмен, логика, может всякие либы типа опенцв) и бекенда (тензорные ядра, какие-то матричные ускорители и проч).
Помимо задачи сжатия для передачи по сети, очень интересной является обработка самого изображения с матрицы. Сюда входит и дебайеризация (или как там правильно), и цветокорр, и улучшалки, и все такое. Очень интересная и глубокая тема, очень-очень много чего ещё не открыто. Изучение всей этой темы - матан, с++ даже может и не понадобится при создании системы (если только не использовать Xilinx HLS). Матлаб и питон + матан, учебники и статьи твои друзья, языки программирования всего лишь инструмент.
Видеообработка годная специальность, полезная, глубокая, востребованная. Хочешь начать вкатываться - своруй матлаб и смотри примеры
Пусть есть строка и там цифры (разделенные пробелами и возможно другими символами). Извлечь хочу в вектор.
Понятно что можно циклом пройтись, но может есть что то типо split, чтобы сделать всё одной строкой.
Ну очевидным перебором. У каждой цифры есть код, поэтому проверяешь каждый символ на принадлежность диапазону в таблице аски, писоешь. По любому есть такая библиотека уже.
Cпасибо, анон
я решил перебрать элементы обычным циклом, если встречу более годный способ типо того же сплита, то перепишу
И ещё - идёт ли опыт коммерческой работы с другим языком и стеком хотя бы в какой-нибудь зачёт?
Наличие вышки говорит о том, что кандидат усидчивый, обучаемый и, возможно, помнит курс математики, которая в плюсах нужна чаще, чем в языках для вебмакак. Ну и есть шизанутые госконторы, которые всегда требуют вышку, там часто зарплатные вилки жёстко зависит от уровня образования.
>>502644
Да, он хоть и не будет приравнен к опыту на плюсах, но всё равно зачтётся то, что навык разработки хоть каких-то проектов у тебя есть, т.к. приобретаются умения, не зависящие от языков. Может даже перевесить отсутствие вышки.
анон >>502562
>кандидат усидчивый, обучаемый
Ох ебать, а то что я вычитал несколько книг по плюсам, Кормена, Таненбаума, cppreference, написал 2 не самых примитивных попенсорса да ещё и на литкоде 3 сотни задач нарешал им не показатель?
>этим говном
Да никак. От него пердолей больше, чем пользы. Когда тестов станет много и он начнёт тормозить придётся пердолиться снова.
Забей и переводи проект на интеграционные тесты.
>и передачи по Ethernet
Данные с сенсора даже в гигабитный ethrnet не пролезают. Ты либо его на камере обрабатываешь либо жмёшь в mjpeg/h264/h265 естественно с потерями, что очень не очень.
>сетевой обмен, логика, может всякие либы типа опенцв
это тоже бэк, фронт это web, который на твоей камере крутится
>бекенда (тензорные ядра, какие-то матричные ускорители и проч).
это не бэк, это GPGPU на cuda под opencv, дебаеризацию, цветокоррекцию и свёртки для нейросетей
Ну взять то тебя возьмут, но на предприятии может быть табель о рангах. Например ты не можешь занимать позицию руководителя отдела, если у тебя нет кандидатской (и тем более вышки). Позиции это деньги и по ним двигают вперёд прежде всего тех, у кого есть научный бэкграунд (цитируемость в журналах, выступления на конференциях и так далее).
Это я про НИИ рассказываю.
В итоге ты будешь сидеть на дно зарплате и превозмогать через ебучую бюрократию в должности лаборанта или инженера младшей категории.
просто ВО подтверждается документом, есть чёткий критерий - есть бумажка/нет бумажки. А объективные твои знания ещё проверять надо, экзаменовать тебя что ли. А в ВУЗе уже всё сделали, проэкзаменовали, документ написали и печать поставили
Ваш капитан Очевидность
И тем не менее
>>ноль смысловой нагрузки
Знания без умения ими пользоваться это бесполезный мусор. Цитировать знания без смысла это попугай, принтер копипасты, гуглобот, или попромту слабоумный даун.
Знаний у меня настолько дохуя, что я могу их категоризировать и сжать для потребителя.
Чел спросил в целом, чё куда как смотреть, я его пнул с матлабом в нужную струю, там дальше сам зацепится
>видеообработка годная специальность, полезная, глубокая, востребованная
сучки приближают кибергулаг
nobody cares
Зачем кидаешь исключение, если можно Статик ассертом ошибку в компайл тайме выдать
Плюс, если ты сделал функцию с концептом, то зачем нужна вторая функция возвращающая ошибку
Если у пользователя тип не подходит по концепту, то ему компилятор сам ошибку выдаст
bump вопросу
Щас бы в 40000м году отдельно объявлять указатели.
Два чая.
Только TChar и CHAR.
>Если у пользователя тип не подходит по концепту, то ему компилятор сам ошибку выдаст
Логично, подумал я, но потом вспомнил, что у нас есть рантайм типы - наследники с виртуальными функциями, у которых оператора плюс может не быть.
Айти всё.
Плюсы нигде не нужны.
не правда, плюсы были есть и будут. Всякие веб макаки неосиляторы, конечно, тебе расскажут что они уже все и плюсы не нужны, но ты их не слушай. Правда хуй тебя кто возьмет на проект с плюсами без образования.
Вы все не правы, ядерную боеголовку можно подвесить много куда, на различные ракеты бомбы и прочее, это всего лишь средства доставки.
Спасибо, но чем ебашиться с режексами лучше по старинке. Мне не нравилось, что приходится гонять типы данных из char в строку, из строки в int и дальше, а так в плане производительности обычный цикл вполне не плох.
Так мотивации совершенно разные.
Code complete тебя заставляют выдрачивать, чтобы проект мог жить десятки лет. Барен хочет иметь возможность в любой момент выставить тебя на мороз и заменить на более удобную макаку, чтобы она оперативненько могла вкатиться в проект.
Ученого же чаще всего интересует решение относительно небольшой задачки здесь и сейчас: получить численное решение, проверить гипотезу, нарисовать график и т. д.
>У датасаентистов та же болезнь.
В геймдеве еще гораздо толерантнее относятся к культуре программирования.
>лучше по старинке
Зачем тебе тогда вообще string и vector?
В 2022 циклы в подобных задачах нужны разве что в качестве упражнения на циклы, и только.
И упражнения с циклами не избавят тебя от необходимости знать стандартную библиотеку. Уж лучше с ней поупражняйся.
>с режексами
Есть еще всякие copy_if(), transform(), лямбды...
>Мне не нравилось, что приходится гонять типы данных из char в строку, из строки в int и дальше
Вот тут тебя интуиция не обманывает: в канонах строго типизированного языка это лютый говнокод - кастовать типы по первой прихоти.
>в плане производительности обычный цикл вполне не плох.
Кусок памяти копируется сильно быстрее, чем тот же кусок копировать по отдельным байтам. Твоя "оптимизация" кроме того, что скорее всего избыточна, еще и наивна.
Куда полезнее было бы обобщить решение до возможности работы с потоками, например, а не прибивать гвоздями типы string и vector<int>.
>Зачем тебе тогда вообще string и vector?
>vector
Хранить int-ы.
>string
Строка даётся на вход, помимо самих int-ов в ней ещё всякие полезные символы, которые нужно учитывать.
> знать стандартную библиотеку
Не знаю, поэтому и спросил тут как в C++ подобное делается. В том же питоне можно сплитами всё легко поделить, например.
На всяких форумах люди советуют херачить циклами. Может я не там смотрю.
Ещё в моём случае возникает проблема - пусть мы нашли какое то число в строке. Можно его сразу же сконвертировать в int. Но мы не знаем сколько в нём цифр, поэтому вполне может оказаться что следующий символ тоже числовой. Я в этом случае использую "буфер", т.е строку в которую добавляю цифры пока не окажется что следующий символ уже не число. Дальше этот буфер конвертируется в int и добавляется в вектор.
Логика Страуструпа проста: "Если я сделаю стрток, то многие скажуть, что это неправильный стрток. Лучше пусть сами себе делают стрток.".
Планирую вкатиться в программирование в общем-то для личных целей - самому писать простенькие игры, текстовые новеллки, пилить картинки для них и т.д. Планирую выучить С++ как самый оптимальный для этих целей. Отсюда вопрос первый: его вообще потянет человек, никогда программированием не занимавшийся? Я вполне сообразительный, но боюсь даже не столько сложности языка, сколько сложности организации обучения сложному языку, ибо для меня это безбрежное чёрное море. С каким-нибудь питоном легче, я думаю, там и в учебных материалах особо не заплутаешь, и их меньше. хуйню говорю?
Ну и второй вопрос. Чисто теоретически: стажёра с++ могут хоть под шконку с ведром мочи, да взять на работу? Знаю, знаю, что сейчас тысяча человек на место, и даже скилловые ребята сидят без дела, времена прошли и т.д. Просто хотелось бы знать, что хоть гипотетически есть призрачные шансы обратить личное занятие в работку, иметь подушку безопасности, так сказать. Но, наверное, нихуя? Скорее всего, вкатиться без опыта могут только какие-нибудь джаверы.
>однобуквенными переменными
Да как вы заебали. В подобных вещах переменная должна выглядеть так же, как она написана в научной статье/учебнике, на основе которого написан кусок кода
например, какая-нибудь ненастоящая простая формула типа
a[j] = b × alpha × T + c[k] × g × dT
или
zalupaMatrix[rowIndex][columnIndex] = huitaVector[rowIndex] × koeficcientHuiti × temperature + huiEgoZnaetMatrix[rowIndex][zIndex] × chotEtoZaKoeeficient × raznizaTemperatur
Вторая хуйня нечитаемая совершенно
Я не про формулы, а про вообще весь код. Строки однобуквенные, массивы однобуквенные, названия всех функций, классов и методов однобуквенные, иногда даже инклуды однобуквенные. Дай им волю, и они будут переопределять кейворды через #define, чтобы сократить return до y. Переменные объявляются в алфавитном порядке, когда алфавит заканчивается, начинаются цифры: int a6 = q11. С формулами любому дауну понятно, их даже в громоздкой жабе пишут с общепринятыми научными обозначениями.
std::stringstream - библиотечный класс. Функционирует так же, как другие потоки cin, cout, файловые потоки. Только stringstream создает строковый буфер в памяти. Пишет/читает не в консоль, не в файл, а в строчку в памяти.
temp // это строка
stringstream(temp) //это фактически вызов конструктора класса std::stringstream с аргументом temp
В результате создается безымянный объект типа std::stringstream , инициализированный содержимым строки temp. Безымянные объекты долго не живут, если тебе это интересно.
>> found // читает из безымянного потока и пишет в int-переменную found.
if(...) // на самом деле не читает/пишет, как написано выше, а только пытается прочитать и трактовать прочитанное как данные типа int, исходя из того, что found имеет тип int. Если все прошло норм, то возвращается true, если нет, то нет.
Программа, кстати, не отрабатывает случаи вроде "letters12345...". Только цифры, стоящие в начале строки, она считает в found, иначе в if вернет false.
>наследники с виртуальными функциями, у которых оператора плюс может не быть.
Причем тут виртуальные функции? Наследники или инстанцируют шаблон, или являются шаблонными с тем же числом параметров.
Это вопрос зрительного восприятия. Проще читать код, когда метод целиком влезает в экран и когда его строки имеют длину равную ширине книжного листа. То же самое касается именования - "книжный" формат my_method_name воспринимается легче, чем myMethodName (если ты не из дойчей).
Снейккейс вс кэмелкейс, извечный вопрос.
Хотя я так для себя в последнем своем проекте ощутил (спустя долгого перерыва проганья на плюсах), что второй мне милее. Но, подозреваю, что это после поганого pl/sql, где поебат на регистр, что порядком меня доебало и хотелось разнообразия.
Ълядь, в этом поделии корпорации зла можно даже объявить переменную с именем "отака хуйня malятa", что уж говорить о регистре.
Да не трясись ты. скуф. Я потестил и все оказалось как я предполагал. Полиморные типы полностью выводятся только в рантайме - учи матчасть, сука.
Только вот почему-то исключение в случае неблагоприятного исхода отловить не могу. Кто сможет отловить - тому пять баллов.
Ты дибил, шаблоны инстанцируются только в компайл тайме с известными типами
Там бекинсертер в v не полностью влез.
Попробовал этот способ, но он вывел первые 3 int-а. И я хз как учитывать остальные символы, например в зависимости от того есть ли '@' или '' нужно будет думать что делать с int-ми после этих символов (например после собаки следующий int нужно удвоить, показывает что следующие 2 int-а не должны повторяться и если они повторяются то их вообще нужно пропустить).
Спасибо, вот это уже больше похоже на то как надо делать в C++.
То есть stringstream(temp) >> found отправляет char в int, и если в char цифра, то if выдаёт правду, а пустой found по умолчанию ложь? А где они очищают found, чтобы в следующей итерации он опять не выдал правду?
Спасибо, регулярками можно, но я их толком не знаю на таком уровне
> в зависимости от того есть ли '@' или ''символ звёздочка"
>''символ звёздочка" показывает что следующие 2 int-а не должны
> пустой found по умолчанию ложь?
Пустого found быть не может.
stringstream(temp) >> found "преобразовывает" то, что хранит, в значение типа переменной found, затем возвращает ссылку на себя же.
Если преобразовать не получилось, то в объекте сохраняется ошибка.
Потом этот объект методом operator bool() преобразовывается, собственно в bool.
Полученное значение будет false только если в результате того преобразования произошла ошибка.
> А где они очищают found
found нельзя очистить, там всегда будет какое-то число.
Даже когда ты пишешь
int found;
там всё равно есть какое-то значение, его мусором называют.
Можно разве что явно обнулить его, но в данном случае это не нужно, потому что found используется только в той ветке.
>пустой found по умолчанию ложь?
Вся запись целиком { stringstream(temp) >> found } это на самом деле вызов функции operator>>() "наиболее подходящей" среди всех перегрузок. У этой функции есть возвращаемое значение и это значение - ссылка на сам поток. Именно поэтому можно писать цепочки вроде cout >> found >> pound >> bound.
У потоков определено неявное преобразование в тип bool. Таким образом if'ы и узнают о состоянии потока, а не по значению читаемой переменной.
>где они очищают foun
не требуется.
> stringstream(temp) >> found отправляет char в int, и если в char цифра, то if выдаёт правду
Исходя из того, что found имеет тип int, поток извлекает символы из строчки temp, до тех пор, пока не встретит первый не-цифровой символ или конец строки.
Если он считал хотябы одну цифру, в конце он делает неявное преобразование прочитанного в тип int и только тогда пишет в found.
>temp
И да, temp - это не вся твоя исходная строка целиком, а только текущее слово из этой строки.
>в конце он делает неявное преобразование
Точнее, у него-то там под капотом скорее всего прописано явное преобразование.
Просто по тексту программы оно выглядит "неявным".
>>504355
>не требуется.
Тогда как меняются цифры? Например почему выводится
> 1 2 3 4
а не
>1 12 123 1234
?
>Если он считал хотябы одну цифру, в конце он делает неявное преобразование прочитанного в тип int и только тогда пишет в found.
Имею в виду, если в found какой то int записан, куда он девается?
> Имею в виду, если в found какой то int записан, куда он девается?
Никуда, туда просто записывается новое число.
Почитай что-нибудь на тему работы компьютера. Первый том Столярова, например. Или «Код» Чарльза Петцольда
У студии конечно есть сильные стороны, но дизайн в них не входит
Ну проблемы в основном как раз таки в интерфейсе, любителям все под себя настроить не подойдёт, но при этом и новички ахуевают
Туда же прожорливость и постоянные затупы у меня только на последней версии это решилось, и когда на ссд его перенес
Ничто, все говно
Спасибо, анон, вижу ты мне действительно пытался помочь
Я изучаю C++ делая всякие мини-проекты, поэтому возникают такие глупые вопросы
Ой, ошшибка. Eclipse
Не знаю работает это или нет сейчас, можно было халявную лицензию на JetBrains получить на Stepik (на все IDE на три месяца). Решаешь три задачи на написание кода на курсе с сертификатом (это важно), получаешь лицензию. Три месяца проходит, ещё три задачи решаешь (про запас нарешать нельзя)
Стоит ли для этого вкатываться в кресты, или хватит блюпринтов?
Опыт в промышленном погромированнии есть, но на более легких языках го, пистон, джава. Крестов боюсь, но неизвестность манит
Для говна более чем хватит блюпринтов.
>Крестов боюсь, но неизвестность манит
Если хочешь заходить со стороны крестов, то про собственно UE можешь преспокойно полностью забыть на ближайшие год-два.
Это не то. Хочу тру попенсур без акков и всей это дряни. Просто скачал и используешь
Так кути в вскодиум можно полноценно и абсолютно бесплатно использовать. Оба обеспечивпют твои хотелки. И они опенсурс, можешь сам собрать. Да и силион сейчас так же какраньше ломается скриптом,тчто на винду что на линукс. Брат жив. А студия говно индусское.
>Есть еще проблема с IntelliSense
Отъёбывающие подсветка/автокомплит/анализ кода это вообще во всех IDE (и не только в плюсовых) нихуя не редкость при работе хотя бы со среднего размера проектами.
Твой ви/емакс?
Компилятор швыряет варнинги по поводу того, что я массив не инициализирую.
А зачем мне инициализировать массив?
Ну заполню я его нулями, так эти нули все равно будут ничем не лучше любого другого мусорного значения.
В чем я не прав?
Инкапсулируй си-парашу внутрь цпп файла, чтобы оставить хедер чистым
В том же вскоде лсп на основе шланга работает как кусок подзалупы, не волнуйся :)
Не, у меня это исключено.
Warning это тебе не Error, забей хуй.
Но чего тебе стоит заполнить обоссанный стековый массив нулями?
Сейчас бы забить хуй на UB, которое обычно даже варнингов не показывает.
Я тут недавно забил на варнинг о том, что инициализация членов класса происходит не в порядке их объявления, и потратил часа два, чтобы понять, почему у меня блядь прога крашится где-то в середине
Алсо расскажите простыми словами про юнионы, чёт я не врубаюсь.
Юнион это топ тема.
Говорит о том что разными способами можно обратиться к одним и тем же данным в памяти.
На пример: структура изображает матрицу, в ней юнион по элементно, по векторам, обьявлены по разному, но указывают на одни данные. Особенно круто при использовании авх.
Нормальный лсп это как нормальные иде — возможно только в теории.
>В чём суть этих енамов?
Автору нравится так определять константы, мб стайлгайд такой, хуй знает.
>Алсо расскажите простыми словами про юнионы, чёт я не врубаюсь.
Попробуй сделать массив в который можно будет пихать элементы разных размеров (например, int16_t/int32_t/int64_t) или свою реализацию std::expected — без практики оно не поймёшь всё равно.
>Юнион это топ тема
Только в байтоебле. Покажи мне, где они используются в плюсах?
мимо байтоёб
Как пофиксить? Это не критично,но при отладке не удобно
Не на консоли, а в консоли.
Выяснилось,чьо проблема в другом.
Для удобства я захотел завернуть интерфейс для работы с sqlite в класс. Для вывода нужна функция callback,которую нужно как-то разместить внутри класса,чтобы она работала,а то у меня она не работает. Но ЧСХ, если эту функцию разместить в main.cpp,то все зарабоает. Но мне нужно,чтобы она была в классе.Что я делаю не так?
https://pastebin.com/DqhzuhSq
Ты передаешь указатель на функцию инстанса класса в сишную функицю - так это работать не будет.
Тебе нужно этот callback сделать статическим методом класса и отдавать его.
Либо же вызывать примерно с обёрткой в лямбде как на картинке.
Генерируешь секретный ключ, вычисляешь хеш-функцию от конкатенации ключа и полей структуры, результат передаёшь ещё одним полем в структуре. Если кто-то изменит поля структуры, хеш будет отличаться, а ты поймёшь, что подписано не твоим ключом, т.к. хеш будет отличаться от хеша, сгенерированного тобой для проверки. Т.к. ключ знаешь только ты, корректный хеш сгенерировать тоже можешь только ты.
Это самопальный алгоритм подписания, есть нормальные либы, но там уже заморачиваются с сертификатами, чтобы проверить подлинность мог кто угодно, а не только тот, у кого секретный ключ.
Мне imgui больше нравится
есть аналоги питоновского нумпи на цпп?
ГУЁВО, чо
Нет, это просто набор библиотек на все случаи жизни. Специально для Boost-разработчиков.
Даже крипта? Тридэ? Датасаенс и комплюхтер вижн? Инструменты для хуйлоад систем?
ищу библиотеку для довольно простых операций
такое на пипон и жыэс давно есть и работают
в цпп же... такая параша караул, либо нет ни документации ни примеров
либо всё очень трудно и непонятно и хз для кого писалось
это просто издевательство какое то
Сколько наводящих вопросов мы должны тебе задать, чтобы ты написал, какие задачи должна решать библиотека?
Клонов мейка в крестах и так дохуя. Лучше нормальную систему сборки напиши, которая сама умеет качать зависимости, собирать проекты без вызова сторонних make/msbuild/говнонейм, работать на основных платформах и с основными компиляторами. В других языках давно есть.
Cmake и ищет и качает
Ладно, это рофл конечно был. Вот по-нормальному.
кстати, да
float f;
float m;
m = std::modff(1.0015f, &i);
std::cout << m; // 0.00150001
как пофиксить эту блядскую 1 в конце? все расчеты мне ломает...
printf %.5g m
Если ты совсем нулевой, то изучай только устоявшися языки, rust все еще перспекитвыный язык, для тех кому нужен баланс скорости и безопасности, но only rust вакансий все еще мало, да и ждут там как правило тех кто понимат зачем тут rust а не с++ наример, тоесть сталкивался с неопределнным поведением, затыками в многопоточности, утечками памяти и т.д. В общем сли перекатываешься в "системное" программирование из других сфер можешь брать rust, в остальных случаях c++
Сначала плюсы потом раст.
>>506966
Легаси в низкоуровневом программировании вообще больше чем где либо, и это не только про плюсы, в том же расте ситуация через n лет будет та же — никто на таких языках не хуячит стартапы, не проводит а/б тесты выкидывая код после, не хуячит новые фреймворки каждую неделю итд и будет куча легаси.
Потому что мне впадлу делать темплейт или перегружать метод для lvalue и rvalue аргумента и делать emplace(std::forward), а так плюс-минус правильная семантика получается, не считая лишнего копирования string handle.
>>506906
Да, валидацию я не сделал. Надо при посещении таргета ставить в true некий флаг visited, чтоб при повторном попаднии сюда throw-ать exception про cyclic dependency.
>>506933
Я спать хотел уже. Сейчас сделаю.
Лiл, словил флешбеки с периода когда я работал на львовской галере.
Скопировал текст с картинки,переместил описание функции callback в private,но получаю следующие ошибки:
И если этот способ не работает,то как сделать способ со статическим методом?
Если ты про пикрил, и уволился оттуда не раньше лета 2021-го, то может и пересекались.
Поменяй [](void ctx....) { на [](void ctx....) -> int {
Я обосрался и думал что там callback без возращаемого значения.
А статик сделать очень просто: добавить слово static перед объявлением callback в твоём оригинальном коде.
Тюрьмы на россии опустеют намного раньше
Сделал через статик,положив колбэк в private.
Спасибо,все заработало. Если не лень,то можешь объяснить,почему без static не работало,а с ним заработало?
> Если не лень,то можешь объяснить,почему без static не работало,а с ним заработало?
Потому что без static ты определяешь метод класса, а с ним - функцию.
Указатели на метод класса это в плюсах вообще хуйня какая-то, которая может вести себя хуй пойми как.
Конечно, Eigen3
Тебе очень внимательно стоит прочитать про хранение чисел с плавающей точкой на компе. Твой вопрос некорректен, или переформулируй его в "как в цпп округлять до iго знака"
Если тебе надо считать точные значения без ошибок округления флоата, юзай какую-нибудь либу для длинной арифметики, например, GMP или Boost.Multiprecision, в котором есть обёртки для GMP. Работает медленнее флоата, это цена за точность.
что имею:
short i;
for (i=1; i<100500; i++)
std::cout << i;
как пофиксить это блядство? все расчеты мне ломает...
servo это структура которую ты сам определяешь в зависимости от того как и куда у тебя этот сервак подключен.
Анриал слишком жирный для моей игры
Документация тебе на что?
>There are no guarantees as to the quality of the random sequence produced. In the past, some implementations of rand() have had serious shortcomings in the randomness, distribution and period of the sequence produced (in one well-known example, the low-order bit simply alternated between 1 and 0 between calls).
>
>rand() is not recommended for serious random-number generation needs.
Документация это документация, а мне нужно авторитетное мнение авторитетных байтоёбов.
>совсем хуйня
Совсем хуйня на несколько строчек.
>под пиво пойдёт?
Под пиво пойдет.
Собственно, возьми и потестируй, что она выдает.
https://pastebin.com/3XcpCwU7
А, точно, функция не при чем. Тогда как сделать то, что я пытаюсь сделать? Видимо как-то изъебнуться с указателями, но я не понимаю как именно
Очевидно надо сделать чтобы можно было записывать. Есть функции защиты памяти, берешь и снимаешь защиту.
Пошёл нахуй.
Любой графический движок.
bgfx, magnum
Знает кто как семплер прикрутить к индирект драв нв / шайдинг меш нв - шнйдерам?
К базовым вертекс - индекс все работает а к этим хз как.
Есть некая иерархия классов, унаследованных от единого интерфейса (с виртуальными методами). При сериализации в массив байтов для передачи по сетке, соответственно, кладётся некий айдишник типа, чтобы на принимающей стороне этот айдишник прочитать и десериализовать корректно передаваемый объект.
Хочу это дело упростить, завести что-то типа мапы, где ключом будет некий идентификатор, получаемый из std::type_info (поле hash_code), а значением указатель на функцию, которая умеет парсить соответствующий тип. При старте программы накидать в мапу функций под сериализуемые классы и вызывать их из кода, который парсит сообщения.
Протокол обмена бинарный, если что. Норм идея или можно сделать другим способом? Если у меня две отдельные проги, использующие одни и те же хедеры (частично), то будут ли значения std::type_info одинаковы для одних и тех же классов при компиляции проектов по отдельности?
Один байт. Сам назначишь. Индекс в массиве функций.
Нет. Зависит от компилятора. Используй Boost.Serialization. Или заверни данные в protobuf например.
А разве в начале класса с виртуальными функциями нет части, которая указывает на конкретный класс?
Если я правильно помню, в начале класса должен лежать указатель на таблицу виртуальных функций. И по нему можно сказать, с каким классом по факту имеем дело.
Моя проблема в том, что выходит так, что надо самому придумывать некие константы, которые не будут меняться между запусками программы и компиляциями, т.к. программ у меня две -- клиент и сервер. И "идентификаторы" типов на них должны совпадать, для корректного определения, что за данные пришли по сетке. Я типа над этим голову ломал, можно ли сделать так, чтобы оно само выводило идентификаторы программно, а не я их зафигачил в коде в какой-нибудь enum.
Нельзя, успокойся.
Все люди - люди
Понял, принял, я тебя вычёркиваю из нормальных
не, по аналогии с std::uninitialized_copy(), которая заменяет memcpy()
Нужно на SQLite сделать запрос, что если нужный текстовый столбик, в нужной записи не равен '' - пустой строке, то значит мы удаляем из этой строки один символ. Если все таки равен пустой строке, то мы берем текстовый столбик из другой записи.
На языке С++ выглядит так
string getString()
{
if(value1 != "")
{
value1.pop_back();
return value1;
}
else
{
return value2;
}
}
В std:: входит и сишная библиотека, чего мне по существу вопроса как раз нужно было исключить.
В.
А, стоп, это я неправ. Они объявлены и глобально, и в std::, лол? А зачем?
Чтобы код на чистом Си мог компилироваться же.
Си никакого вообще понятия не имеет, что такое неймспейс.
Есть базовый класс с виртуальными функциями. Наследуюсь от него. Хедер (.h) и исходники с имплементацией (.cpp) наследников.
Пихаю класс-наследника в один хедер и цпп, сборка обсирается с ошибками undefined reference to vtable for и прочая паебень. Переношу этот же класс-наследник в другой хедер и цпп, эта хуедрыгало собирается нормально, без ошибок. Код один и тот же, инклюды все подключены. Чё за поебень? Проект на Qt, система сборки qmake. Типа эта параша линкеру не может в нужном порядке подпихнуть объектники чи шо?
Так надо.
>класса с виртуальными функциями нет части
У класса с виртуальными функциями нет чести, используй CRTP
Через впн
Через впн.
С торентов
В прошлый раз вы послали меня нахуй, но я вернулся.
Как блять вычислить матрицу 1024х1024?????
вроде нашёл рабочий код, но не могу никак запустить проверить.
Я за плюсы вообще не шарю, а тут ещё и указатели какие-то. Можно в двух словах сказать как запустить код?
Иди нахуй.
> Можно в двух словах сказать как запустить код?
Выделяешь память для трёх матриц, заполняешь первые две, потом все три передаешь в функцию.
> float ⚹⚹
Задумчивое ебало питекантропа представили?
>Выделяешь память для трёх матриц, за
Да, я так и хотел сделать, видимо это надо делать через new
Ну типа.
В твоём случае
float ⚹⚹ptr = new float⚹ [N];
for(int i = 0; i < N; i++)
ptr = new float[N];
Но ещё можно исправить ту функцию. Поменять «указатель на указатель на float» на обычный «указатель на float» (звёздочку одну убрать), и к элементам обращаться не как ptr[j], а как ptr[i⚹N+j]. Правда массив в функцию придется передавать в виде reinterpret_cast<float⚹>(A), но зато объявление можно не менять.
> к элементам обращаться не как ptr[j], а как ptr[i⚹N+j]
к элементам обращаться не как ptr[ i][j], а как ptr[i⚹N+j]
ещё один быстрофикс
Сейчас почти везде хайринг фриз, если ты про крупные конторы говоришь. Если живешь в РФ, то гораздо проще в яндекс на стажировку попасть, я думаю.
Смотря что ты делаешь
Если будешь удалять/создавать строки в матрице, то лучше первый вариант
Если будешь часто ее просто считывать, то второй
Обычно так и делают, тогда можно просто
std::array<type, n*m>
Но это для матрицы фиксированного размера, если будешь вставлять элементы то будет худо
Если при компиляции не видит хэдеры, значит симейк их не видит
Это нормально что Иде и билд система видят по разному
target_include_directories что то там в симейке пропиши
Если для математических матриц, то лучше std::valarray
>матрицы фиксированного размера
А у матриц размер вобще меняется?
Но я уже сделал include: общий файл выглядит так:
cmake_minimum_required(VERSION 3.16...3.21)
project(Gam)
include_directories(${PROJECT_SOURCE_DIR}/src/.cc)
include_directories(${PROJECT_SOURCE_DIR}/include/.hh)
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/.hh)
add_executable( gg Gam.cc ${sources} ${headers})
Когда я добавил target_include_directories( ${PROJECT_NAME} PUBLIC include) выдало ошибку о том, что cannot specify include directories for target "Gam" which is not build by this project/
У меня для тебя плохие новости, так уже никто не пишет симейки
Сейчас в модерн симейк оперируют таргетами
> target_include_directories( ${PROJECT_NAME} PUBLIC include)
{Симейк_продект директори}/инклуд попробуй
Я уже и не помню, но скорее всего в районе 2016-2017.
Дарю шнекоход.
>Можно ли использовать разные аллокаторы
библиотека std именно под это и спроектирована
>подводные камни
многопоточность
Сначала лучше ищи работу, а потом изучай. Походишь по собесам - поймёшь какое подмножество языка востребовано и где надо поднажать.
Рынок труда сильно тряхнуло и часть компаний по всем позициям остановили найм, а часть - уехали. Сейчас есть некоторое оживление, но скоро праздники и мёртвый сезон до марта-апреля.
Стажировки ещё есть и джунов берут - 100% можно залететь на оборонку - там сейчас найм и денег подвезли (но всё равно пановать не будешь и специфика может вызвать отторжение). В брендовых конторах надо писать HRам и спрашивать чё как и когда появится. Либо чеерз преподов на кафедрах искать.
Если есть время - то лучше поднажми на Python. Комбо из c++/python/University B.S. in Math/Physics/Computer Science пробивает любой блок.
>имея университетский уровень языка
Это какой? Когда в у меня был С++ в универе, мы только дошли до полиморфизма и виртуальных функицй. Исключения, шаблоны, всякие RAII уже не проходили, лямбды и многопоточность с моделью памяти тем более.
>дальше его изучать и искать работу
Ну С++ все еще живой и на нем пишут, так что если есть желание, то наверное есть смысл. С другой стороны, неплохо еще что-то уметь помимо самого языка программирования. То есть знать какие-нибудь кишочки сетей/ос или всякие штуки про графику. Ну или хотя бы Qt.
> 2022
> Cmake все еще не умеет в модули
когда же мне дадут в моих петах писать божественный import std;
Нет, а ты?
В чем он не прав?
Модули появились в с++20, скоро уже 23 выходит, а нормально собирать это все нечем
> собирать это все нечем
Чел, msbuild уже почти два года умеет. И std в модули перенесено. Нахуй вы со всяким говном типа cmake сидите?
Умеет. Студия только под винду, но собирать умеет под WSL или удалённый линукс, даже дебажить умеет. Линукс уже давно в винду встроен, странно было бы если msbuild не умел бы собирать кресты под него. Только тут уже следующий вопрос к тулчейну, GCC умеет в модули хоть?
> собирать умеет под WSL
Ну это конечно классно, под мак бы еще собираться научиться
> GCC умеет в модули хоть
Да вроде умеет, кланг тоже
Теперь хочу константный список и обламываюсь. Если объявить const List<T> list{}, то все внутренности класса списка становятся константами. Тупо даже нельзя обход списка сделать, т. к. это требует изменения указателей.
А самый прикол при всем этом, что можно создать метод, который изменяет значение в узле. То есть константность данных вообще никак не обеспечивается. Класс владеет только указателями и их изменять нельзя, а сами данные изменяй сколько хочешь.
Как это делается по-нормальному?
>Тупо даже нельзя обход списка сделать, т. к. это требует изменения указателей
А? При обходе ты же указатели в нодах не меняешь, а просто по ним проходишься
Ты как то поконкретнее вопрос задай
>>512397
Зависит от сферы, с такими вопросами тебе лучше сразу идти интересующие тебя вакансии смотреть что в них требуется
Универсального списка нет
>Какие зп у ждуна?
рандом
>Можно ли найти работу ждуном по удалёнке на запад?
Сейчас это сложнее чем когда либо но все еще возможно
>Зависит от сферы, с такими вопросами тебе лучше сразу идти интересующие тебя вакансии смотреть что в них требуется
Универсального списка нет
Ну я в целом неплохо шарю за стандарты, STL, на литкоде чисто на плюсах 150 задач порешал, копал буст и qt. Что мне лучше сейчас освоить чтобы стать крутым и повысить шансы на вкат - параллельное программирование или программирование под линукс?
Ну с таким списком я бы уверено уже на собесы ходил
Только если конкретная предметная область интересует какая то, то можно подучиться еще
Вообще интересует меня машоб и нейронки. Но в них я только недавно начал вкатываться со стороны навёрстывания проёбаных лекций матана и с питона. А кушать уже хочется. Так что я пока тем что наиболее интересно буду заниматься на досуге, а пока руку в крестах набью.
Понял, спасибо
>А? При обходе ты же указатели в нодах не меняешь, а просто по ним проходишься
Ну если манипулировать голимыми нодами, как это в Си делается, то да.
А если собрать это все в класс списка, то нужно хранить как минимум указатель на текущий узел. У меня это сurr_. И константный указатель никуда не сдвинется.
А ноды как раз-таки менять можно как хочешь, потомучто в классе нет членов-нодов, только указатели.
>Ты как то поконкретнее вопрос задай
Как обеспечить константность данных в списке, сохранив при этом работоспособность самого класса?
>А если собрать это все в класс списка, то нужно хранить как минимум указатель на текущий узел. У меня это сurr_. И константный указатель никуда не сдвинется.
Если ты только так хочешь список обходить, то никак тебе константность не обойти
А вобще обычно хранят только начало и конец списка
>Если ты только так хочешь список обходить
Дело не в том, что я уперся в такую хотелку, а в том, что я других реализаций в литературе не встречал.
>хранят только начало и конец
Это не суть. Реализация с пикрил перегружена избыточным функционалом просто в порядке упражнений.
>А вобще обычно хранят только начало и конец списка
Ну а как хранят, в виде чего?
Если это указатели на ноды, то тут те же самые проблемы.
Предыдущий узел и текущий узел.
Во всяком случае на первый взгляд выглядит дешево и сердито в плане реализации.
>Что мне лучше сейчас освоить чтобы стать крутым и повысить шансы на вкат - параллельное программирование или программирование под линукс?
Бамп годному вопросу
удали и сделай нормальные итераторы, с операторами ++, *
погугли как их делать для связных списков
>сделай нормальные итераторы
Тоже склоняюсь к мысли, что иначе проблему не забороть.
Но я не могу просто взять и все перепилить на свой вкус, т. к. к такой реализации привязано все повествование книжки.
Чего я на самом здесь и сейчас хочу - это выяснить пределы возможностей такой вот, широко распространенной в книжках, архитектуры. И со спокойной совестью записать себе в блокнотик, что поцаны так не делают.
Тогда там все поля, кроме размера списка, становятся мутабельными, что практически делает бессмысленной константность.
И это все равно не устраняет проблему, что данные в нодах можно изменять, вне зависимости от константности списка.
>ты там хуйни какой-то
Ну во-первых, мопед не мой.
Пикрил 1 - так выглядит обход снаружи класса, то есть через публичные методы.
Фактически обход реализуется через метод(ы) next() списка и узла.
Пиздосики.
Вот тебе плюс-минус нормальный односвязный список.
https://gcc.godbolt.org/z/5551PP3j3
Изучи, можешь ещё классами обмазать, для вязкости.
Я тебе говорю, обмажь ооп и шаблонами, если хочешь. Тут всё элементарно, в образовательных целях, лучше хер придумаешь.
Вопрос в том нахер это говно в спп нужно если и с кдассическим инклудом все работает?
>кто ни разу не собирал ничего сложнее однофайловых лаб
А серьезно, кто этим занимается?
Типа представляю себе такой бизнес-кейс. Мы написали такую йобу, что сами собрать ее не можем. Нам срочно нужен сеньер-помидор по сборочкам.
Потому что инклуды говно, которое тащит за собой всё что в файле находится, а не только то что тебе нужно
С модулями ты можешь спокойно всю стандартную либу тянуть imort std, а собираться это будет быстрее чем #include <iostream>
>>512541
Про скорость сборки что то слышал? Или в университете еще не проходили?
Потому что т.н. инклуды в схх по факту большая часть исходников.
Ну вот допустим я знаю что вместо ручной инициализации нового элемента и ставки в push_back можно записать emplace_back(аргументы конструктора). Где еще почитать подобные советы по другим классам и функциям STL?
Это прошивка для роутеров.
struct S2{
std::list<Foo> foo2;
void append(Foo &&f)
foo2.empalce_back(std::move(f));
}
struct S{
std::list<Foo> foo1;
void func() {
S2 s2;
for(auto&& f:foo1) s2.append(std::move(f));
}
}
Не работает будто бы перемещение, элементы копируются блядь. Что я не так делаю?
С хуев ли не работает, если работает? Если определишь конструктор перемещения, будет перемещать. Даже если не определишь - компилятор сгенерирует неявный конструктор, если у полей класса есть конструкторы (если нет, ошибку компиляции выдаст).
Хотя если ты определил явно какой-то из конструкторов копирования, но не определил конструктор перемещения, то он конструктор перемещения не сгенерирует, и будет эти твои фу копировать.
Спасибо за инфу про конструкторы, что-то я забыл про это. Я когда в отладке смотрел, выглядело так, что перемещение не срабатывало.
Как я понимаю, до последнего emplace_back, отладчик будет показывать, что объект все ещё принадлежит старому списку?
Вроде у Майерса в "Effective Modern C++" все подобные ништяки расчехляются.
doUBle
youtUBe
pUBlic
Я понял, в чём твой затуп, у тебя, видимо, представление о перемещении в C++ как о чём-то радикально отличном от копирования, но нет. Объекты из исходного списка никуда не денутся, просто сами эти объекты могут измениться, если ты задал в конструкторе перемещения, чтобы исходные объекты менялись.
Вот глянь здесь пример, как можно перемещение использовать
https://onlinegdb.com/hBpna9qwpj
У тебя у Foo есть какие-то тяжеловесные данные (массив чисел размера сотня миллионов, например). Копирование такого объекта потребовало бы выделить в новом объекте память под такой же массив чисел и скопировать память массива из исходного элемента в новый - это долго. С помощью перемещения можно определить поведение так, чтобы из исходного объекта просто копировался указатель на эти данные, а в самом исходном объекте этому указателю присвоить nullptr. Исходный объект остался на месте, просто владение памятью ушло другому объекту.
Если ты не определил конструктор перемещения, то сгенерируется неявный конструктор, который будет вызывать конструкторы перемещения у каждого своего поля, у которых есть явные или неявные конструкторы, а поля элементарных типов или POD-типов (например, обычные int или double не указатели), просто скопирует.
template< class T >
typename std::remove_reference<T>::type&& move( T&& t ) noexcept;
а не так
template< class T >
T&& move( T&& t ) noexcept;
Потому что std::move() ничего никуда не двигает на самом деле. Все, что она делает, это возвращает rvalue ссылку на свой аргумент.
Но если T - ссылочный тип, то T&& свернется в обычную ссылку, чего нам не надо.
> (T&&)&& = T&
Понял принял
Что то чем глубже в плюсы погружаюсь, тем более странные вещи наружу вылезают
Переменная (с non-static data member в принципе так же, но чуть сложнее) не-ссылочного типа
T v = init;
связывает переменную v с объектом, который создаётся определением этой переменной (An object is created by a definition …. [0])
Для переменной ссылочного типа
T& v = init;
объект, с которым свяжется переменная, определяется инициализатором init.
Собственно, это как надо рассказывать про ссылки. А не "пук-среньк, ну это как указатель, только автоматически разыменовывающийся, понятно же, да? кхе-кхе, мням"
[0] https://timsong-cpp.github.io/cppwp/n4868/intro.object#def:object
Да, их оставили для совместимости с сишкой.
я имею ввиду то что в крестах не поддерживается великая сишная возможность которая автоматически обравнивает память под структуру с растягиваемым массивом
Так дабл - это просто алиас для пары флоатов, если не знал
в stl double определяют вот так
using double = std::pair<float, float>;
Тьфу, да какой дабл. Тапл же. Ты же сам про него писал. Нащо пара если есть Тапл?
using long long double = std::tuple<long, long, double>;
Делаю так:
class TTimer
{
...
void Tick(float threshold, void (⚹func)());
template <typename T> void Tick(float threshold, void (T::⚹func)());
...
}
...
timer.Tick<Graph> (1e6/60, graph.Draw);
Пишет вот это:
undefined reference to `void TTimer::Tick<Graph>(float, void (Graph::⚹)())'|
ЧЯДНТ?
Graph graph забыл, но не суть.
Хз ты херни нагородил.
Нахер там темплейт? Я такое делал просто через стд функцию в аргументе, а при вызове шли лямбдуи в ней что угодно, хоть класс хоть что. Вме работает.
//где то сверху
#define CALLBACK(...) std::function<void(__VA_ARGS__)> const&
//твоя функция/метод
.. funcname(args... , CALLBACK() callback)
{
...
callback();
}
//вызов
..funcname(input args... ,
[&]()
{
// любая функция
});
//профит
древнейшая тема, просто раньше это делали через (воид*)
Но, все таки, интересно, почему это варик не заработал? Выглядит, вроде, правдоподобно
не совсем понял тебя
Да я так, в целях понимания синтаксиса
Под виндой нужно передать путь в sublime.exe.
Но это работает нормально только если продублирую бэкслэши \\.
Твой вопрос звучит как "хочу создать вектор, но не хочу создавать вектор". Объясняй лучше.
В том и дело, просто хочу водить три переменные в программе вместе и думаю как это сделать без доп излишек на память.
int arr[3];
Я хочу функцию чтобы каждый параметр в ней был констекспр
Что то кроме темплейтов и дефайнов придумать можно?
- меняются условия выполнения программы, происходит такое редко, раз в 5 мин
- под новые циферки компилируется матем. библиотека, написанная на шаблонах
- через длл новый матем. модуль, который через динамический линк подключается к основной программе
- ????????
Профит, супер-пупер быстрая либа.
Называется ли это рефлексией? Понятно, что в таком проекте у тебя должен быть в папочке с экзешником и компилятор, и цмаке, и исходники
Параметры всё ещё не констекспр, только возвращаемый
Какие еще условия меняются? Процессор выдернули?
> у тебя должен быть в папочке с экзешником и компилятор
Эбалло спермобляди?
За чем
Можно ведь все варианты предсобрать и в хуй не дуть, а ты хочешь жрать говно на ровном месте
Программа имеет два режима доступа: клиентсткий и админский. Для того чтобы войти в админку,нужен будет пароль. Как мне реализовать хранение и изменение этого пароля? Ну и чтоб его нельзя было спиздить,удалить через файловый менеджер или прочитать в plain text? Базу данных в одну строчку сделать? Просто этот вариант мне не кажется оптимальным для одного пароля
Хранить хеш пароля на сервере или в другом месте, куда у текущего пользователя нет доступа, а у программы есть. Любые попытки спрятать пароль где-то у пользователя не надёжны.
Моя программа - это экзешник на компьютере,который делает базу данных для своей работы. Думаю,путь лучше пароль лежит в базе данных,но хешированный.
Поэтому вопрос другой. Как организовать хеширование на плюсах? Есть ли нормальные библиотеки? А то только реализации sha1-2-3 от Васянов на гитхабе есть,которыми не понятно как пользоваться
OpenSSL?
Если пользователь узнает хеш пароля, он может запустить твою программу в дебаге/декомпилировать и подсунуть хеш алгоритму проверки пароля, ему даже оригинальный пароль знать не надо. Разве что ты рассчитываешь, что никто этим заниматься не будет.
Xor в цикле. Для лабы сойдет.
Если искал больше месяца, то да.
Ну смотри. Сейчас на носу праздники и скорее всего следующий раунд найма, как обычно, начнётся в феврале-марте. Итого ты потеряешь 3 месяца деньгами. Чтобы компенсировать выпавшие доходы тебе понадобится весной устроиться на 75к минимум (60 + 180/12).
К лету у тебя уже будет 0.5 коммерческого и осенью можешь просить повышение или перекатываться на лучшие деньги или условия.
Ну и в праздники НГ + февральские + мартовские будешь пинать хуйцов за зарплатку.
То есть хочу что-то такое
где-то один раз v.resize(n);
далее вставлять в v с нулевого индекса, потом сбросить и снова вставлять с нулевого. Ну чтобы при каждой "очистке" оно не выделяло память
Это implementation defined, но вряд-ли вектор будет освобождать память при каждом clear.
Я же как раз указал время на смену процесса, например, 5 минут. Окей, пусть будет раз в час, а компиляция такого ядра занимает ~минуту
>>515749
В моей модели ядро с матаном, и предполагается, что меняется размерность матриц и константы. Матан на Eigen3 с константыми матрицами
>>515756
Можно, но сложность и объем невероятно возрастают по мере увеличения аргументов.
Короче, нечто схожее - CERN ROOT
Что мешает раз в час делать system("sed ... && cc ...")?
Посмотри в исходниках стандартной библиотеки.
Кхм, слегка зафакапил
template<bool b>
struct static_assert;
template<>
struct static_assert<true>{};
>Есть ли нормальные библиотеки?
Помнится давеча в одном проекте Botan использовался, вроде нормально было.
void foo(double f(double x));
void foo(double (⚹f)(double x));
Одно указатель другое нет
что то я указатели на функции так редко виду, что даже не уверен что первое скомпилиться
Скомпилится. В cppinsights первое приводится ко второму.
Может, в каком-то стандарте добавили такой синтаксический сахарок.
мимо
то есть по даташиту через analogwrite, нужно посчитать какой шим подать можете подсказать как это сделать?
читать из stdin построчно
и
завершить работу при считывании конца файла из stdin
и у меня максимально тупой вопрос - конец файла в данном случае вообще это что?
передавать данные в программу как int argc, char *argv[] ?
или конец файла это какое-то магическое сочетание клавиш при вводе в консоль? Спасибо за внимание
>в каком-то стандарте добавили такой синтаксический сахарок
Мне попалось в книжке, которая еще даже про 98 стандарт не знает.
Вообще это еще с сей идет, что имя функции само по себе кастится к указателю, так же как с массивами.
Просто тут контекст другой - объявление, поэтому не очевидно почему и как оно работает.
прочитай теорию базовую по алгоритмам, тот же грокай алгоритмы
потом идешь решать задачи, можно с литкода
что не может решить за час, смотришь и понимаешь решение, закрываешь его, пытаешься по памяти реализовать
если что то не понятно изучаешь
и так решай пока не придет умение
> наступают
Разве что в своё говно, вытекшее из штанины. Либ-то нет. А что есть находится на стадии "на прошлой неделе придумал крутую идею, пилим с пацанами". Как бы мне он не нравился, но пользоваться им тяжело. Код компактнее, но надо полностью переписывать то что уже давно есть на крестах в либах. Биндинги на сишные/крестовые либы отдельная тема - либо пользуешься всратыми автобиндингами, либо сейф-огрызками. Делать ансейф религия не позволяет, а полностью покрыть API не могут.
Да все бы ничего, но эту хуйню уже в ядро Линукса пропихнули. И скоро придется помимо gcc/clang иметь rustc в системе. Т.е. для сборки системы нужно знать два языка и иметь два компилятора.
Если хочешь реально шарить - то лучше вообще их на сишке дрочить, без всяких плюшек в виде stl, фичей питона или js. Меня без иронии взяли на первую работу после того, как я сказал что всего Прату прочёл и все задачи из него же сделал. Ещё и котлету неплохую дали.
>Меня без иронии взяли на первую работу после того, как я сказал что всего Прату прочёл и все задачи из него же сделал. Ещё и котлету неплохую дали.
Прату по няшной или плюсам?
Не слушай додиков, чтобы за алгоритмы шарить на плюсах писать не обязательно
Но все таки если собираешься плюсов ком становится, то лучше на плюсах
Спасибо
Julia кажись такое умеет. Для мат модуля самое то.
А перекомпилировать eigen на ходу как-то стрёмно. Ебанется на второй неделе работы и хрен проссышь почему
Внешний параметр как-то неэлегантен.
Через аргумент с дефолтным значением.
Не твой личный гвардеец
можно хотя бы пример какой-нибудь где элементу контейнера stl присваивают значение указателя на функцию
Укажи в качестве типа значения указатель на функцию или std::function.
void my_func(int i) { std::cout << i; }
std::map<int, decltype(&my_func)> my_map;
my_map[0] = my_func;
my_map[0](42);
Он имел в виду thread_local.
Он имел в виду thread_local.
>пить смузи
Я не люблю смузи, я пью кофе и тёмное пиво
>в опенспейсе
Хз что это такое, но звучит как какая-то социоблядская хуйня которая мне не нужна.
>чпокать классных эйчарок
Я уже давно не получаю удовольствия от тупого чпокинга. Да и вообще я уже смирился с тем, что найти девушку которая была бы в моём вкусе в современном мире почти что нереально так что я сублимирую в опенсорс.
>лениво пописывая код одной рукой.
Я в прогерство ради челенджа вкатывался, а не ради того чтобы два часа размышлять над тем, какие цвета выбрать для градиента на фоне кнопки.
>SOLID-шиз, ты узнал тебя по твоему говнокоду.
??????
Протокол языкового сервера (Language Server Protocol - LSP) - это способ общения с языковыми серверами (такой же как HTTP или FTP).
Языковые серверы - это специальные программы, работающие на обычных серверах. Они принимают мета-состояние редактора, в котором вы пишете код (например, текущая позиция курсора внутри редактора, токен над которым находится курсор), и возвращают набор действий или инструкций - какой токен должен быть следующим, что должно произойти, когда вы нажимаете CMD/Ctrl-клик на этом токене, и так далее.
>пить смузи в опенспейсе и чпокать классных эйчарок, лениво пописывая код одной рукой.
Лол, ты не к тем людям приходишь маня. Здесь твоя мирская хуйня никому не нужна. Если бы мы хотели заниматься хуйней, то и без твоего совета разобрались бы.
>>518207
>>518213
Проснулись, байтоебики.
Вы когда на свидание с тянкой ходите, говорите, что работаете грузчиком или строителем? Или кем-то еще, но не кодером-сутулым. Хотя, какие вам девушки, вы в своих конторках подвальных только мужиков видите целыми днями, да и не самых красивых. Поэтому зачастую писаки на плюсах это латентные геи.
Алсо, постоянно говоришь о ебле и оцениваешь кого-то со стороны красоты - ты, а латентные пидоры - мы. Интересно...
Я бы лучше плюсы читал, чем это
Что за мода сейчас во всех модненьких язычках писать тип справа от имени переменной/обьекта/массива?
>читаемость повышает
Как-то не очень... Да и каким образом, если между мыслями в голове "переменная А целочисленного типа(А int := 10)" и "целочисленная переменная А (int A := 10)" нет особой разницы?
Ну ты давай не пизди на Реакт то, чмонь. Понимаю, что ты ёбик-дрочер-сутулый любишь всё усложнять. Ты бы веб до сих пор на жаба-апплетах писал, была б твоя воля!
Я думаю, на моменте (matrix i, j) ты и сам понял, какой это кринж.
> FmtPuts "%s" tme
Ты ведь знаешь, зачем в printf нужна строка форматирования, в которой есть эти уродливые %d, %f, %s и т.д?
Да не трясись ты. Просто признай что ты залётная вниманиеблядь, ляг на пол, закрой уши и жди спасения.
> Да и каким образом
Таким когда у тебя тип ахуеть какой огромный, а название переменной что то вроде name
И ты пока через весь этот тип глазами пробежишься, название переменной еле заметишь, тем более если их несколько
Но да, для типа длино несколько символов, как INT вобще пох где он стоять будет, хоть в середине
Ты сказал?
> Но да, в объектноориентированном языке и раз уж в нашей цивилизации читают слева направо, то тип логичнее писать до переменной
Ахуенная логика, если не считать того что тебе всегда важнее узнать имя переменной, а потом её тип
> почему все языки пишут типы справа
> потому что читаемее
> Ты тоже аргументов не особо отсыпал.
Ну если у тебя есть какие то другие теории, почему тип справа пишут ВО ВСЕХ современных языках, я готов выслушать
Этот код работает.
https://ideone.com/i5pBgU
У тебя в классе Calc объявлено поле с таким же названием - ошибка из-за коллизии имён.
> больше буковок
> больше инфы
Ты дибил?
Я не знаю как тебе еще объяснить что имя у переменной > её типа
Ты можешь прожить не знаю тип переменной, но не можешь не зная имя
> У тебя тут сразу куча ошибок: к большинству, к авторитету.
> Да все современные языки пишут не правильно и не логично, хорошо что иван с с++ треда двача знает что как и лучше
Братан, я понимаю когда 1-2 языка были бы такими, но сейчас вся индустрия на это переходит, у тебя в голове ничего не звинькает когда ты это осознаешь?
Не, не то.
>раз уж в нашей цивилизации читают слева направо,
Вот именно, что слева направа!
Конпелятор разбирает объявление начиная с имени и мечется то направо (преимуществено), то налего.
В итоге получается порядок даже не справа налего, а изнутри и куда придется.
>Вот из такого разговорного синтаксиса все и следует.
Нет, все следует из идеологии Си, что все конструкции должны максимально просто ложиться на компьютерную архитектуру.
>Так сложился естественный язык.
В общем виде синтаксис объявлений Си далек от интуитивно понятного.
И любое его объяснение строят на том, чтобы показать как переводится си-объявление в линейно читаемое слева направо объявление. И имя там стоит в крайней левой позиции.
Функция-член класса отличается от обычной функции тем, что у неё есть первый неявный параметр Calc this. То есть void Calc::Namig() на самом деле это void Naming(Calc). А function у тебя принимает <void()> == void func().
И тогда либо:
std::function <void(Calc*)> Command_Function;
Command_Function = &Calc::Naming;
Либо обёртка bind, приводящая к void() с неявной подстановкой this:
Command_Function = std::bind(&Calc::Naming, this);
>Таким когда у тебя тип ахуеть какой огромный, а название переменной что то вроде name
>И ты пока через весь этот тип глазами пробежишься, название переменной еле заметишь, тем более если их несколько
Пример из жопы, если честно.
>Ну если у тебя есть какие то другие теории, почему тип справа пишут ВО ВСЕХ современных языках
Банальная мода и неосиляторство написать нормальный синтаксический анализатор, чтобы распарсить код. Парсер у Си-подобных языков намного сложнее, чем парсеры у новомодного шлака, потому что семантика синтаксиса Си зависит от контекста, когда же у новых язычков все более однозначно(особенно если используются ключевые слова func, var, let, и т.д.). Вот и все.
А про "удобство" чтения это хомякам заливается, чтобы оправдать свою лень/нежелание/неосиляторство. Ибо даже лапша общелиспа становится удобной и читаемой со временем.
>>518526
эх, не далеко у меня получилось уйти самому
как теперь вызвать функцию из map-контейнера-поля объекта класса через функтор?
https://ideone.com/87ZEEH
Как научиться в этом разбираться, в паре учебников которые я осилил ни намёка нет на то как решать подобные проблемы(?
Видел как тип у итератора выглядит без auto?
Да и тип в основном длиннее переменной
>>518591
> семантика синтаксиса Си зависит от контекста
Ты это за хорошее считаешь?
> становится удобной и читаемой со временем
Я конечно понимаю что человек ко всему привыкает, но это не оправдывает решений не удобный у языка
> все равно привыкнут, лол
Лучше сделай тогда через bind, чтобы не писать в скобках this
https://ideone.com/1iORal
То что ты хочешь cделать обсуждается в книжках по продвинутому использованию c++ (шаблоны и метапрограммирование).
Ошибки, которые выдаёт компилятор по шаблонам всегда сложно разбирать. Но с этим особо ничего не поделать, разве что посмотреть что другой компилятор скажет (или IDE).
пока что только в мсбилде более менее с этим
симейк разраб недавно на cppcon выступал, обозначил что, РАБОТА ИДЁТ, так что может через годика два заработает
>Ты это за хорошее считаешь?
Я никак не считаю, мне на это все равно. Я же компиляторы не пишу, хотя если бы писал, то сделал бы тип справа.
>Я конечно понимаю что человек ко всему привыкает, но это не оправдывает решений не удобный у языка
Разница не столь велика, чтобы считать что-то конкретное более удобным. Поэтому выбор больше от популярности самого языка и сопутствующих технологий зависит. Все эти языки-однодневки следуют моде, которая каждый год меняется. Да и сама мода пропитана референсами на старые языки по типу паскаля, оберона и т.д. Так и будем ходить по кругу. Поэтому нужно учить фундаментальные технологии, не отвлекаясь на инфомусор, потрогать палочкой C, Smalltalk, Lisp, OCalm, Haskell и тогда вообще похуй станет. Это я все к тому, что аргумент от марктелогов-блядин в духе "У НАС "ЛУЧШЕ" СИНТАКСИС, ПОЭТОМУ ИСПОЛЬЗУЙТЕ НАШ СТИЛЬНЫ И МОЛОДЕЖНЫЙ ЯЗЫК" - полная херня.
> Это я все к тому, что аргумент от марктелогов-блядин в духе "У НАС "ЛУЧШЕ" СИНТАКСИС, ПОЭТОМУ ИСПОЛЬЗУЙТЕ НАШ СТИЛЬНЫ И МОЛОДЕЖНЫЙ ЯЗЫК" - полная херня.
Ну тут соглы
Защита от умственно отсталых дебилов, у которых баги из-за случайного изменения строк.
Видимо, чтобы не ебаться с cow.
Когда ты строку присваиваешь нескольким переменным, она не копируется. Просто все эти переменные теперь указывают на этот объект строки.
Если бы ты изменил строку одной переменной, она бы изменилась во всех других.
А что не так с копи он райт? Альтернатива - создавать новый объект каждый раз, когда нужно изменить строку, и в этом случае копирование будет происходить значительно чаще.
Я вышел за границы. Понял
>создавать новый объект каждый раз, когда нужно изменить строку
Это буквально то, что делает питон. Вместо
str[4] = 'x'
делаем
str = str[:4]+'x'+str[5:]
То есть создаем два временных объекта, чтобы создать новый объект на замену старому, лишь бы не переписать один сраный байтик, лол. Так чем это оправдано?
Или ты хочешь сказать, что изменять строки в принципе НИНУЖНА?
>Почему в нвидии прогерят на винде
На линупсе нет игор, так что драйвера для видеокарт им не нужны, как и сами видеокарты.
Где-то читал, что основной хлеб производителей видивокард - нифига не геймеры. А всякие майнеры, мл и прочий стафф всё равно запускают на линуксе.
Он, канешн, подпёздывает в плане всяких SoC систем и кластеров. Скорее всего его к таким проектам не подпускают прост.
1. https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite
Из России реально только в Ереване работать. Дальнейшая релокация для новеньких по общим правилам (5 лет стажа и хорошая работа.
2. Потому-что я работаю с играми под винду. У нас есть один кроссплатформенный проект, его через WSL в вижуал студии кросскомпилировать под никсы - норм работает. CI\CD для него само собой на нормальных никсах.
Свисни, когда член будет 20 см - тогда поговорим
Нет блять, серьёзно? А если тебе предложат котят топить за лярд в год ты тоже этим кичиться будешь?
я не вижу смысла слушать что-либо о профессии от диванных теоретиков, программистов в нонейме и просто ебанутых.
Зарплата - хороший показатель достижений и навыков. А пока ты сидишь в Саратове и пишешь гуй для СДЭК.доставки - твое мнение ничем не отличается от мнения бомжа. Так что сходи, помойся. Может полезно будет.
Хороший показатель - это то что ты убежал как всякие либерахи. Не вижу ни одной причины почему твоё мнение на этой борде дожно отличаться от мнения бомжа, ты же фактически сейчас им и являешься.
Про это я и спрашивал - кроме материальных достижений в жизни у тебя что-то ещё имеется?
Молодец, что понимаешь несостоятельность своих доводов. А то неспособность обустройства стабильной личной жизни выдаёшь за какое-то достижение. Это называется синдром отложенной жизни, когда живёшь ради подготовки к хорошей жизни, но непосредственно этой самой хорошей жизни прямо сейчас нет.
А жизнь в Ереване это не синдром отложенной жизни? Нет ощущения, что другие конторы сразу перекатили своих лидов в норм страны, а тебя как помойного котёнка сдали на передержку в армянский приют?
ну проблемы с цветом столбиков я решил, просто на максимальном удалении, у столбика ширина равна нулю и рисуется только его граница QPen'ом, а она была другого цвета
Хорошего спеца в Ереван не сбросят, так что можешь спокойно спрашивать на всех.
Модулями в проде пользуютесь?
>1) Что учить чтобы вкатиться в нвидию?
английский
программирование на bat-файлах и заполнение excel-табличек
ну может и пропущены, просто какой смысл вообще в const переменных, только что бы программисту компилятор запретил менять ее?
Да.
> msbuild
> xml в 2022
каш мар!
И что мне это всё ручками писать, или есть еще какой то вспомогательный формат который компилится в мсбилд файл?
Ну да. Его либо генерируют через cmake, либо настраивают мышкой в свойствах проекта.
Приветсвуются только бесплатные варики, если что
Всмысле быстро и влажно вкатиться на голых крестах + OpenGL + Физическая_Либа_Name
Нет
Мне одного build.sh хватает, чтобы вызывать внутри симейк и потом подчищать за ним говно.
Да больше и никак. Есть приложение, которое при запуске требует логин, пароль и еще кое-какой номер (типа второго пароля). Все данные всегда одинаковые. Хочу сделать .ехе, чтобы каждый раз не вводить эти данные. Можно брать их из файла, можно прям в коде хранить. Без разницы.
Топ IDE всегда было и будет вижуал студия.
Autohotkey
Нет, в Байкаре. А что?
Сборщик мусора сидит в кишках рантайма почти как отдельный процесс, следит за всеми ссылками и в фоне периодически удаляет объекты, применяя ёбнутые алгоритмы с поколениями и прочим говном. Что, похоже на умные указатели?
Чет там какое хорошее применение в шаблонах когда форвард заменяет разбор случаев и правильно обрабаиывает и ссылки и не ссылки и r vlaue и x value. Ща не помню, но че то такое
В идеальной передаче.
Нужно для реализации таких штук как emplace_back, чтобы передать аргументы прямо в конструктор, без создания временных объектов.
Погугли что такое universal reference
Собственно только из за этой штуки форвард и существует
Кстати, а сборщик мусора может в теории удалить объект, к которому ещё можно обратиться? Или там есть какие-то гарантии?
Нет, в языках со сборкой мусора к объектам можно обратиться только через ссылку, а сборщик мусора знает о всех ссылках. Разве что как-нибудь в обход через ансейф узнать настоящий адрес объекта и обращаться к нему напрямую через указатель, о котором сборщик мусора не знает, и от этого могут появиться проблемы. Но ансейф всегда означает отсутствие гарантий, всё надо делать осторожно, на свой страх и риск.
Ну и не всегда можно надеяться, что умный рантайм всё сделает за тебя. Попадались всякие говнолибы, где у некоторых классов был реализован финализатор (аналог деструктора), где делается что-то серьёзное при уничтожении объекта, например, меняются значения полей других объектов, и надо специально где-то придерживать ссылки на объекты таких классов, чтобы финализаторы не вызывались, даже если в своём коде эти объекты не используешь. К примеру, есть что-то такое в библиотеке Tkinter для GUI на питоне, там если не придерживать ссылки на какие-то объекты, приложение может просто взять и сломаться в рандомный момент времени, когда сборщик мусора решит их удалить. В жабе тоже что-то такое попадалось. Это в любом случае не проблема самих сборщиков мусора, а неправильного использования финализаторов.
Плюсы и веб почти не пересекаются друг с другом, и это прекрасно, остался хоть один относительно популярный язык, не зашкваренный вебом. Веб-фреймворков для плюсов хватает, но их никто не спешит юзать.
А при чём тут графика? Я же не OpenGL говорю.
Че за проект?
>001001100000101101110 (input)
>001001100000101101110 (output)
Цифры из примера. Как видно, ожидаемое исправление не было произведено. Впадлу уже разбираться, поэтому решил пукнуть в тред. Хотите отвечайте, хотите нет. В моей так называемой жизни ничего не поменяется.
Если ты лезешь в вулкан то ниже указаное тебе не нужно. Вулкан может вме тоже но лучше.
Но ты ебанешься.
Разебал по факту
>1
как видишь, в конце я все таки написал std::cout два раза по привычке, потому что обычно работаю без using namespace std
argc argv - неиспользуемые параметры. Низя.
Я всегда пишу фигурные скобки, даже если тело цикла или ифа состоит из одной строчки. Дальше не читал
Ох уж эти орочьи проблемы.
Так я и не хохол. Меня 8 лет назад назвали русским. Теперь пришли меня защищать и защитили от воды в кране, стабильного света и интернета и бонусом изолировали меня в моём жилище вот уже на 9 месяцев.
Ну если ты из героев АТО, то могли. Хотя за швабру там сроков дали и зеканы не померли в муках. Цеж не Украина, где можно грабить и убивать рандомных челов, записав их в сэпары.
Ошибка найдена. На 19 строке забыл написать i-1 вместо i.
В C++ (в отличие от C) return EXIT_SUCCESS в main() имплицитен, его компилятор вставит, если ретурна никакого нет
Худеть надо твоей мамаше
пишите в телегу @Criingeeee666
Там майо грозится свой движок писать, даже по ящику про это показывали.
Представляю сколько вышек у меня должно быть и как сильно я должен порвать жопу чтобы вкатиться на 150к
Ну 11-17 могу нормально, 20 50/50. Это норм?
Практически да. Нашел, что initializer_list охуительно удобная хуйня. Ну и возврат this из методов тоже популяризовали в jquery 10-15 лет назад, получается тоже жабаскриптовая хуйня.
Эякулировал
>код на расте
Моя хрень на данный момент работает в браузере (wasm) без затаскивания туда большого рантайма, работает в линуксе под xlib и в винде под win32. В планах Андроид и наверное Яблоки, хотя последние, кажется, сделали всё возможное, чтобы под айфоны никто ничего не программировал.
А ведь в шапку можно добавить Dev-C++ ее обновили таки.
https://github.com/Embarcadero/Dev-Cpp/releases
Маааам, меня зашкварили
Микрогуй. Однажды в Go-треде наткнулся на вопрос на тему как там с WASM в Голанг. Начал гуглить эту тему, хотя на тот момент уже знал, что Го несовместим с сишными либами из-за собственного механизма разметки памяти, поэтому для браузера ему нужно затащить рантайм в несколько мегабайn. Заодно увидел, насколько неудобны существующие гуи, ну те, которые не Webview.
Я привел гипертрофированный пример, чтоб донести, что для скрина на дваче такой код оправдан.
К оупенсорсу не готов пока что. Надо подшлифовать. От всякой работы уже устал открещиваться, поскольку пишу на всём от ассемблера до пайтона. Ну и 40-летний специалист не интересен фирмам, потому что понимает лишнее.
Есть вещи, которые нельзя говорить, можно только намекать Иначе все вкатуны сразу вкатятся. А это ведь никому не нужно. Ну если так косвенно и что называется например. Например, есть популярный (S)FTP(S) клиент FileZilla. Что они сделали. Они воспользовались своим именем и сделали клиент под Android. Самым популярным комментарием под этим приложением от пользователей долгое время был такой: блядь, я повелся на ваше название и думал, что у меня на планшете сейчас будет 2-panes приложение как на компе, а вы просто сделали хуйню с мобильным интерфейсом, как же так?
А донёс только то, что не видишь разницы между
> Впадлу уже разбираться, поэтому решил пукнуть в тред. Хотите отвечайте, хотите нет. В моей так называемой жизни ничего не поменяется.
И
> Двач, срочно выручай, не могу разобраться в примере, а если не разберусь, настанет пиздец.
Нельзя добавлять. Сколько про него не слышал, всегда он был в контексте лаб в вузе, потому что больше на нём никто не пишет. А лабы, как известно, идут нахуй.
Наоборот. Все еще есть очень много того, что не сделано, и, следовательно, можно это сделать. А у новоиспеченных программистов наоборот беда "а что сделать".
Ну например, я пишу цикл на крестах с сишными SIMD-интринсиками, в котором мне в последнюю итерацию надо подставить последний пиксель картинки вместо данных из памяти, которые уже в следующий row изображения вылезают. Есть два варианта, и оба плохие - макросы и инлайны. На этом сразу же срывается внимание программиста, отвлечение на какую-то хуйню, которой требуется еще и своё название, и написана она в другом месте. Намного более красиво было бы расширить синтакс циклов.
Ты давай нормальные вещи советуй, что простой соло программист может создать. А не то, для чего надо иметь батю который работает в комитете.
Я знаю, как сделать, чтобы Rutube нормально работал и стал конкурентом Youtube. Интересно?
Если что-то простое - golang + fyne
Ну может ты охуенно крут, кто знает. Но так, в среднем по деревне , вкатуны в вулкан охуевают.
Ты С++ сначала выучи, ученик.
Никак, надо писать свой обработчик изменения размера и рисовать новую картинку с нуля по пикселям.
Зачем?
Если ты хочешь писать движки - это невозможно впринципе, если у тебя нет миллиардов денег.
Если ты хочешь делать игры - возьми юнити и делай.
Все вкатывание в вулкан обычно заканчивается на прыгающем кубике
Нейросеть.
Если ты про копипасту с отличиями в 3 токенах да двух параметрах, то отвратительно. Если про разметку - вообще прохладно - у каждого попенсорсного проекта свой огород и своё подмножество языка.
>>525226
>40-летний специалист не интересен фирмам, потому что понимает лишнее
Это какая-то рефлексия? Или тебе нужна позиция не ниже CTO?
Да почему?
>>525286
Ну на плюсах всё пишется дольше. Зато пока треугольник отрисуешь - уже какие-то вещи "на железе" начнёшь понимать, так ведь?
>>525297
Не, игры меня не особо интересуют. Я на перспективу в основно. Я параллельно машобом занимаюсь, а тут как раз вычисления на гпу, вот глядишь напишу сильный ии, а вычисления на чём запускать? Ну или там 3D голограмы в обозримом будущем появятся, а я уже умею красоту делать, да ещё и в 300 fps.
>так ведь
Nyet. Это всего лишь графический API, абстракция. К железу намного ближе CUDA.
>а вычисления на чём запускать?
Ну точно не в вулкане. Опять же OpenCL/CUDA, SYCL, TBB, OpenMP/MPI.
Ну хз, для вкатунов, довольно удобен вроде.
Могу ли я использовать Qt4 для коммерческого проекта, без покупки лицензии?
Какая-то шиза. OpenCL фактически мёртв, как и OpenGL, по факту на стадии maintenance-only, всё теперь на Вулкане. В том числе и поддержка тензоров только у Вулкана есть нормальная.
> TBB, OpenMP/MPI
Это вообще не понятно зачем ты высрал в контексте вычислений на GPU.
>>525447
Нет. Никогда не используй проприетарные библиотеки под непонятными лицензиями - они могут легко поменяться в новых релизах. Тем более qt, он только в опенсорсе бесплатен, за всё остальное плати.
Очень печально, надеялся, что получится без этой мозгоебли с лицензиями.
Можешь юзать хоть в ебически проприетарном коммерческом проекте абсолютно бесплатно и без открытия исходников, только линковать надо динамически. Статически линковать запрещает лицензия.
std::vector<int> ass(10, 0)?
Почему нужно костылять через std::vector<int> ass = std::vector<int>(10, 0) или в конструкторе это делать?
Пиздец, обожаю кресты. И как заинициализировать тогда? Как я написал? Алсо сам дегенерат.
> в конструкторе это делать?
Никогда не делай простую инициализацию значением в конструкторе. Либо через список инициализации конструктора, либо на месте скобками/присваиванием. А то можешь получить двойную инициализацию полей - сначала дэфолтным конструктором, потом второй раз руками в конструкторе.
В нвидию вкачусь, или союзмультфильм на крайняк.
{
return S();
}
const S& foo()
{
return S();
}
Почему это UB, если ссылки продлевают жизнь временных объектов, я не понимат!
Потому что вся наша жизнь UB. Смирись с этим.
А кто тебя накажет, если ты будешь делать коммерческий продукт с нелицензионным Qt?
Ну так то зависит от масштабов. Если ты в условном рф на локальном уровне будешь продавать готовое закрытле по, то никто нихера не сделает. А вот если на мировом уровне, то да.
Учи, полезно как практически, так и академически.
Может оказаться проще сначала покрутить опенгл, потом много знакомого встречаешь и как-то поплавнее получается вкатиться.
>>525408
Этот даже в руках не держал няшный вулканчик и че-то подпёздывает ещё.
>>525452
>>525470
А вот эти респектабельные молодые люди что-то в этой жизни понимают.
После ебли с opengl-ами и всякими cuda-ми, vulkan как свежий глоток воздуха и спасение для всех, кто плотно ебется с gpu, как с графоном, так и с compute-ом.
Мечтаю, чтоб он вынес нахуй dx12 и ебучую cuda, оставшись единственным api для возни с видимокартами.
>Мечтаю, чтоб он вынес нахуй dx12 и ебучую cuda
Влажность превысила 100%
Победит тот, у кого бабла больше NVIDIA.
400x230, 1:21
И вот собственно три пути:
1. Qt. Его пеинтер явно побольше методов имеет, да и накладных расходов меньше. Лицензия есть.
2. Использовать вебоговно, связка типа нода + какой-нибудь вебгл + кастомный юдп протокол (протобуф нахуй идёт). Мне такой подход нравится, так как потом эту технологическую софтину можно куда-то в релиз пихнуть, нравится сервисность, что моя явно серверная программа будет иметь технологический сокет. Но проблема, что у меня в вебе опыта где-то две недели, и хз насчёт технологий и оптимизаций, из чего клепать прожечку.
3. Остаться на SFML, но блин я вообще не вижу развития, библиотека будто бы мертвая
Сыграл в игру которая шла на жизнь получается
Там додики по треду.
Хронос выстрелил потому что там олдовые сишники, а не вмякая гниль.
И нвидия там од н из основных учасников.
Везде где впжна производительность вулкан аытеснит все остальное.
А то я открыл исходники ffmpeg, а там 100500 файлов.
У плюсов есть забавная особенность
Чем лучше написан код, тем неяитаемее он
Буст и стл прямой пример такого
Но можешь какие то опенсорснве проектики погуглить + реализации каких то простых штук, как те же контейнеры
Нет такого. Все небольшие полезные утилиты без 100500 файлов написаны на сях
Как искать книги на либгене? Нахера Страуструп назвал язык C++? Нихера не гуглится, потому что поисковики считают C++ за 1 символ, ++ не воспринимают. Кавычки не помогают. Даже по запросу Go выдает результат. Есть идеи?
Вопрос собсно в чем: как в схожих системах, например, компьютерных играх, делается приближенный к рилтайму event pool с диспетчеризацией функций до миллисекунды? Ничего умнее пускать один поток в while(true) не приходит на ум, далее в коде, через precision_clock, проверять дельты. Ядро будет долбиться в сотку, что позволительно.
Либы типа ASIO, которые имеют epoll под капотом, имеют функции задержки на таймерах с временем до наносекунд, но никто не гарантирует, что вызов будет через заданное время, вызов будет не ранее чем через указанный промежуток, что связано, как я понимаю, с диспетчеризацией процессов в ОС. В интернете рекомендуют ориентироваться на время в 5мс.
К слову, выдача данных от устройства буферизирована, и как раз ориентирована ~5 мс.
Анон, как корректно делать? Что почитать? Считаю, что без QNX задача решаема, QNX блядь еболу имеет с драйверами.
>Искать по другим словам, которые есть в названиях книги.
Надо же знать название. Искать сначала в Амазоне? Там не все опубликованные книги встречаются, например книги с leanpub отсутствуют. По leanpub конечно можно на их сайте искать. Тогда сформулирую вопрос по другому. Есть место, где можно искать все опубликованные когда либо книги, включая новые конечно? Google Books не вариант, там даже нельзя упорядочить по году или другим параметрам.
GDI+
Кто знает что с курсом от Яндекса "Искусство разработки на современном c++"? С курсеры выпилили, а куда выложили непонятно.
Нет 5 курса. К 1-4 курсам нет заданий. Неужели Яндекс забил на курс, который разрабатывал несколько лет? Должны же были куда то выложить. Есть же Openedu, Stepik и другие платформы.
Хочешь знать моё мнение? Яндекс идёт нахуй, качаешь книгу и не выёбываешься. Курс всё равно душнина сплошная, ничего не потеряешь.
Похоже без костылей с шарпом не обойтись
https://stackoverflow.com/questions/23314886/get-cpu-temperature
>Похоже без костылей с шарпом не обойтись
Зачем? Доки правда немного запутанные.
https://learn.microsoft.com/ru-ru/cpp/?view=msvc-170
https://learn.microsoft.com/ru-ru/cpp/windows/overview-of-windows-programming-in-cpp?view=msvc-170
Ни разу не писал на шарпе.
Так там и ругаются, что родное апи не работает. Приходится использовать стороннее по, а оно на шарпе.
>Так там и ругаются, что родное апи не работает.
Где там и кто ругается? Может оно немного легаси, но сомневаюсь, что его выпилили. Честно говоря, с виндовыми апи дела не имел, но точно знаю, что их там дохера накопилось за все годы и похоже ничего не выпиливают.
Пробуй через .NET. Вероятно он имеет какое то апи для C++.
https://learn.microsoft.com/en-us/cpp/dotnet/dotnet-programming-with-cpp-cli-visual-cpp?view=msvc-170
Но ведь сторонее по написано с использованием каких-то родных функций. Может быть NT...
Тебе не кажется, ты реально нихуя не знаешь, лол. Основной способ нормально что-то узнать - поРАБотать с этим на РАБотке
паста-про-препода-компилирующего-в-голове-которому-переполнили-буфер.txt
КОМПИЛИРУЕШЬ В ГОЛОВЕ
@
НАТЫКАЕШЬСЯ НА ОПЕЧАТКУ В ШАБЛОННОМ ШАБЛОНЕ ШАБЛОНА КЛАССА
@
СОЗНАНИЕ НАЧИНАЕТ ЗАПОЛНЯТЬ БЕСКОНЕЧНЫЙ ПОТОК СООБЩЕНИЙ ОБ ОШИБКАХ И ТРЕУГОЛЬНЫХ СКОБОЧЕК
@
ЖИДКО ПЕРНУВ УМИРАЕШ ОТ INTERNAL COMPILER ERROR
Я ровно поэтому и написал "мечтаю".
Ещё бы яблочные черти выкинули свой metal, тоже было бы прекрасно. хоть moltenVK неплохо работает, и на этом спасибо
Есть код на плюсах с mpi+omp (решение уравнения Пуассона). Насколько тяжко это переписать под mpi+cuda?
Ни разу cuda не видел. Можете че нить посоветовать для быстровката?
Почему арифметические операции с переменными не перенести в компил-тайм?
1. Forward declaration.
И у тебя на картинке нет операций с объектом незавершенного типа, только объявление указателя на него. Что кстате порождает новый самостоятельный тип.
2. Потому что они перемениваются.
>Как называется эта болезнь, когда мы может проводить операции с нигде не определенным, несуществующим классом как ни в чем не бывало?
Покажи где ты с классом операции проводишь
>Почему арифметические операции с переменными не перенести в компил-тайм?
Чиво блядь?
Чел тебе уже ответили но я добпвлю.ты очень глупый. Даже свои три строки не понимаешь.
Что мешает компилятору вместо a+b подставить 5 на этапе компиляции? Это локальные переменные, в других единицах трансляции использованы не будут, внутри функции тоже больше не используется.
Если там будет const, то подставит чому бы и нет? А если не конст, то и не должен, потому что я могу ее неявно изменить
Ладно, я наебал мб. В тупых примерах компилятор реально берет и подставляет, но я думал я смогу как то хитро изъебнуться с памятью, да так, что компилятор это проверить не сможет, поэтому предпочтет не подставлять во время компиляции значения. Хз, можно ли так, сходу сейчас не скажу
map<int, pair<int,int>> map_obj;
pair<int,int> pair_obj = {1,1};
map_obj[1] = pair_obj;
чтобы получилось что-то такое:
map<int, pair<int,int>> map_obj;
map_obj[1] =this.first(1).second(1);
То, что между инициализацией и коутом может быть что угодно, а не только пустая строчка.
Алсо, коут - это никак не этап компиляции.
пора спать, совсем забыл про std::make_pair (T,T)
ты студентик или работаешь уже, а? как вас таких убогих на работку то берут?
че, лошара, не знаешь как организовать базовый ввод-вывод, хоть синхронный, хоть асинхронный и придумываешь какие то охуительные велосипеды с "while(true) и ядро будет долбится в сотку"
ты в универе курс "операционные системы" проходил, уебок? че, не знаешь как там ввод-вывод организован чтоли?
окей, хуесос, набери в гугле "синхронный асинхронный ввод вывод linux" и читай википедию
все равно ты ничего не найдешь, работы нет, и не будет
хочешь денег - идешь в окоп под бахмутом за 240 тр в месяц
сдохни
>Почему бы не оптимизировать на этапе компиляции аргумент метода?
Потому что это не то, что чел реквестил в начале.
>Почему арифметические операции с переменными не перенести в компил-тайм?
Арифметические операции с переменными, а не частные случаи, когда и переменная-то избыточна.
Самому трогать это поделие и очередного "убийцу" Си у меня нет времени, но при этом новости об этом языке достают меня даже в танке(например, принятие раста в ядро Линукс). Все бы ничего, но эта всеобщая атмосфера самоподсоса вокруг языка и потужные форсы т.н. превосходства ВО ВСЕМ вызывают у меня какое-то подозрение. Я не нашел ни одной статьи с разбором языка, вызде какие-то фанатичные текста с общими и идеалистическими аргументами в духе "ПИЗЖЕ ЧЕМ БЫЛО, just trust me bro". Никто там денег этой херни на рекламу не закинул? Или это очередной форс к смузихлебов как это было с Руби, Элексиром и прочими?
Братан, если оно тебе нахуй не надо, то зачем ты вобще лезешь?
Вас самих не заебало всё обмусоливать из раза в раз?
>Братан, если оно тебе нахуй не надо, то зачем ты вобще лезешь?
Ответ на это в первом посте есть.
>Вас самих не заебало всё обмусоливать из раза в раз?
Кого вам? Я здесь один нахуй. Раньше мне было похуй, но потом поддерку сабжа добавили в ядро Линукса. Я про себя подумал "Нихуя себе историческое событие, второй язык в ядре" и пошел читать интернеты, чтобы понять, что это за ягода. Пролистав 5 страниц гугла, я кроме самоподсоса ничего не нашел.
>Ответ на это в первом посте есть.
У тебя даже нету времени этот язык потрогать, зачем тебе еще что то знать о нём?
Если сравнивать с Си, то всё верно говорят - Раст его выебал во все щели. Но судя по твоему шизоидному тексту ты пришёл сюда за тем чтобы тебя успокоили и рассказали какое говно Раст. С этим тебе только таблетки помогут.
>Узнал о языке Х
>пошел гуглить
>не нашел никакой конкретики, критики и ничего кроме хуйни от маркетологов
>"Пацаны, что за хуйня? Что почитать, чтобы ознакомиться и не потерять много времени?"
>"РЯЯЯЯ ВСЕ СОСНУЛИ, РАСТ ЛУЧШИЙ"
Ок.
> не нашел никакой конкретики
А искал? В документации вся конкретика описана. Что ты ещё хочешь? Чтоб тебе разжевали почему были сделаны конкретные решения в дизайне языка и доказать что они верные?
https://www.youtube.com/watch?v=xqMycrfHQzc
Твой пробивальник? Хуйню порет, у раста куча плюсов, но он всё напиздел. Кто не может осилить ручной менеджмент памяти будет и в расте баги писать, только теперь из-за дремучего кода лесенками и ансейфа.
Про легаси вообще кринж - у раста уже гора легаси, которое переписывают не дописав старое. Это один из главных минусов раста - наглухо ебанутое комьюнити, пишущее код для красоты, а не чтоб он просто работал.
Написал код, но хуй не стоит? Решение есть - надо переписывать.
А как ним этим пользоваться? Никак, мы тут пишем идиоматичный и безопасный код, а не рабочий софт.
Алсо, я, к сожаления, сам такой же шиз. Весь рабочий софт был написан на отъебись, весь хорошо написанный код никогда не доводил до релизного состояния.
Да, шаред_птр.
>Твой пробивальник?
Просто это первое, что вышло на youtube, когда вбил rust. И всё, что он сказал, мне показалось надуманной хуйнёй.
В справке асио везде фигурирует, что объекты в колбэках должны существовать, поэтому у них паттерн есть буферы и респонзы держать как аргумент класса
Пример с асио и шаредптр - chat или как-то так
Спасибо
контейнер map, содержащий ключ-строку и data-pair, состоящая из объекта-fanction и указателя на переменную(типа double)
std::map<std::string, std::pair<std::function <double(Calc,double&,double&)>,double>> Function_Name;
вопрос - как из функции правильно обратиться ко второму значению pair? при вызове этой функции из объекта-function из контейнера
добавить в принимаемые параметры функции итератор на саму-себя в контейнере, да?
Потому что sizeof() вернёт размер массива только тогда, когда он определён в этой же функции. При передаче в другую функцию он считается указателем, на твоей системе размер указателя равен 4. Будто передал char *data.
https://www.geeksforgeeks.org/using-sizof-operator-with-array-paratmeters-in-c/
Просто не используй сишные массивы, используй STL.
Вот ты пидорасина тупая. У тебя каждый вызов этого говна - отдельная функция. Про скорость можно даже не вспоминать, она действительно будет равна питоновской.
Не говоря о перформансе, надо как минимум добавить необязательный параметр для потока, чтобы можно было принтить в файл или поток ошибок, и ещё нужен необязательный флаг flush.
Ну принт()(...) Выглядит само по себе не оч
Попробуй оператор статистическим сделать, или просто сделай функцию
Сделай чтобы можно было любой ostream в функцию пихать
Потом посмотри как это можно без cout сделать, ну или хотя бы сделай вторую версию и для себя сделай бенчмарк что быстрее будет
Потом как все это сделаешь, попробуй форматирование добавить, или хотя бы посмотри как оно делается
Чтобы можно было писать fprint("hello, {}", "anon");
Мэмори сейфти + отсутствие garbage collector + упор на безопасность
Ну а ещё хорошие инструменты для разработки, ахуенные макросы, более крутая система типов
В итоге:
- для петов идеально
- для прода со скрипом
про безопасность актуалочка: https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html
Вот хороший сайт про Раст на русском: rustrus.ru
> про безопасность актуалочка
Самое забавное, что подобная хуйня только у Гугла. Пишут на Си с классами, а потом удивляются откуда дыры и ищут оправдания. При этом реально критические баги, позволяющие обойти все защиты без спецсредств - в жаба-коде.
Пограмирую микроконтроллер, который должен выдавать текст на экраны по I2c. Всего экранов 16 штук.
Заказал пикрелейтед 2 шт. для на чала.
После пары часов ебли выяснилось, что у них 2 разные микросхемы. У одной адрес начинается с 0x40 (и далее до 0x4E), а у другой с 0x70 (и до 0x7E).
Я так понял, что прислать могут тупо рандомные как повезет. А мне надо чтобы было 8 одних и 8 других, либо 8 одних и тех же, чтобы я их тупо параллельно воткнул по 2 на 1 адрес.
Короче как поступить? И как в цикле обработать адреса, если мне к примеру придет 4 штук первого типа и 12 штук второго типа? Или там 11 штук первого и 5 штук второго?
Пиздец бошка кипит от этой хуйни.
>0x40 (и далее до 0x4E)
Поясню немного
0x40=0b01000000
Адрес задается 3 битами, выделенными жирным.
0x70=0b01110000
Здесь так же, но старшие биты другие.
Вообще ты должен ебать поставщика, но как выход используй калибровочную прогу в начале для сопоставления смещений к физическим устройствам, если это возможно канеш...
Жаль ты не в Гугле, быстро бы дядям объяснил как код следует писать
Сколько у них человек над кодом работают? Пару тысяч?
Если ты порвался с "си с классами", то их за это все кому не лень обоссывают. Посмотри хотя бы на тот же код Ведра - сплошное вырвиглазное легаси, про то что существует С++11 там услышали только через 10 лет после его появления. И дело не в кодерах, а в том что престарелые олдфаги из верхов гугла решили заставить всех писать в легаси-стиле. А потом выяснилось что, тех кого понабрали, не могут писать в таком стиле как эти деды и не косячить. И теперь "пук-среньк понимаете кресты дырявые, мы не виноваты", хотя огромное количество компаний пишут на крестах и не имеют таких проблем с дырами - даже у индусов из Майкрософта не так всё плохо в плане безопасности.
Но си с классами это литерали лучший язык программирования евер.
А проблема в
> А потом выяснилось что, тех кого понабрали, не могут писать в таком стиле
говнокодерах
О гугле столько подобной инфы, что сами разрабы из гугла в ахуе.
Антонио, посоветуй графический интерфайс под цпп. QT как я понял заставляет скачивать их хуйню с сайта и в общем оно мне не надо. Есть норм аналоги кт, но без всего этого? Нужно для пет проекта
Не так. От относительного времени да, от абсолютного нет. Так что поебать. Хотя в дектопе вообще все так себе, это же не реалтайм.
в не-реалтайм системе, у тебя просто юзер по NTP раз в год системное время обновит и время назад пошло, охуенно. Хоть как ты его считай.
Предполагаю, что в процах х86, подобно как и в арм кортекс, есть систем клок, зависящий от системной частоты. Его точность определяется кварцем, который явно точнее rc цепочки, ещё и стабилизирован по температуре. Также предположу, что десктопные прлцы с учётом своего переменного энергопотребления, учитывают снижение частоты.
От этой частоты и берется системное precision время в секундной размерности. Предположу, что точность где-то на уровне пикосекунд.
Понятное дело, что реальное время, которое мы синхроним по НТП, будет отличаться от системного из-за как минимум разных частотных доменов, а ещё учитываем, что сервера по НТП имеют в качестве базы атомные часы, которые точнее кварца, так ещё учёные периодически подводки делают на секунду.
хай-прецизион-клок отлично использовать в качестве дельты времени с отличной точностью, но грубо говоря в пределах суток, отсчитывать по ним год работы нельзя, необходимо иметь синхру, хотя бы по GPS.
Спасибки❤️
Ресурсы для тебя кто распределяет?
Кто процессы твои переключает?
Процессор ничего о файлах, сетевых ресурсах, процессах и тды не знает
А что по твоему должен сделать мутех тогда?
recursive_mutex в помощь
Чтобы жизнь мёдом не казалась.
Большая свобода - большая ответственность. Ну и проблема теоретически не решаема, если работаешь на "низком уровне". Даже в Ada какой-то недоГЦ встроен.
Расстреливать в первую очередь надо пидоров, которые осознанно допускают UB, якобы у них "всё работает".
Всякие нагугленные статьи из интернета и лекции на ютубе для студентиков. И конкретно Финогенов К.Г. win32 основы программирования, где в главе про архитектуру он кидал тейки как на пике про то, что говнокод обрабатывает прежде всего процессор, от чего у меня случилась фрустрация.
Ну собственно по-другому быть и не может, потому что ось - это всего лишь набор команд в оперативной памяти, а не волшебная оболочка над железом.
Такие фрустрации, переворачивающие все с ног на голову, по мере изучению плюсов у меня случаются иногда. Например, долгое время я думал, что выражение int x; это просто объявление, а чтобы определить надо добавить инициализатор int x = 5; Ебало представили? Так я понял смысл слова extern, подробно изучил ODR и разобрался для чего в современных плюсах нужен inline.
Конкретно это книгу надо читать, если уже знаешь более-менее плюсы, но вообще не понимаешь winAPI и хочешь разобраться.
В блокноте надо написать 'Hello world!'. Сделал вот такую конструкцию:
string slovo = "Hello world!";
for (int i = 0; i <= slovo.length(); i++)
{
cout << slovo << "\n";
keybd_event(slovo, 0, 0, 0);
keybd_event(slovo, 0, KEYEVENTF_KEYUP, 0);
}
В консоли все печатается как надо, но в блокноте печатается номер элемента. Как букву то напечатать? Т_Т
Чтт значит в блокноте? Если в файле то старый добрый фпринтф.
Ты идиот или прикидываешься?
потомучто в class Class {
...
};
все, что между фигурными скобками это особый контекст - контекст определения класса.
Точно так же внутри этого контекста но вне какого-либо метода ты не можешь написать какой нибудь for (int i; ...) или if(flag).
Тело класса вообще не является выполняемым кодом программы.
>>532266
В данном случае тип параметров не определен (не указан), о чем компилятор тебе и скажет.
Чтобы обходить ODR очевидно.
Бляха муха, возьми да попробуй скомпилировать.
Конкретно этот - метод, записанный с ошибками.
Так гсс 12.2 последняя. 13 очевидно альфа бетта какая то
допустим есть коллекция boost::base_collection, элементы которой необходимо модифицировать, как это правильно сделать?
Первая итерация - создать новую коллекцию, и извлекая элементы из старой конструировать новые, но тогда необходимо матчить между собой типы, ходят слухи что так делать не надо.
Вообще как правильно сравнивать типы и можно на таком строить логику?
https://godbolt.org/z/YEchndKzq
я в примере использую is_base_of_v, но проблема в другом.
при работе с boost::base_collection, я получаю base&, мне надо какой именно это derived. Возможно надо по-другому логику строить, но как тогда?
https://godbolt.org/z/an4d9z4Kh
class A
class B:A
class C
class D:C
имея A& необходимо сконструировать D, если A& это B.
ветка
if constexpr(std::is_same_v<A&, B>)
всегда false.
Технически верно, это ведь не совспм одно и то же. Попробуй свой из сейм в гаписать, не такой жесткий.
Такое только в динамике проверить можно
Как в статике компилятор проверит, что у тебя под референсом лежит?
Только динамик каст
пробовал
https://godbolt.org/z/a53796d8Y
если раскомментить 46 строчку, видно, что там тип A всегда
>>534706
то есть переводить в указатель и проверять на через каст к определяемому типу?
С каких хуев это на производительности скажется?
Анон, а те, кто думают, что знают, не знают ещё больше. С++ хороший пример эффекта Даннинга-Крюгера.
Я тоже не знаю C++ спустя 6 лет разработки, периодически делая прошивки на Си под микроконтроллеры. Каждую неделю узнаю что-то новое.
Можно к указатель не кастовать, динамик каст умеет в референсы
Аноны, поясните за std::barrier
Если в 33 строчке заменить arrive_and_drop на arrive_and_wait, то программа зависнет в ожидании.
Не понял с этими фазами барьеров и счётчиками внутри него.
С ChatGPT пообщался небось?
Как вообще "правильно" и оптимально считать бинарник, чтобы потом инфой манипулировать? В файле много блоков одиннаковой структуры, которые еще zlib'ом распаковать надо и понадобится возможность фильтровать/сортировать их.
Что использовать под буфером, какой размер выбрать и тип? char? uint8_t? В моем случае файлы 100кб-1,5мб.
Первая идея описать блоки в файле структурами и заполнять их. reinterpret_cast массив байтов к нужной нам структуре и после копирования можно пользоваться. Структуры правильно заполнялись, и тут подумал изучить вопрос UB.
Тут обсуждались примеры, похожие с моими, только я структуры на стеке держу (это пока) (пик1, пик2):
https://youtu.be/_qzMpk-22cc?t=1278
https://youtu.be/_qzMpk-22cc?t=1452
В Си, кстати, второй пример с malloc валидный и не UB.
Код:
https://pastebin.com/bUJ7zXpX
https://gcc.godbolt.org/z/KhjaqqMa9
struct Header_t {
uint32_t field1;
uint16_t field2;
uint16_t field3;
};
std::ifstream file("abu.bin", std::ios::in | std::ios::binary);
std::streampos fileSize = 0x12345; // placeholder
std::vector<uint8_t> buf(fileSize);
uint8_t⚹ pBuf = buf.data();
file.read(reinterpret_cast<char⚹>(pBuf), fileSize); // (1)
Header_t header;
header = ⚹reinterpret_cast<Header_t>⚹>(pBuf); // (2)
// ^ v одно и тоже по стандарту и в листинге
header = ⚹static_cast<Header_t⚹>(static_cast<void⚹>(pBuf)); // (3)
std::memcpy(&header, pBuf, sizeof(Header_t)); // (4)
header = ⚹std::bit_cast<Header_t⚹>(pBuf); // (5) C++20
static_assert(std::is_trivial_v<Header_t> &&
std::is_standard_layout_v<Header_t>);
Ассерт оставил, потому что сначала я хотел от Header_t наследоваться в некоторых структурах (сабхедер, например), но такие структуры не являлись standard layout, хоть и заполнялись правильно (на винде). Как я понял, стандарт не гарантирует расположение base структур. Придется явно указывать вложенные структуры или есть еще более удобный способ?
Теперь, как думаете, где здесь UB? Изучив сноски стандарта и десяток вопросов на стаковерфлоу мое мнение такое:
1) read только char* принимает, думаю не UB, т.к. мы просто заполняем буфер.
2) и 3) одно и тоже по стандарту. Как я понял сам каст не UB, но когда происходит обращение (access) через ⚹ это UB.
4) не UB. Но нужно, чтобы src и dst был trivial copyable и POD (standard layout возможно не прав).
5) не UB. Внутри memcpy, но с проверками. Все проверки делает через шаблоны, возможно создает временный объект внутри и возвращает (в реализации на cppreference так)
Все варианты правильно работают (на винде). Оптимизируются до 1-3 mov gcc, clang, msvc (но это не точно). Не смог дать понять компилятору, чтобы не выкидывал структуру/копирование при -O3 или /O2 в msvc.
Как вообще "правильно" и оптимально считать бинарник, чтобы потом инфой манипулировать? В файле много блоков одиннаковой структуры, которые еще zlib'ом распаковать надо и понадобится возможность фильтровать/сортировать их.
Что использовать под буфером, какой размер выбрать и тип? char? uint8_t? В моем случае файлы 100кб-1,5мб.
Первая идея описать блоки в файле структурами и заполнять их. reinterpret_cast массив байтов к нужной нам структуре и после копирования можно пользоваться. Структуры правильно заполнялись, и тут подумал изучить вопрос UB.
Тут обсуждались примеры, похожие с моими, только я структуры на стеке держу (это пока) (пик1, пик2):
https://youtu.be/_qzMpk-22cc?t=1278
https://youtu.be/_qzMpk-22cc?t=1452
В Си, кстати, второй пример с malloc валидный и не UB.
Код:
https://pastebin.com/bUJ7zXpX
https://gcc.godbolt.org/z/KhjaqqMa9
struct Header_t {
uint32_t field1;
uint16_t field2;
uint16_t field3;
};
std::ifstream file("abu.bin", std::ios::in | std::ios::binary);
std::streampos fileSize = 0x12345; // placeholder
std::vector<uint8_t> buf(fileSize);
uint8_t⚹ pBuf = buf.data();
file.read(reinterpret_cast<char⚹>(pBuf), fileSize); // (1)
Header_t header;
header = ⚹reinterpret_cast<Header_t>⚹>(pBuf); // (2)
// ^ v одно и тоже по стандарту и в листинге
header = ⚹static_cast<Header_t⚹>(static_cast<void⚹>(pBuf)); // (3)
std::memcpy(&header, pBuf, sizeof(Header_t)); // (4)
header = ⚹std::bit_cast<Header_t⚹>(pBuf); // (5) C++20
static_assert(std::is_trivial_v<Header_t> &&
std::is_standard_layout_v<Header_t>);
Ассерт оставил, потому что сначала я хотел от Header_t наследоваться в некоторых структурах (сабхедер, например), но такие структуры не являлись standard layout, хоть и заполнялись правильно (на винде). Как я понял, стандарт не гарантирует расположение base структур. Придется явно указывать вложенные структуры или есть еще более удобный способ?
Теперь, как думаете, где здесь UB? Изучив сноски стандарта и десяток вопросов на стаковерфлоу мое мнение такое:
1) read только char* принимает, думаю не UB, т.к. мы просто заполняем буфер.
2) и 3) одно и тоже по стандарту. Как я понял сам каст не UB, но когда происходит обращение (access) через ⚹ это UB.
4) не UB. Но нужно, чтобы src и dst был trivial copyable и POD (standard layout возможно не прав).
5) не UB. Внутри memcpy, но с проверками. Все проверки делает через шаблоны, возможно создает временный объект внутри и возвращает (в реализации на cppreference так)
Все варианты правильно работают (на винде). Оптимизируются до 1-3 mov gcc, clang, msvc (но это не точно). Не смог дать понять компилятору, чтобы не выкидывал структуру/копирование при -O3 или /O2 в msvc.
Ну и прочая UB хуйня, которую никто в здравом уме не будет писать в прод.
Вообще, удивительно, что никто не спрашивал про argument-dependent lookup или про value categories.
Про шаблоны тоже 0 вопросов. Видимо, в 2к22 все ещё пишут на C с классами.
деструктор неявно noexcept, поэтому будет terminate
можешь руками сказать noexcept(false), тогда можно будет ловить
такое знаешь, если ты шалунишка и разок пробовал это сделать, но я думаю, что такое нет смысла спрашивать -- ни о чём такое знание не говорит
Просто прога завершится. Нельзя два исключения в один момент времени выбрасывать
На C с классами.
Гугл покрывает далеко не все предметные области. И из того, что он покрывает, далеко не все он пишет на спп с классами или без.
> Что будет если деструктор бросает исключения во время разрушения другим исключением?
> weak_ptr, оказывается, в стандарте с 11-го.
На самом деле базовые вопросы. Скажи спасибо, что не заставили писать примерную реализацию самого этого weak_ptr вместе с shared_ptr.
>>536029
> Про шаблоны тоже 0 вопросов.
> value categories
Вообще странно, да. Может пидарас собеседующий сам не шарит в шаблонах и этих ваших xvalue.
>про argument-dependent lookup
Просто удобная фича языка, зачем про нее спрашивать.
>Ну и прочая UB хуйня, которую никто в здравом уме не будет писать в прод.
А я щитаю, про UB надо спрашивать, чтобы убедиться, что потенциальный кандидат это самое UB тащить в прод не будет.
> На самом деле базовые вопросы. Скажи спасибо, что не заставили писать примерную реализацию самого этого weak_ptr вместе с shared_ptr.
Меня в яндексе на бумажке заставили. И я, блять, даже написал.
ру
А зачем вкатывался? После института не знал куда пойти и пошел в дефолтные кресты, потому что помнил что-то с первых курсов?
во фронт ебаный. Будешь заниматься полным говном, но денег насыпят
Как я понял weak_ptr нужен только для многпоточной среды, чтоб у тебя не произошло удаление объекта в момент когда кто-то в другом потоке с ним работает. В остальных же ситуациях достаточно .get() и сишных указателей.
Чел, хр используют например банкоматы до сих пор.
На некровинде надо не выёбываться и юзать некроплюсы. Ну или делфи или Visual Basic 6.
Да.
С trivial переменными B и C все понятно, memory reordering и все такое, поэтому чтобы первый assert гарантированно не вылетал их оборачиваем в std::atomic. Но вот стринговая A как-бы совсем не trivial, и че с ней делать как-бы и не очень то и понятно. Хотя конечно понятно, что под капотом std::string этой просто набор опять же trivial переменных, и присвоение значения стрингу - это тупо последовательность присвоений этим же переменным каких-то значений, и теоретически для них свойственна та же проблема с memory reordering-ом что и для B и C, что собственно означает, что второй ассерт таки будет вылетать. Так вот вопрос - как принято решеать пободную проблему? Есть у меня подозрение, что нужно использовать std::atomic_thread_fence, но чет я не уверен.
Обернуть в std::atomic<string*>
Когда закончил все манипуляции над строкой, поменял указатель на новую строку
Объект, связанный с ссылкой, удаляется при её выходе из области видимости. Если его надо сохранить, хуй ты это сделаешь через ссылки.
Но вынужден жрать ебучую жабу.
Для совместимости с сями.
Решил. Я же программист с++ как ни как. Без вас справлюсь
Каким образом разрабатывать приложение модульно?
Допустим есть 2 модуля: модуль парсер, модуль обработка. Насколько понимаю, парсер совсем не должен ничего знать о модуле обработка, но вот модуль обработки может включать в себя хедер парсера. Таким образом по принципу водопада получается. Следующие модули должны "знать" о предыдущих, но не наоборот?
В такой постановке разработчик модуля обработка зависит от разработчика модуля парсера и постоянно его торопит. Независимой разработки модулей не получается. Или модуль разработчик парсера должен по-быстрому накидать хэдэр и отдать разработчику модуля обработки?
И еще вопрос, допустим в модуле парсер используются тип 1, который в модуле обработки преобразуется в тип 2. Есть несколько вариантов.
Первый - оставить "хвост" в типе 1 о его преобразовании в тип 2, тогда надо перевязать модули хэдэрами.
Второй вариант - в модуле обработки включить хэдэр парсера и в лоб кастить типы парсера в типы обработки.
Не пойму, зачем в обработчике хедер парсера. В чем проблема, писать их независимо, но совместимо? А общие типы и реализации преобразований типов - в отдельный модуль. В чем я неправ?
Ну там новый софт с гуем не на электроне, а на сасном imgui, линуксовые модули всякие, полупрозрачные ИИ-тян, фирмварь всякая не на жс или питоне и вот это вот всё.
Рад за тебя дурачек, но мне надо как-то зарабатывать на заказах, где требуют "собрать приложение".
Это раньше так было, когда рефенмв были просто способом параметры в функцию передать
А в 2022 это семантический монстр, который не понятно что такое, что аж референс врапер пришлось изобретать
На полноценной тоже cmake чаще всего требуется.
Парсер строит синтаксическое дерево из структур, типы которых потом нужно знать в обработчике.
Допустим,
struct Ast::Solid({colour}, {mass})
В обработчике необходимо скомпоновать данные в матрицу
struct Tcx::Solid(Ast::Solid){matrix={colour,mass}}
поэтому необходимо в обработчике знать типы парсера.
Это второй вариант.
Первый вариант это добавить метод структуру парсера
struct Ast::Solid({colour}, {mass}), Ttx::Solid asSolid (){}
вроде хвоста, который буду в обработчике дергать.
Теперь в хэдэре парсера необходимо знать типы обработчика.
Какой вариант построения архитектуры верный?
не пойду, у меня дохуя времени есть, которое свободно от ебли с красноглазой обоссаной системой сборки
Просто миллион вариантов как назвать функцию что копировала бы обьект: copy, clone и тд
НО НАЗВАЛИ AUTO
фича с c++23, decay copy
Похуй+похуй
Имхо, лучший пет проект - это чат.
Потому-что его можно постоянно улучшать и дописывать, чтобы в итоге получить некое подобие телеграма\аськи и тд.
И потрогать дохуя всего - базы данных, сеть, гуй, шифрование
как? а никак
никаких "двух разработчиков" нет
ядро пишет всегда все один человек на проекте а остальные просто имитируют деятельность в худшем случае, а в лучшем случае делают всякие обвязки и интерфейсы и прочее
в игрострое пишут "новые" игры
а так да
в энтерпрайзе кресты мертвы по понятной причине (сугубо технической)
в микроэлектронике, в устройствах и прочем подобном на си пишут до сих пор и не собираются на кресты переходить
ну и так далее
кресты сегодня это эзотерический язык программирования, чисто для развлечения
>полноценную работу
чистить снег на улицах или говно в толчке "вкусно-и-точка"
ах да, еще можно поехать на украину убивать хохлов за безумные 240 тыщ рублей!
>Объект, связанный с ссылкой, удаляется при её выходе из области видимости.
неправильно понимаешь, исправляйся
в си все параметры функций передавались по значению
если хотел передать "по ссылке" то нужно было делать параметр указателем и в качестве аргумента брать адрес требуемой переменной
поэтому само собой напрашивалось семантическое добавление в с++, а именно ссылки, которые позволят передавать параметры "по ссылке"
с другой стороны можно сказать что это изменение семантки всего лишь добавляет синтактические удобства и не более
поэтому создатели си и не спешили добавлять ссылки в свой язык
имхо, если ты обучаешься, то самый лучший проект для обучения, это там где тебе надо сделать сложный разбор какого-либо формального текста
если по простому, то написать компилятор/интерпретатор/парсер etc
компилятор оберона например
или парсер xml либо других языков разметки
или какой-нибудь протокол сетевого взаимодействия с относительно сложным форматом, типа ftp или smtp
Это вероятно, не функция, а function-like operator. Как, например, есть new и new(std::nothrow).
>Кто блять за нейминг отвечает в плюсах
Страуструп таранит против введения новых ключевых слов. Грит и так их много.
Чтобы хотя бы тип возвращаемый из функции был понятен
>>539854
>Страуструп таранит против введения новых ключевых слов. Грит и так их много.
Ну бля, можно было сделать какой нибудь std::clone(...), ну или как там хотели изначально std::decay_copy(...)
А если вкратце, как примитивный компилятор/парсер должен выглядеть, какой базовый функционал, как вообще всё в итоге заставить работать?
>Как это представить, я не понимаю?
Что ты там представлять собрался? Садишься и пишешь код, профит.
Перформанс не важен в данном случае, да. На первый план выходит символизм.
>Перформанс не важен в данном случае
>Всё равно предлагает ебаться с деревьями
Тебе смешно а мне не смешно
Ебани O(n^5), чё как лох?
Хотя, вешать студентов на деревьях - это тоже перформанс в артхаусном смысле слова.
Так что от перформанса никак не уйти.
да тут все просто-тупо: читаешь "книгу дракона" или вирта "разработка компиляторов", к примеру, но есть и другие книги, полно их
от того что прочитаешь 1 книгу не умрешь, уж сделай подобный подвиг, лол
а если будет лень пилить бэкэнд то используешь llvm для компиляторов или чего нибудь типа parrot для скриптовых языков
хотя можно и по другому поступить - наоборот закодить бэкенд под какую-нибудь интересную машинную архитектуру, к примеру под микруху какую-нибудь, или даже есть такая интересная тема сегодня как GPGPU
понятно что все (ладно, почти все) уже 10 раз писано-переписано, но в качестве учебного проекта, имхо, это будут самые результативные
если осилишь, то ты реально станешь кодером
Найди одно пять раз
Спс что разрешил пользоваться чем хочу, но идиотским решением это быть не перестанет
return vec[index1][index2];
}
Реальный код с код ревью, держу в курсе.
Надо пофиксить чутка и можно в линух пушить
auto get_el_i(int ★ vc, uint32_t in1, uint32_t in2, uint32_t sz1) {
return ★(vc + in1 ★sz2 + in2);
}
очень похоже на утечку памяти
Так это же std::move или я нихуя не понял?
Auto назвали, чтоб вот такие >>539732 пидорасы глаза себе ломали.
Себе в штаны насрали, другим назло
Если допустим у меня в приложении парочка высоконагруженных частей взаимодействия с сетью то как в таком случае поступить? Норм идей будет создать несколько контекстов в разных тредах, каждый для отдельной части приложения где троттлится? Гугл вроде как выдает чтобы в нескольких тредах бежал один контекст. Как эффективнее? Поясните плз
Замерить.
Замеряешь время в цикле отрисовки
Одну секунду делилишь на это время
Полученный результат пишешь куда угодно, хоть файл, хоть консоль, хоть отдельное окошко на imgui где будешь отрисовывать это
Это самый простой и верный путь
Прост распоралель 100%, лол
Любые числовые функции
На трекерах не лежит нигде?
Он долго вообще идет? Я бы и за бабки записался, а потом бы выложил куда-нибудь.
Идет дохуя, на трекерах не нашел, только на каких-то сомнительных складчинах, где надо 500р закинуть для VIP ДОСТУПА
Все так.
Просто пиши на гошке микрочелик
2.Пытаюсь изменить это значение другим консольным приложением
https://pastebin.com/emW2bRzJ
3.Нахожу адреса модулей, дрочу перебором, нахожу этот инт и изменяю.
4.Нихуя не изменяется в первом приложении.
Где я обсераюсь? инб4 Везде
наверное (хотя могу ошибаться)
у тебя в экзешнике число "123456" будет в 2х местах
первое это целочисленная константа
а второе это переменная типа инт, которая инициализируется значением этой константы
UB
У Страуструпа есть книга, "A Tour Or C++" называется, кажется.
Ещё можешь статьи почитать, если хочется узнать про всякие рэнжи да копрутины
Я на констеэкспр делал всякие смещения и маски для битовых операций, оче удобно. Фактически, констеэкспр заменяет макросы си. В каких-нибудь микроконтроллерах макросов пиздец как дохуя
Если актуально делаешь обычную пузырьковую сортировку, после пятого прохода останавливаешь цикл и получается что крайние (смотря куда двигал)студенты самые высокие.
Напишу код за сто рублей, жрать хочется.
Исходная последовательность:
10, 9, 8, 7, 6, 5, 4, 3, 2, 1
если вызвать sort(0, 5), он вернёт
6, 7, 8, 9, 10, 5, 4, 3, 2, 1
partial_sort(0, 5, 10) вернёт
1, 2, 3, 4, 5, ...
Оставшиеся элементы хз как отсортированы будут
sort сортирует указанный диапазон. Если X это не конец контейнера, то он отсортирует диапазон как если после Х вообще никаких элементов нет.
partial_sort отсортирует столько элементов, сколько влезет в диапазон [begin, X), но элементы из [X, end) будут участвовать в сравнениях.
Так же могут отличаться сами алгоритмы сортировки.
естественно, при этом не написал ни одной полезной работающей программы на с++
Бесполезное на спп не считается совсем, потому чтт его обь5м меряется уже лярдами.
считаю его книжку "42 рекомендации по использованию с++11 и с++14" одной из самых мастерски написанных книг, он сумел лаконично изложить сложный материал
Трассировщик лучей.
Интерпретатор языка Х.
Текстовый редактор.
Шахматы и змейки.
Клиент и сервер хуйни.
Эмулятор 6502.
Он хороший препод, жаль у меня в пидорашьей шаражке такого не было
Ништяк, заказал бумажную
Для внешнего вектора память выделяется спокойно через gavno.reserve(n);
Как выделить красиво память для вектора-пойнтера, чтобы не создавать его с рандомным именем , ресервить, а затем присваивать? При чём я не хочу, чтобы пустые места нулями заполнялись как в new vector<double>(n)
> У меня есть структура vector<vector<double>> gavno;
Нахуя тебе такая структура понадобилась?
for(auto i = gavno.begin(); i != gavno.end(); i++){
i = new vector<double>();
(*i)->reserve(n);
}
> У меня есть структура vector<vector<double>⚹> gavno;
Нахуя тебе такая структура понадобилась?
for(auto i = gavno.begin(); i != gavno.end(); i++){
⚹i = new vector<double>();
(⚹i)->reserve(n);
}
Фикс
Зачем тебе вектор указателей на вектор, если можно сделать вектор векторов? В чем профит?
Вектор векторов делает то же самое.
Ну вот у меня много векторов определённой размерности. Мне нужно их упаковать в эту матрицу. Т.е. за каждый цикл вдупляю по одному вектору. Вы имеете ввиду, что таким же образом можно подменить у вектора векторов имеющуюся строку и не оставить пустышку в куче?
Я имею ввиду, что тебе не обязательно выделять память под сами объекты векторов динамически через new. Что бы ты не имел ввиду под "подменить имеющуюся строку", vector < vector <double> > справится с этой задачей, а то, как делаешь ты, только усложнит тебе жизнь, потому что эту память потом придется вручную освобождать.
Ты мимо украча промахнулся.
Так надо.
error C2679: binary '<<': no operator found which takes a right-hand operand of type 'T' (or there is no acceptable conversion)
Собираю через симейк, в вижуал студии просто открываю папку, если это важно
вызов print(adjacents);
А ну ладно, я понял, мне нужен был launch.vs.json и там есть параметр currentDir
https://learn.microsoft.com/en-us/cpp/build/configure-cmake-debugging-sessions?view=msvc-170
Может, потому что компилятор не догадывается подставлять все варианты темплейт-аргумента во все глобальные функции с нужным именем?
Для твоего юзкейса я бы наследовался от базового класса и виртуальный protected метод
это так, навскидку, не эксперт
https://github.com/VimDefecator/httpserver/blob/master/src/classutils.hh
https://github.com/VimDefecator/httpserver/blob/master/src/html.hh
https://github.com/VimDefecator/httpserver/blob/master/src/test.cc
да, это будущий двач на крестах
Не надо автоматизировать, хуй потом разберёшься в этой наркоманской параше из макросов.
Наверняка в Boost есть чо
>Не надо автоматизировать
А как жить-то? Ведь выходит два стула.
Либо юзаешь жирнющие готовые либы, где умные дядьки подзаебались с темплейтами и макросами вместо тебя, и тем самым тащишь в проект лишнее и чужое, утяжеляя репозиторий, компайлтайм, рантайм и все на свете, вдобавок лишаясь возможности допилить что-то на низком уровне под себя.
Либо пишешь сам, но примитивно, с кислым ебалом, кучей бойлерплейта и без перспектив для кодовой базы стать полноценным DSL.
На работе я сильно не выебуюсь, но для себя - хочется. Но препроццессор - слишком, согласен. Поэтому спрашиваю, может есть какие-то ФИЧИ НОВОГО СТАНДАРТА, О КОТОРЫХ НЕВОЗМОЖНО МОЛЧАТЬ, какие-то УБИЙЦЫ МАКРОСОВ V3.0, чтоли...
>чейнинг вида dvach.privet().ja().pidoras()
Тоже бесит эта маза.
> более адекватные способны
М. б. проектировать так, чтобы писалось
dvach.privet(ti, negodyaj) вместо этого членинга.
Ну и как ты так красиво билдер напишешь?
>М. б. проектировать так, чтобы писалось
>dvach.privet(ti, negodyaj) вместо этого членинга.
Очевидно, там может быть гораздо более длинный список параметров, и делать набор из 15 дефолтных значений в интерфейсе конструктора не вариант, потому что половину дефолтных значений один хуй придется набивать вручную, если надо кастомизировать значение восьмого. Ну и вызывающий код нихуя не читаемый, если ты не знаешь наизусть порядок аргументов или хотя бы не комментируешь их имена вручную. Алсо, у всех все в пизду сломается, если ты решишь порефакторить порядок. Хуета, короче.
Есть древняя забытая тнхника передачи кучи параметров в стуртуре, тогда изменение одного из дефолтных параметров, жаже последнего, не требует набивать все остальные.
Неудобно, некрасиво, не нравится, мам скажи
На них я заразился СПИДом и умер.
Такие дела.
https://cppcourse.ru/#rec515178264
Чел плюсы не твое - точно. Возможно и весь кодинг.
Что можно не понимать в указателях лол? Ты сложение и вычитание понимаешь?
По rust вакансий нет совсем, хотя на уровне растбука хотя бы наверное осилить стоит.
По си зарплаты низкие совсем.
Куда ещё глядеть?
Смотрел на ютубе с белого до красного включительно. Кое-какие интересные фишечки есть, но не вот прям откровение. Все их "реальные проекты для портфолио" суть обычный васянокод уровня laba.cpp.
Читал отзывы на сам курс, как по мне это трэш, который даже за бесплатно малоинтересен.
Так называемые менторы - это чатик из таких же бедолаг как ты, где они делятся своим опытом.
А опыт - это больше не про кресты, а про долбежку в систему автоматической проверки, которая не сообщает в чом ты не прав, а просто отклоняет решение и все тут.
Нахер такой опыт нужен, я не знаю.
Указатели это наследие си. Бери книжку Кернигана и Ричи по сям, решай задачки оттудова. К ней есть книжка с решениями всех задач и есть еще https://clc-wiki.net/wiki/K&R2_solutions .
А студенты как всегда клепают новые дсл, эх
Не, ну это уже какой-то высший пилотаж. Да и прикол моего DSL в том, чтоб процедурно все это дело генерировать. Зацени, как я только что реализовал втыкание лямбд в свое выражение.
ой, штйсльгкпрйблсь, вот такая разметка должна быть
Пик 1 - проблема
Пик 2 - то, что я установил
Пробовал и в VS 19, результат один
Раньше как-то получалось. Да, на Шарпе это всё проще, но мне надо на крестах, но не собирается
хз
Отклеилось*
так иди в шарпотред
Спасибо
а если мне надо 200 айтемов создать разных - будет 200 строчек кода лишних? Это ж фигня
А что, компилятор должен за тебя додуматься, какие 200 разных айтемов тебе нужны?
а в про кодах их, получается в строчку просто записывают или как?
>геттеры
>сеттеры
>pimpl
Если бы ты принёс мне то на ревью, я бы тебя избил, обоссал, а потом в окно выбросил.
Да ему даже отвечать не надо. Просто троль дрочит в присядку.
Tcp, dhcp
Ну прочитай эти "всего лишь 80" страниц и напиши свои реализации сетевых протоколов за пару вечеров, можешь потом хвастаться, как быстро превзошёл инженеров из Cisco.
> сколько времени займет Х
Ну вот ты какой ответ нормальный ответ ожидаешь на сво вопрос? Что хочешь услышать? Точную дату?
>mutable - permits modification of the class member declared mutable even if the containing object is declared const.
Ещё одно подтверждение, что кресты делаются шизоидами для шизоидов.
Это сделано для ленивых логических констант, которые вычисляются при первом обращении и кешируются. Макака естественно с таким не сталкивался.
Мимо
Без этого ленивые константы, конечно же, не реализовать никак.
>Дни, месяцы или годы. Хотя бы примерно
Это все индивидуально же. Некоторые SICP за несколько месяцев-полгода осиливают, например, а некоторые на несколько лет растягивают. Плюс от начальной подготовки многое зависит, поэтому тебе никто не сможет дать адекватную оценку по времени, кроме того, что от пизды сказать.
Ни в чем особо, синтаксически разные, семантически одно и тоже делает
может быть какой то подводный камень есть, который встречается раз миллион лет, но я просто пишу {} и проблем не встречал
Зависит от того, какие у класса конструкторы. Вектор с (1,2) и {1,2} делает совершенно разные вещи.
да немного на самом то деле
это неплохой способ выучить язык и вообще научиться программированию
берешь спецификацию какого-нибудь протокола (тысячи их, для пром контроллеров, для iot, для финтеха, для крипты, для медиа, для ip-телефонии, и прочиее) и по спецификации ебашишь чтобы работало, вот и все
думать вообще не надо
а вот грамотно спроектировать протокол под конкретную задачу, вот это да, уже мастерство и другой уровень квалификации
почти все референсные реализации протоколов написаны на pure c, часть из них на приплюснутой сишке
в качестве учебной задачи можно написать реализацию использующую возможности новых стандартов с++, к примеру
а, дополнение - браться за реализацию сетевого tcp-ip стека я бы не советовал, с учебной целью гораздо полезней реализовать один из более специализированных протоколов либо семейство протоколов
1) int i(2.72); // i == 2 && warning C4244: 'initializing': conversion from 'double' to 'int', possible loss of data
int j{2.72}; // error C2397: conversion from 'double' to 'int' requires a narrowing conversion
2) copy(istream_iterator<int>{sstr}, {}, inserter(v, deque_middle));
// Обрати внимание на пустую пару фигурных скобок в середине.
А еще можно писать
//...
return {};
3) Разное поведение при использовании с auto.
>>551421
да
https://pastebin.com/nQim1Yup
Обращайся.
Пару лет назад, когда я был еще молодой и зеленый, один ревьюер пытался мне за это предъявить. Ох и горячий был спор. ревьюера по итогу обоссали.
И не понятно как работает вижуал студия, она проверяет даты изменения зависимостей как make или нет? По ощущениям она как будто каждый раз все файлы заново компилирует.
Для файлов есть глоб и глоб рекурс. Ты бы хоть погуглил. Проверяет. Симейк аообще все делант, если правильно его использовать.
по одному файлику ручками добавлять, как старики мейкфайлы в 70ых писали руками.
И чето я не понял прикола блядь, как использовать методы пуш/поп без новой аллокации? Конструктор в Foo каждый push вызывается, зачем
Покажи.
Год. Время пошло.
Задача на пике, у меня такое решение:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float n, z;
cin >> n;
z = n * (n + 1) / 2;
cout << setprecision(30) << z << "\n";
return 0;
}
Но оно не правильное. Почему?
Во-первых вместо float нужно int. Иначе на больших числах возникнет округление.
Во-вторых надо следить за переполненим целого -- 4e9 * 4e9 это больше чем 64-битный int
uint_least64_t
Ждём в C++29. Там любая последовательность байтов будет синтаксически корректной программой на C++.
И сети в stl так и не завезут
Че теперь всю рекурсию на итерации переделывать? Нафик я тогда ее учил?
Делай сбалансированное дерево теперь
Ахаха, молодой падаван. Рекурсию с зависимостью от данных не используй ты.
Хочу в консольке - слушать нажатия клавиш и чтобы при нажатии что-то делалось, но чтобы при этом - все приложение не ждало пока нажму клавишу.
Ну, типа я тетрис в консольке хочу. И как сделать так, чтобы игра просто шла, но фигурка крутилась только тогда, когда клавиша нажимается - я не знаю. Можно - ждать каждый "кадр" нажатия, но тогда вся суть теряется от такого вот тетриса.
Я дополню вопрос, пожалуй, мне тоже интересно, и заодно отвечу на него на 50%. Ввод можно ожидать в отдельной нити, и тогда приложение не будет висеть. Но как в плюсах проще всего читать ввод без эха и без необходимости нажимать ввод? Есть getch, но он чисто для винды. Можно использовать сторонние библиотеки, но может есть какая-нибудь магия со стандартными потоками?
"Сторонние библиотеки" для таких целей используют нативные функции целевой платформы.
смотри сурс глфв пол ивентс - там это нормальго сделано
>"Сторонние библиотеки" для таких целей используют нативные функции целевой платформы.
Да это понятно, просто не хочется подключать какой-нибудь sfml только ради этого. Выглядит, как оверхед.
Не оверхед - это навелосипедить SFML самому на WinAPI/LinAPI.
Тот же sfml, но для сишки.
пописал на тебя
Win API, если тебе достаточно винды или PDCurses, если хочешь кроссплатформу.
Вот пара примеров
https://code-live.ru/post/cpp-oldschool-snake/?ysclid=lc6ne0rid7844748121
https://gamedev.ru/projects/forum/?id=137654
>>555800
>может есть какая-нибудь магия со стандартными потоками?
Нет никакой-такой магии со стандартными потоками.
Вводом/выводом рулит операционная система и к стандарту языка оно никак не относится.
>Нет никакой-такой магии со стандартными потоками. Вводом/выводом рулит операционная система и к стандарту языка оно никак не относится.
Не, ну по этой логике и тхреды контролируются ос и полностью зависят от платформы, но в стандартной библиотеке они, тем не менее, есть. Почему бы так же не внедрить в стандарт универсальный аналог getch?
Двачую адеквата.
cmp %eax, 0
А как это внутри на конкретном процессоре работает, врчд ли тебе ответят. Можешь почитать про физическую сторону вопроса, попыиаться сам сделать что то похожее, но не факт, что у intel все так же. А вообще он не проверяет каждый бит. Он одной инструкцией делает операии сразу над байтом, двумя, четырмя или восьмью байтами
Сравнение быстрее всего делает дерево And над побитовыми Not Xor. Сравнение с нулем будет дерево And над инверторами, что еще быстрее.
На x86 процессоре, чтобы проверить, например, является ли число ненулевым, нужно выполнить с ним какую-нибудь операцию. Каждая выполненная операция устанавливает значения разных флагов. Один из них, ZF - означает, равен ли результат вычисления нулю. Для этого можно выполнить cmp eax, 0, как написали выше, но чаще всего пишут test eax, eax, так быстрее. Cmp выполняет вычитание, а test - побитовую операцию and. И в том, и в другом случае потребуется пройтись по всем битам. В некоторых случаях можно обойтись без test, если итак придётся перед проверкой выполнить какую-то операцию, которая установит нужный флаг. Хз, как оно может работать быстрее, по-моему норм.
Добавлю. Это на самом деле сложный вопрос. Есть вообще наука которая занимается булевыми схемами, как быстрее вычислять булевы функции схемами наименьшей глубины, например. Тут глубоко копать можно
Могу ошибаться, но вроде есть флаг нуля в регистрах, который один бит. Либо этот флаг появляется на алу, и тогда программа типа
i--;
If(i == 0)
break;
разворачивается типа в
inc , -1; // Инструкция вычитания
jnz break_label; // куда прыгать, если результат прошлой команды 0. Это быстрая операция
ip - это string
port - int
adr - struct sockadr_in
* перемещающий
* address - struct sockadr_in
Охуительно назвал поля.
Что почитать чтобы научиться писать ебейшие тимплейты? Желательно покороче, ака минимум воды
Я научился делать дженерики и простенькие рекурсивные функции на вариадических темплейтах, но этого мало, хочу сделать конструктор навороченной структуры данных, чтобы оно все скомпилировалось и требовало минимум указателей и константных значений в рантайме, пусть все что можно запекается в код.
Отмена миссии, я посмотрел как tuple устроен и передумал, лучше руками скопирую пару раз для нужных значений
Хотя все равно какой-нибудь читшит было бы интересно почитать
Как вы вообще живете с вызовами 100 функций из критичных циклов, а вдруг компилятор это сделает медленно.
Жаль, что + в крестах компилируется в UB.
На более менее современном железе вызов функций настолько быстр что инлайн вообще потрял смысл. Хотя обвызывайся.
а так про профайлер здраво сказано
> На более менее современном железе вызов функций настолько быстр что инлайн вообще потрял смысл
Мвахаха.
> На более менее современном железе вызов функций настолько быстр что
qsort проигрывает std::sort в скорости почти в два раза.
Почему?
>пусть в этом году нас всех спасёт от утечки памяти
Но не от циклических ссылок. Как же тяжко.
>офферы на 300к
Хотет. Эх, да...
Продолжая тему изучения cmake, как вы решаете проблему, когда find_package() не может найти библиотеку? Мне кажется эта распространенная проблема у виндодаунов, но толкового гайда не найти. Я пока решаю проблему установкой следующих переменных.
Ну а как тут решать проблему, только делать так чтобы пакет обязательно был, в противном случае падение
И либо юзер сам ставит то что надо, либо сам ручками, нужные пакеты для твоего по, в отдельную папочку складываешь
Ну или пэкедж менеджер используешь, Конан, vcpkg
В принципе верно, файн пакэдж примерно так и работает.
Просто обычно жобавляют отдельный файн пакадж нейм " симейк где пути и прописывают.
для чисто виндового проекта симейк нахуй не нужен, есть мсбилд, с прокидыванием папок к 3рдпати либам
Для кроссплатформы - юзай пекедж менеджеры
Ананасы, решил через пару неделек походить по собесам, сам работаю мидлом с зп 2.5к$ не ДС/ДС2, но хочется попробовать поймать чего получше.
Кто-то ходил в последние пол года по собесам? Готовились к собесам? Что спрашивали? На чем обосрались?
Сейчас вспоминаю все с чем не работал эти 2 года, дрочу литкод, ссыкую дико
Самому кстати интересно, хочу порофлить и сходить куда-нить на собес, посмотреть как меня там выебут, что вспомнить хоть.
Как определить структуру, у которой есть массив длины N, массив длины N - 1, ..., массив длины 0 Вопрос: ты что, дурак, зачем тебе массив длины 0? Ответ: массивы для упрощения примера?
Я придумал так:
template<size_t ...N>
struct LevelArrays{
std::tuple<std::array<int, N>...> levels;
}
И оно даже работает:
LevelArrays<4, 3, 2, 1, 0>{}
Но это всрато, я хочу указывать одну цифру.
Попробовал так: // оставим то, что тут порядок возрастающий, как развернуть integer_sequence я нашел
template<size_t N>
struct LevelArrays{
std::tuple<std::array<int, std::make_index_sequence<N>>...> levels;
}
Оно ожидаемо не работает, как сделать правильно?
Спасибо, мудрый анон
лучше уволься с текущей работы, отдохни месяц, а потом все силы направь на поиск нового более оплачиваемого месяца, а то 2,5к баксов с текущей инфляцией - это просто смех, ты просто гниешь в этом болоте без роста
не толще твоей задницы после 10ти лет просиживания за компом для изучения этого "языка программирования"
Найс проекции
я тебя по API вычеслйу!
1920x1080, 2:34
Что интересного в этом высере? Мало того, что подобные проекты вообще никакого отношения к C++ не имеют, так ещё и говно какое-то, которая любая шарпоблядь напишет за несколько часов.
ну вот я и говорю, покажи своё интересное тогда
>C++ не имеют, так ещё и говно какое-то, которая любая шарпоблядь напишет за несколько часов
Ебать мания величия
Возник вопрос при обмене данными - как приложению 2 узнать сколько прочитать из приложения 1 ? У меня возникла идея, что всегда в начале, перед посылкой основного сообщения, приложение 1 посылало приложению 2 число типа unsigned int в байтах, которое содержало бы размер последующего сообщения в байтах, и только после этого приложение 2 считывало бы указанное кол-во байтов.
- Норм идея? Или можно по-другому?
После прочтения первого ответа тут https://www.reddit.com/r/rust/comments/2ifgsx/what_can_c_do_that_rust_cant/
я понял что это мощнейший язык, который может всё, от API для управления космическими спутниками до софта для смарт-ТВ
>меня возникла идея, что всегда в начале, перед посылкой основного сообщения, приложение 1 посылало приложению 2 число типа unsigned int в байтах,
Так и делают
>Скажите, почему С++ не завоевал мир?
Почти все крутые проекты в мире написаны на С или на С++.
Все ОС, все браузеры, все ААА игры (Юнити написан на С++), вся промышленная хуйня, все компиляторы\интерпретаторы
Но да, формочки на нем не шлепают.
Формочки тоже шлепают. Вот веб не делают.
Я вкатун, хочу хорошо оплачиваемую интересную работу(8ч в день, 40ч в неделю) побыстрее
Ну область применения, если просто хочешь работать пофиг где, то плюсы сомнительный выбор
Слишком много учить, слишком узкие области применения, в целом боль при работе с ним
Есть множество других областей, мобилки, веб, машоб но это тогда тоже не для тебя и миллион других
Ух, сейчас выучу плюсы, устроюсь на работу и буду там каждый день писать компиляторы, игровые движки, ОС и прошивки для спутников!
Потому что он существенно сложнее и требует больше знаний, чем другие языки, при этом дает не обязательно больше денег
О, оказывается, в хроме все ок.
>>562425
Скучно же, ну.
>>562467
Не, я и на работе C++ бэкендщик, правда там подобный DSL с макросами вряд ли восприветствовался бы.
>>562480
Так у меня пока что весь фронт - это браузер, то есть чистый HTML, который генерируется на бэкенде. Но да, если захочется какой-то крутой UI, то это однозначо должен быть самопальный клиент на WinAPI. И чтоб и то, и другое летало на 20-летнем синкпаде под Windows 2000. Джаваскрипт нинужон. Ноудискасс.
>>562487
Согласен. Все таки, нежелательно. От вида такого гигачедяры, как я, ваши комплексы совершат беспрецедентное пробитие дна.
Ну, моей первоначальной целью было потренироваться в реализации лоулевельной части. Даже репозиторий называется httpserver, и только потом тестовый main мутировал в imgbrd. Кроме STL, cstdlib и линуксовых хедеров там ничего внешнего не используется.
>Но да, если захочется какой-то крутой UI, то это однозначо должен быть самопальный клиент на WinAPI.
Не не не, ты не понял
Фронт. на плюсах. в браузере!
Просто всё через wasm делать
идея мертво рожденная, но ржавые например на фулл ебале такое запилили, yew называется, на удивление выглядит норм
БРАУЗЕР ПРЕДНАЗНАЧЕН ДЛЯ ПРОСМОТРА ГИПЕРТЕКСТА
@
ДЛЯ ВСЕГО ОСТАЛЬНОГО ДОЛЖНЫ БЫТЬ СПЕЦИАЛИЗИРОВАННЫЕ ПРОГРАММЫ, КОТОРЫЕ ПОЛЬЗОВАТЕЛЬ УСТАНАВЛИВАЕТ ПО СОБСТВЕННОМУ СОГЛАСИЮ
никогда не интересовался wasm, звучит годно, вот бы когда-нибудь взлетело
>Или можно по-другому?
хз я бы выбрал протокол подходящий под задачу и использовал его реализацию
если бы писал для тренировки - то сначала по спецификации написал свою реализацию
а придумывать свой (хороший) протокол, имхо, это уже высшая квалификация для программиста и таких людей единицы во всем мире
>гигачедяры
ну пруфани хоть, что живешь в долине или в Цюрихе, гигачедяра. Или в Лондоне, хотя бы
>Скажите, почему С++ не завоевал мир?
ну, к примеру, в энтерпрайзе кресты абслютно справедливо сдохли, хотя в 90е было немало систем на них написаны, секрет простой: уебаны в комитете не захотели делать стандартизированную загрузку-выгрузку классов, ведь хуевертить шаблончики гораздо веселее
обратный пример: в различных контроллерах (даже от самых маленьких до больших в которых уже по сути полноценные ос крутятся) на данном этапе вполне можно было бы использовать с++, потому что комитет дохрена сил за последние 25 лет потратил, введя много средств которые упрощают такой низкоуровневый кодинг, при том что уже изначально в кресты и stl был заложен потенциал работать на контроллерах, но эта отрасль довольна консервативна и там до сих пор на сях дрищут макросами и войд звездочка
без какого то намека на троллинг и наебалово, просто один совет: хочешь побыстрее начать зарабатывать деньги кодингом, даже не смотри в сторону крестов, даже не думай об этом, просто забудь что такой недоязык существует
на с++ не пишут компиляторы, ни одной штуки не написано
пишут на приплюснутой сишке, в том числе и компиляторы самого с++, что как бы и показывает всю ущербность этого языка, ведь яп претендующий на звание языка общего назначения всегда пишется бутстрапингом (что ява, что шарп так написаны)
но это не случай с++, все компиляторы которого написаны на приплюснутом си
Доводжу до твого відома, що я повноправний громадянин наймогутнішої держави у світі. Раджу тобі, чоловіче, якнайшвидше підготуватися до входу у склад нашої імперії. Наврядче наші шляхетні правителі лояльно ставитимуться до жителів східної колонії, що не поважають Україну.
а что учить
го
яву
расту
джскрипт? вот чтобы быстро вкатиться иделать проекты и стаь менедежром а потом и СЕО фанудером единорога
Что угодно, но это уже вопрос не для с++ треда
Побегай по соседним тредам поспрашивай как у них дела
Это то же, что C++, но в терминологии конченных долбоёбов, типа шизика, который сейчас бегает тут и говорит забыть про C++ и настаивает, что он не тролль.
Сишка++
Ну, если компилировать и запускать обе программы на одном и том же компьютере, проблем не будет, но тебе этого наверняка потом будет недостаточно, так что лучше сразу сделать правильно. Если ты используешь Qt, то там есть типы quint32_le и quint32_be.
Даже обычный хело ворлд не собрался.
Триллионная компания делает всё через сраку. Впрочем, ничего нового.
Кстати void * это же квинтесенция си, лучше уже не будет.
>на контроллерах, но эта отрасль довольна консервативна и там до сих пор на сях дрищут макросами и войд звездочка
Дрищут на С претенциозные деды, которые либо в полудохлых КБ работают, либо махараят мелкосерийку.
Все зумеры и зарубеж давно на ++, причем там от насранного в очередном mbed говна может и шарпист какой охуеть.
>и stl был заложен потенциал работать на контроллерах
Вот куда он точно был не очень заложен так туда. Любая хуйня для мк ДОЛЖНА поддерживать статическое выделение, не значит что оно всегда будет использоваться, но оно должно уметь.
А по факту - тебе надо либо костыли писать, либо либы сторонние брать, для того, что бы ебанную queue на статике возыметь. ringbuffer вообще блядь отсутствует.
Не, STL это пизда хуета не совместимая с встраиваемыми.
Да, да, очень интересно и прикольно, что ты можешь через union отъебенить себе ногу поколено, но рефлексии без долбления себя в очко так и не завезли.
А пиздатой компайл-тайм рефлексии ебанись как не хватает.
Слишком много глюков в Матрице, для сей с классами.
Собсна хочу написать программу которую бы запустил и чтобы я просто в проводнике щёлкал на превьюху фото и он присваивал ей число. Ну запустил программу, щёлкнул одно фото он назвал 1, щёлкнул другое назвал 2.
Подскажите как это реализовать, какие либры юзать и вот это всё. В каком направлении копать короче.
И вот как это сделать. Я в голове прикинул что там на событие левой кнопкой мыши клик должен срабатывать сценарий:
ПСЕВДОКОД
if (left_mouse_button == clicked && while_in_explorer_window == true;)
{ if file_selected == true rename_file(number);
else do_nothing();}
Пидора ответ.
Чтобы клик на картинку детектился тебе придется писать свою показывалку картинок и там уже обрабатывать события с мыши.
Если хочется проще я бы сделал так
- создаем пустую папочку
- перетаскиваем туда в искплорере мышой картинки по одной за раз
- скрипт сидит и следит за папочкой
- как только там появляется новый файл, переименовывает его по порядку
Не, мне именно надо чтобы клик на любой объект в проводнике детектился, чтобы моно было и картинки и папки всё нумеровать.
А чё если делать скрипт по твоему варику там power shell надо да?
Может быть можно как-то при событии клик мышкой обращаться к процессу explorer у него спрашивать был ли выбран какой-то объект current window.
Наверняка можно в какой-нибудь стэк i/o вхуйнуть это как фильтр-драйвер
так эксплорер же обычныей процесс как все оствльные
небось и каких-нить хуков/инъекций в него пиздануть можно
Ну у него же есть свои api к которым можно обратить и запросить типа был ли file selected сделан.
Ну короче щас попытаюсь снова объяснить что я хочу.
Есть папка с файлами в explorer
Ты берёшь и запускаешь программу. Она чекает что рабочее окно(которое ты выбрал щас) принадлежит процессу explorer и если так то при событии клика мышкой она спрашивает у explorerа был ли выбран какой-либьо объект(папка, файл, фото видео) в окне если да то выбранный файл переимновывается присваивается число 1 и после чего оно увеличивается на 1 до следующего раза.
Сам Страуструп писал в своей книге Основы ООП на базе с++ чтобы люди не дрочили на лексику и головолоками вроде а что будет если всякую ебалу налепить, а писали программы
>Сам Страуструп
Страуструп задумал свое грязное дело сильно загодя, еще в 80-х он осознал, что язык нужно стандартизировать.
И это неспроста. Он падло чуел, куда ветер дует, и понимал, что все косяки на кого-то нужно спихнуть. Вот он и изобрел в дополнение к языку еще некий Стандарт.
На самом деле, все было бы куда проще, если бы программисты в непонятных ситуациях клялись Жопой Страуструпа, а не кивали бы на Стандарт.
Страуструп - учредитель Общества с неограниченной безответственностью.
Я простой линуксоид город мухосрань
Так что с виндовыми API ебитесь как-нибудь сами
Не понимаю я в этом да и собственно оно мне до пизды
Ну так виндовый api гораздо сложнее чем всякие linuxы. Ладно, я уже понял что без книги руссиновича не обойтись. Спасибо, аноны.
Скоро дотнетовцы начнут траллить всех. У них уже есть компиляция в нативный код хоть под линукс, хэллоуворлд весит чуть больше 1 мб, установленный дотнет не нужен, по скорости ебёт всякое GOвно.
> хэллоуворлд весит чуть больше 1 мб
Но если запаковать в него рантайм дотнета, он весит уже 20 метров, даже после трима. И это хеллоуворлд, а сервис будет уже под сотню.
Нет, в 7.0 дотнет уже не нужен при AOT-компиляции, там полностью нативный код. Из негативного - рефлексия выключается полностью и либы с ней не будут работать.
AOT не тыкал. Раз так, Go точно идёт нахуй, куда ему с шарпами тягаться.
а бля это тред плюсов а не си
Совсем по феншую - да. По факту - пока не парься.
Из причин сделать free() перед завершением, что я могу придумать - это корректная отработка atexit() abort() всяких и какие нибудь ультра ебнутые случаи, когда твоя программа исполняется в одном и том же процессе с другой (я хз можно ли так вообще, не очень знаком с подноготной и ее проблемами, просто говорю тебе, что там до и после мейна что-то есть и тоже может исполняться.
Еще бывает полезно чтобы в тестах утечки памяти обнаруживались.
Не эксперт по qt, но слышал, что valgrind считает утекшей любую неосвобожденную по завершению память. Вот есть у тебя глобальный объект - окно. Должен жить все время. Ты взял, сразу через new выделил и потом просто не удаляешь, пока прогу не убьют. Тебе норм, а он за утечку посчитает. Это мои предположения
Покеж код
Сражаться и отыгрывать обратно!
а нахуя тебе перекатываться?
появилась необходимость написать небольшой кликер, использую функции SetCursorPos и mouse_event
проблема в том что они не всегда работают:
1). не получается "кликнуть мышью" на некоторые окна
2). если запустить эти окна через "эмуляцию" Alt+TAB, то функции SetCursorPos и mouse_event вообще перестают выполняться(наблюдаемый результат отсутствует)
третий день мучаюсь, в интернетах пишут что-то про разные окна на Win API, мои силы на исходе, подскажите пожалуйста как решить данную проблему Спасибо
p.s. у всяких удалённых рабочих столов такой проблемы нет: по идее они так же должны эмулировать работу мыши/клавиатуры (без DLL инъекций я надеюсь)
а чего нибудь попроще нет?
вот всё работает, потом перехожу на приложение - движения мыши прекращаются, SendInput попробовал - тоже не работает
косвенно догадываюсь что мышь и клавиатура находятся (подключены) к какому-то неизвестному окну, которое никак не связано с тем, что я вижу на экране
Что делать если какая-то либа в одном из компиляторов не компилируется?
Нормальная ли практика чутка подпиливать либу, чтобы работала?
Пока ты маленький студентик-вкатун - тебе нахуй все это не надо.
Когда ты мало того, что работаешь, так и на работе есть требование кроссплатформенности\разных компиляторов - вот тогда надо.
Я пилю свой проект для хобби, интересно, какие лучшие практики
А сейчас как раз переезжал с mingw на msvc и задумался
>>566189
Хуй знает, по мне наоборот, если ты планируешь этим работать - нужно все делать энтерпрайзно, даже если это копродомашний проект.
Без этого ты просто не поймешь, нахуя делается куча вещей.
Блин если ты билдишься под один таргет и на одном компиляторе, то ты например можешь вообще например забить хуй про UB, ведь вся веселуха там начинается только тогда.
Среди С++ пограмиздов знание УБ и тыканье им друг в друга это отдельная спецолимпиада.
Если использую delay 10000 * 8 то вся ардуина виснет.
Есть какие ни будь другие варианты как это реализовать?
Сохрани время, когда отключать реле, в переменную и в лупе проверяй каждый раз уже пора или еще нет
Не блокируй луп дилеем
Дебич. Это медленный способ. cmp eax, eax
Говорю, что написал змейку.
Стараюсь увести разговор в другое русло, если не получается, начинаю оскорблять мать собеседующего.
"время" когда отключать реле, ардуина постоянно будет перезапускаться мне каждый раз настраивать время?
В целом да, только логику проверь.
Кстати наверняка для ардуины уже сделали либу деферред тасок, но мне всегда хватало руками иф написать
не нашел
Вся эта шелуха тебя отвлекает от самого важного - пиления своих проектов.
Я, когда вкатывался, ваще ничего не умел кроме вижуал студии. Вкатился, моей сениорской лычке уже больше пяти лет, все еще ничего не умею кроме вижуал студии, и не хочу уметь.
Так может самое интересное на отключении, он для этого таймер и ставит. Репортите, глупцы, пока не поздно...
Интересно, есть ли статистика по использованию ардуино в бомбах при терактах.
ну ты и урод решил мою грядку разбомобить!
Уходи.
>SFML
Хуйня без задач, к тому же баганная и мало платформ.
C++ обёртки для SDL и то лучше будут
Мать твою ебал.
Тем более зачем отнем знать компилятору?
Что такое pragma(push,1) и pragma (pop)?
> Нахуй Алигн нужен?
Доступ по выполненному адресу эффективнее.
> Тем более зачем отнем знать компилятору?
Потому что компилятор размещает данные.
> Что такое pragma(push,1) и pragma (pop)?
Выравнивание полей структуры по однобайтовой границе.
То есть компилятору нужно выделять
alignof(x) + sizeof(x)?
А если массив структур то каждую выравнивать?
Каш мар
> компилятору
Аллокатору*
ой...
Не так уж трагично выходит, скорость решает.
>SFML
>SDL
Вы пизданутые. Еще и мне это говно посоветовали когда-то. Я недавно узнал, что API OpenGL позволяет писать напрямую в драйвер видюхи, достаточно занклюдить <gl.h>.
Вот на чем надо писать, потому что так писали серьезный сэм и другие ламповые игры.
> Еще и мне это говно посоветовали когда-то
Чётче вопрос надо было формулировать.
> OpenGL
Это 3D. А SFML - 2D.
Лол. Опенгл это часть драйвера по сути. Хедеры только адреса. А сымл это шаред либа, пртчем так себе.
И что? Тебя же не удивляет, что для вывода в консоль все используют стандартную библиотеку вместо вызова прерываний или функций WinAPI по адресам. Та же хуйня и с OpenGL, нет смысла писать тонны бойлерплейта для рисования фигур, когда в SFML это делается в несколько строчек.
Мистер, напишите пожалуйста мне CLR\CLI, шоб в 256кб с кодом приложения влезало.
Не? Не напишите? Что говорите? Только круд можете написать? Ну ладно.
Кто-нибудь остановит этот взбесившийся принтер?
Лучше бы сокеты добавили.
steam его использует кста, так что норм
Наоборот заебись, кресты никогда не были ООП-языком. Я бы уже давно полностью на кресты перекатился обратно, если бы вместо cmake что-то нормальное придумали.
Опенгл - это Си, а не плюсы.
СФМЛ - это не только графика, но еще сеть, многопоточность, звук и ввод с клавомыши.
СФМЛ очень дружелюбен к нубам с объемом знаний в одну книжонку по плюсам. Позволяет в живую пощупать все то, чего ради создавался C++ поверх сей.
>так писали серьезный сэм и другие ламповые игры.
Так писали движки для игор. Игра - это гораздо более высокоуровневая штука.
Доморощенное движкостроение нынче крайне не актуальная тема.
А если когда писали ламповые игры еще в очке ковырялись и жрали наковыренное, то ты тоже так несомненно должен делать.
Аргументация от бога блин.
с си интерфейсом
> если я записал на диск данные, сбросил буфер, то с ними уже все заебись?
Нет. Никаких гарантий нет что данные физически запишутся на диск после сброса. Даже если драйвер ФС будет считать что данные записались, то нет гарантий что сам диск их записал, а не держит в кеше. Если ты что-то записал на диск и питание сразу отъебнуло - это так называемое UB.
> ИБП
Это просто, спасибо
> серверное железо
Чет не гуглятся ssd с гарантиями такими, хотя мб я плохо поискал. Спасибо
Но ведь должен быть способ как то сбросить данные. Я же когда компьютер выключаю, оно все записывается, верно? Почему я не могу процесс форсировать?
Тебе надо не в сторону софта идти за гарантиями, а в сторону железа. Если питание экстренно пропадает, то на обычном железе всегда есть шанс проебать данные за последние секунды вплоть до минуты. Ты думаешь нахуя в ДЦ ставят одиночные серваки стоимостью как автомобиль? Со стороны софта ты можешь только дублировать сохранение данных на разном железе для гарантий. Ты думаешь всякие серверные сбои с проёбом БД за хуй знает какое время - это чисто диски наёбывются? Да нихуя подобного.
>>569280
>>569287
А если серьёзно? У меня бэк будет на питоне, надо так. Я же не буду гуй на питоне писать, я вообще не хочу писать на нём. В идеале бы его в кресты встроить и нормальным гуем обмазать. Но надо чтоб это не было слишком жестким крестовым дерьмом - коллеги не поймут как с этим работать. Как говорится надо и рыбку съесть и на хуй сесть - питоном пусть развлекаются другие, а мне надо быстрый современный гуй к нему прикрутить.
Ты же не для себя пишешь? Ну так бери PyQt и не выёбывайся. Толку с твоего быстрого фронта не будет, благодаря тормозному бэку на гвидоне.
> Ты же не для себя пишешь?
Ну как сказать, потом мне ебаться с этим говном, получится кал - придётся переписывать.
С гуем на плюсах гарантированно придется ебаться больше.
Каким образом в С++ можно многопоточно читать из файла так, чтобы каждый поток читал отдельный кусок? Просто у объекта типа std::FILE есть индикатор позиции начала чтения. Как тогда сделать так, чтобы для каждого потока он был свой?
можно
посмотри как в fopen передать флаг на shared read
если никак - погружаешься глубже в кал какой-нибудь CreateFileW и ебешься в сраку непосредственно с ОС хендлами файлов
Спасибо! Буду копать
Могу ли я достать данные и забрать себе их жизненный цикл (вектор по идее должен быть уничтожен при этом, ну и фиг с ним).
По сути мувнуть вектор в указатель?
кастомный аллокатор
Сильно большое файлы мне читать не доаодилось, но много небольших в многопоток читается на ура.
и клеются в один буфер по смещению тоже
Есть же вмякие куе декуе, которые при попе удаляют.
По фундаментальным типам.
если писать совсем упрощенно, то ты используешь субд в которой реализован ACID
но есть и другие системы надежной обработки транзакций, если не важен вендорлок, то они есть и в ядрах современных ос
самому тебе не написать, если у тебя нет в запасе лет 20ти
Сам писать я не хочу, главное результат
И в чем будет отличие от того, что он написал?
Апи либы принимал и наполнял вектор, а в программе везде результат передавался как указатель (и делитался после использования), а тк вектор большой, то копировать не хотелось, а памятью владеть хотелось.
Забил и переписал, чтобы передавался вектор
Из-за зоопарка архитектур, где после максимального значения не следует минимальное.
int a;
a = 3;
или
int b;
cin >>b
?
Спасибо
Опционально еще бы что-нибудь про паттерны и всякие примеры как нужно писать, а как не стоит, но с учетом С++ специфики.
Книги.
Вот этот уебок больше выебывается, чем пытается объяснить. В итоге приходится самому все гуглить.
>cin >>b
есть ли способ проверить пришло ли что-то и записалось ли в переменную? Может я ctrl+d нажал?
badbit/failbit/eofbit
>проще всего будет организовать запасной источник питания, в случае если основное электричество отрубят.
Правильно решил - иди выбирай и закупай источники питания, тыж программист!
PyGTK
На степике от csc очень сжато, но по верхам пройтись пойдет
>СФМЛ - это не только графика, но еще сеть, многопоточность, звук и ввод с клавомыши.
В SDL Это тоже есть, чел, не поверишь!
Сразу видно человек никогда в реверс инжиниринге не гулял, старый шиндоус софт не патчил
SDL это C, а не плюсы.
Есть тема чем тралить лалак.
Напиши бэкенд на Boost.Beast и убедись чтобы работало с epoll/
Буду репортить результаты в тред.
Пока-что сходил на один собес, прошел успешно, спрашивали будто на стажера-джуна, ни одного сложного вопроса не было. Немного завалился на тех вещах которые не использую эксепшены и метапрога, но в целом фидбек очень положительный.
Предложили 3к на руки.
Впереди еще пара собесов, хочу попробовать выбить 3500
Примерно вопросы вспомнить можешь?
мимо вкатун 3курсник, тоже хочу уже начать вкатываться помаленьку
Да хуйня какая-то джуновая. Написали пустой класс попросили дописать какие функции сгенерит компилятор. Потом попросили дописать какие из них будут noexcept, собеседующий сам подумал что копи конструктор будет не ноэксцепт но я ему статик ассерт вьебал и он согласился.
Спросили какую-то шаблонную дрочь, я ответил неправильно т.к не пользуюсь таким, вопрос точно не помню, чет про универсальные ссылки и реализацию std::ref
Потом спросили какие бывают мьютексы в стдлибе, сложность вставки в мапу и хешмапу, немного про рвалуе/лвалуе семантику
Потом вроде бы пару вопросов по Qt - на какой-то простой ответил, на посложнее нет т.к не юзал его 2 года
Больше не вспомню. В целом я на джуна в текущей компании собесился гораздо сложнее, ебали 3 часа мозг всеми аспектами языка и дали самый низкий грейд с зп 1к$, хотя ответил тогда даже лучше чем на этом собесе.
На самом деле обидно немного что за такие собесы так платят, может фирма с подвохом, хуй знает
294x240, 3:53
>Предложили 3к на руки.
>Впереди еще пара собесов, хочу попробовать выбить 3500
Я бы на эти пиццот разницы попытался выбить бы себе всяких либеральных привелегий. Но если ты Die Roboter, то и хуй с тобой. Die fucking robot!
> пустой класс попросили дописать какие функции сгенерит компилятор
> какие из них будут noexcept
> универсальные ссылки и реализацию std::ref
> какие бывают мьютексы
> сложность вставки в мапу и хешмапу
> немного про рвалуе/лвалуе семантику
Серьезно? Где мои 3к?
Помоему плюсы умирают.
Нет, они не умирают вот здесь и сейчас и не умрут через 10 лет и мб 20.
Но какое-то загнивание.
STL и даже кейворды стали похожи на костылища и выглядят как пиздос рода new_keyword_what_must_do_better_but_do_worse()
UB фиксятся не анальной стандартизацией, а добавлением новых фичь, без удаления старых.
Нахуя это все? Что это даст?
Че они так пекуться о ABI? Кто то на серьезных щах будет переносить многомиллионнострочный проект с одного стандарта на другой?
Все вот эти шутки, про не возможность выучить плюсы, это на самом деле нихуя не смешно же.
Инструментом надо пользоваться, а не учиться набивать шишки пол жизни.
> плюсы умирают
> появились концепты, ренжи, модули, корутины
Охуенно умирают.
> STL и даже кейворды стали похожи на костылища и выглядят как пиздос рода new_keyword_what_must_do_better_but_do_worse()
auto используй
> UB фиксятся
Зачем UB "фиксить"? Ты точно крестовик или просто не понимаешь сути UB?
Хочу использовать типизацию, чтобы не допустить путаницы с примитивными типами данных (ака метры и килограмы, или x координата и y координата).
При этом использование в коде дергается крайне часто, поэтому любой оверхед не подойдет
Вот это помогло. Спасибо!
в chrono так сделаны единицы для часов/минут/микросекунд и т.д.
About std::shit_ptr
About std::absolutely_void
About std::ai_love_love
> Охуенно умирают.
Это вообще не аргумент. Есть такое выражение - пир во время чумы.
>auto используй
Ну охуеть, особенно когда я в объявлении поля класса должен написать, что то вроде
static inline constexpr
>Зачем UB "фиксить"?
Нехуевая часть UB это по факту implementation defined хуйня.
Вполне можно было бы анально загасить все это, заставив в таких ситуация ЯВНО указывать платформу например, особенно при учете того, что прагмы уже давно существуют.
Много писать? Никого никогда не смущала насрать три листа вложенной макропидерастии для разруливания платформозависемой хуйни. А тут хочешь сказать застремает?
У тебя создателя языка и топовых чуваков ловили на незнании UB, ты же понимаешь, что это не норма?
inb4: кокококоптимизации - на хуй не нужны не явные в стременных местах. Код не эта хуйня тормозит. А там где эта - люди и так лазают по дизасму в поисках где бы спиздить еще пару тактов, так что ничего не поменялось бы.
Я вот с позиции лоу-скилл практикующего говорю, а именно на таких должен быть нацелен любой человеческий инструмент, разве что ты не маня из мира с несрущими принцессами.
Чувак, у тебя одна ошибка логическая - плюсы язык не для людей, а для программистов. Всё. Когда ты это поймёшь, все вопросы отпадают.
Они как саперная лопата - жестокие, брутальные, но универсальные и всем подходящие
А до, людей сейчас развивают другие языки - managed в основном. Хотя у раста есть потуги в юзабельность, но это потихоньку выходит из под контроля
В твоих словах - самодовольство и бахвальство, а по факту, потом появляются вот такие статьи
https://habr.com/ru/post/497114/
>>503113
Работаю без образования на плюсах и сях, проект новый, писался мной с нуля. кодить особо некому, сейчас приходится вообще любых воннаби-кодеров со школ, универов, канав и притонов брать, и хорошо, если у кого-то есть опыт хотя бы шарпа, иногда пытаешься джава-скриптера с месячным опытом кодинга переучить, а он не осиливает
а, ну собственно используется во всех микроконтроллерах, системах ерального времени, автоматизациях производства, короче везде, что связано с реальностью и обеспечением средств существования человечества, а не миром поней и радуг
В мк и RT сейчас набирает обороты раст лобби.
Т.к. мк и рт это в первую очередь про не наебывается, а не про скорость. А там где нужна супер скорость просто воткнут плисину или мк помощнее.
Пчел, может я невнятно написал - но это нихуя не плюс есчё. То что я написал - факт. Хуёвый и бесчеловечный. Если твоя предметка предполагает скорость, общение с сишными либами, системку etc - ты БУДЕШЬ юзать плюсы
И это проклятье
в чём проклятье-то, плюсы охуенные, если не хуйню писать, а головой думать чё пишешь
Всё 22 или сколько типа инициализации в голове держишь, уеба?
Хуею с таких как ты блять. Ладно бы ты поо мощность написал, я бы ещё понял.
> головой думать
Ну да, мыж блять не задачи собрались решать, а код писать. Точно, забыл
в том, что ты напишешь хуйню и не подумаешь головой.
>Всё 22 или сколько типа инициализации в голове держишь, уеба?
0
Вспоминаю 1 на время, пока его пишу
>Ну да, мыж блять не задачи собрались решать, а код писать.
А, ну если ты из секты макак, то решай, соединяя свои миллиарды фреймворков изолентой, а я изначально код собирался писать, чем и занимаюсь
Это копия, сохраненная 15 января 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.