>>1728326 Пайплайны, ленивые вычисления, генераторы, вот это всё. int sum = accumulate(views::ints(1) | views::transform([](int i){return i*i;}) | views::take(10), 0);
>>1728315 (OP) >C++20 Нахуя так усложнять язык? ещё stl нормально использовать не научился, а они уже пару новых парадигм успели придумать. Нахуя блять это всё делается, на каком-то тырпрайзе реально не хватало этих ranges и constexpr контейнеров, чтоб всё работало?
>>1728395 Лучше бы разбили С++ на несколько подязыков, отдельный для каждой "парадигмы", и для каждого описали свой стандард, из которого были бы выброшены все элементы, не соответствущие этой "парадигме" конкретного подязыка. Логично, что многие подходы ranges так или иначе являются переосмыслением тех же stl итераторов. В проекте, в котором повсеместно используюется один подход, другой бы не применялся. Итого можно было бы получить подязыки С++STL, C++Functional, C++Ranges и т. д. И все они были бы совместимы друг с другом на уровне отдельных библиотек.
>>1728337 Это блять дрочка вприсядку. Всё что сложнее бесконечной последовательности факториалов суммы чисел в массиве в такой записи вырождается в непредставимый пиздец, который сосет у for(int i...) по скорости написания и читаемости.
>>1728431 В хоть сколько-нибудь больших проектх это не работает, как бы красиво и идеалистично это ни звучало. К тому же, кодинг стайл ещё не значит конкретная парадигма.
>>1728452 А итераторы делаются на указателях, так что итераторы - это тоже сахарок и нинужна. Да и вообще, нахуй кресты, ведь сишка тоже тьюринг-полная.
Анончики, как писать свой аллокатор, сам пишу учусь на QT, но с написанием подобного не сталкивался. На степике не очень хорошо объяснено я тупой просто. Что почитать чтобы реализовать Buddy и SLAB аллокаторы.
>>1728515 > Что почитать чтобы реализовать Buddy и SLAB аллокаторы. Совет номер один от гуру цпп да и в принципе адекватных людей - использовать кастомные аллокаторы только по результатам профилирования и только если это bottleneck
>>1728252 → >Есть какие-нибудь проблемы именно по части содержания?
Именно эту книгу я не читал, а читал его учебник "введение в профессию". По части содержания - всё очень-очень неплохо. Проблема только с тем как он хуево пишет. Натравить бы на эти книги хорошего редактора с писательским опытом - цены бы им не было.
Допустим, у меня есть класс foo, в котором есть константный метод bar. У него есть ограничение только на изменение объекта, на который указывает this, или на что-то ещё?
>>1728682 >>1728337 Есть же уже либа с более адекватным синтаксисом https://github.com/mrange/cpplinq (правда ее уже никто не обновляет). Почему они решили сделать какую-то нечитабельную херню вместо этого?
Почему в первом варианте с шаблонной функцией компилятор не может автоматом использовать оператор преобразования в TestView, а во втором спокойно использует?
>>1728991 Работать то оно будет, но каждый раз писать аргументы шаблона заебывает. Вопрос почему второй вариант работает если это просто частный случай первого?
>>1729062 > что такое линковка Склеивание скомпилированных единиц трансляции (cpp файлов) в единый бинарник > почему при смене abi все пойдет по пизде Потому какой-нибудь бинарник рассчитывает, что в твоём классе будет два поля, но после поломки ABI там осталось одно. Повезёт, если не соберётся. Если не повезёт, то оно соберётся и отстрелит тебе хвост по самое ебало
>>1729251 > Мне чтобы сертификатик получить надо его бахнуть. Про туалетную бумагу слышал, не? Никому твои всратые сертификаты не нужны, повезёт, если прогеры твоё резюме прочитают за пять минут до собеса. >Да и вроде на собесах просят реализовать, в качестве тестового задания. Я так понимаю, эту страшилку тебе на тех же говнокурсах рассказали?
>>1729271 >Про туалетную бумагу слышал Слышал, я ей жопу вытираю
>Никому твои всратые сертификаты не нужны Ты скозал? Если бы они не были нужны, то их бы и не было, а они есть. Как минимум, сертификат показывает, что ты действительно пытался чего-то достичь, а не просто балобол.
>если прогеры твоё резюме прочитают за пять минут до собеса Шиз, а как они ему будут вопросы задавать ты подумал? Им не выгодно так на отъебись делать собес, потому что они блять к себе на работу принимают, чтобы он деньги приносил, смекаешь? Я тебя может удивлю, но в нормальной конторе делается несколько печатных копий твоего резюме для каждого собеседующего.
>страшилку тебе на тех же говнокурсах рассказали? Ну хоть тут ты не обосрался, хотя опять же - что будет в качетсве тестового даже сам Аллах не знает. Всё, что требуется от кандитата так это соответствовать собственному резюме.
>>1729523 >Я тебя может удивлю, но в нормальной конторе делается несколько печатных копий твоего резюме для каждого собеседующего. Всем плевать на твое резюме, у собеседующих есть набор стандартных вопросов и задач которые они задают, после собеседования они отправляют фидбэк и забывают о тебе.
>>1729692 Посмотри что rd() возвращает. Если там одное и тоже то ищи друкгой компилятор. Ну или придумай что-то свое - может система может сгенерировать достаточно слуыайное число, или там инициализируй хешом от текущего времени.
>>1729692 > Двач, с каждым запуском программы генерируются одни и те-же числа, подскажите как исправить. Блять, так там и должны генерироваться одни и те же числа. Ты хоть почитай про это.
>>1730289 >>1730418 Однажды я за пару часов написал затычки для некоторых функций этой либы через winapi, чтобы собрать код с ncurses на шиндовс. И оно даже работало почти так же.
После выполнения блока else (зеленым выделил), происходит не понятная хуйня. Программа не выходит из этого блока и не передает управление оператору вывода после него. Вместо этого она словно подвисает на пару секунд и завершается без сообщений ошибок.
Суть функции: передаю корневой каталог в котором надо найти все файлы (включая файлы в под-директориях), извлечь из них информацию и засунуть в структуру, а структуру в вектор запушить (который на скрине пока не используется).
>>1730782 И да, если убрать этот блок else, то программа корректно выведет все файлы и директории (если выполнить cout << fullPath). При этом сам блок else, как я уже сказал, работает правильно.
>>1730782 Пройдись дебаггером да посмотри, что прога делает и где падает. Алсо, для дебажного вывода лучше делать флаш потока, иначе перед крашем может просто случайно не вывести какую-нибудь строку. Например, можно вместо "\n" делать std::endl.
>>1730782 Ты осознаешь почему ругаются на си с классами? for(auto& p: std::filesystem::recursive_directory_iterator(dirname)) std::cout << p.path() << ' ' << p.file_size() << '\n';
>>1730792 Я пробовал сигналами ловить его (SIGSEGV). Не ловит, значит это не он.
>>1730809 >>1730803 Если бы этот дебаггер еще работал сам нормально... Например, я сейчас смотрю как заполняются поля структур и вижу, что половина почему-то вообще не отображается после записи, хотя, если сделать cout этого поля, то все нормально. Хз, проблема ли это плагина для vscode, либо самого отладчика gdb.
>>1730782 Попробуй проект пересобрать заново. Такое бывает, когда какой-то объектный файл не обновился и срет в память. Если не поможет - смотри отладчиком или valgrind/drMemory.
Короче, нашел я проблему. Надо было заменить одно на другое (пик). Не думал, что std::string нужно выделять память вручную для такого. А главное - никто не жаловался, строки корректно заполнялись...
>>1730903 При том, что я и просто приведение типа делал на [0], без выделения памяти все равно не работало. >перец Чем на пикабу/хабре не сиделось, залетный?
char* туда и передавать, только надо понимать, что в этом случае ты работаешь с си-массивом, а не плюсовым string. А то потом начинаются претензии, что string работает как-то не так.
Что происходит, когда функция возвращает ссылку? Что возвращается то? Адрес переменной? Её значение? Если с указателями всё более-менее понятно, то с ссылками какая-то хуйня. Как вообще происходит возвращение переменной в конце выполнения функции, если этой переменной если она автоматическая уже не должно существовать?
>>1730919 Какой же ты тугой. Функция принимает на вход си-строку, там по дефолту нужно выделять память. То, что методы string и методы, которые принимают ее на вход, сами это делают тут не при чем. И нехуй потом жаловаться, что при использовании string в методе, который принимает char*, ты обсираешься на выделении памяти.
>>1730948 Посмотри дизассемблер. В зависимости от соглашения о вызовах переменная может быть на на стеке вызванной функции, который зачистит уже вызывающая после возврата (предварительно переложив результат вызванной в какую-то свою переменную), а может передаваться через регистр и тогда стирание фрейма вызванной её не затронет
>>1730982 Какой же ты дурень. Когда ты передаешь куда-то внутренности string, они не обязаны делать выделять необходимую память под операцию. Ты пытаешься воткнуть квадрат в круглое отверстие и пиздишь, будто квадрат виноват, а не ты тупой.
>>1731086 >Какой же ты >Какой же ты Какой же ты жалкий. Нахуй ты свою пасть разеваешь вообще, уебище? Если до тебя десятый раз суть мысли не доходит, иди пробздись что ли, я хз. Ты как долбаеб одно и тоже повторяешь, сука. Съеби, реально. Тут для тебя места точно нет. Такие, как ты должны сидеть в своем углу и дрочить друг-другу на своих законных местах. Квадраты у него в отверстия пихают, долбаеб, блядь. Хррртьфу в ебало тебе, чмо пикабушное.
>>1731196 Bicycle. auto mmin (std::vector<std::pair<int, bool>> &a) { return std::min_element(a.begin(), a.end(), [](auto i, auto s){return i < s && i.second == true; }); }
Двач, напомните мне как в C++ (особенно на windows в qtcreator с cmake) подключить библиотеку? Какие файлы качать, куда ложить, что прописывать, я всё забыл.
Мне надо реализовать многопоточное приложение на winapi. Есть один поток, и в этом потоке цикл. При нажатии кнопки цикл должен завершать итерацию и останавливаться, при повторном нажатии вновь запускаться. Как это реализовать?
>>1732363 В общем тебе надо создать поток, а в нем сделать цикл. При нажатии кнопки цикл будешь завершать итерацию и останавливать его, а при повторном нажатии вновь запускать. Удачи братан
Анон, в последнее время часто применяю функциональный подход, вместо оопного. Нравится пиздец, супер удобные юнит-тесты, прекрасная переносимость кода и потенциально отличная распараллеливаемость со всякими фьючерсами и асинками (с которыми я пока не знаком). И мне кажется, что фп - единственно правильный способ программирования. Почему же тогда хаскель не захватил мир?
std::filesystem под виндой, если полез во всякое говно, типа $RECYCLE.BIN кидает исключение после того под капотом winapi выдал acess denied. У меня обработка исключений отключена. Есть ли какой-то платформонезависимый способ предварительно прочекать директорию прежде чем лезть в нее? directory_entry.status().permissions() для всех директорий выдает 511
Напишите функцию, которая обрезает пробелы в конце переданной ей строки. Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти. Сигнатура: void TrimRight( char *s );
Ананасы, выполнил такое задание, но оно неверно выполнено. Что не так, кроме того, что я немного поменял оглавление функции?
>>1732880 Она не оптимизирована по количеству обращений к памяти, например. Ты сначала идёшь по всей строке до конца, а потом идёшь обратно по пробелам. Это O(n+m), где m - количество пробелов. Если вся огромная входная строка состоит из пробелов, то ты дважды пройдёшься по огромной строке. Можно идти по строке и при встрече с пробелом сохранять его адрес и обнулять его, если встретил непробельный символ. Это O(n). Потом скопировать в новую строку всё от начала до полученного указателя, если он не нулевой. Ну и не забыть про налл терминейшн.
>>1732940 Понял. Или запоминать адрес непробельного символа, если после него пробел и не менять его до тех пор, пока не найдётся следующий непробельный и всё заново.
>>1732965 У меня идея, что в процессе смещения адреса в цикле записываем адрес непробельного символа и так до конца, если он так и не попался, то строка пустая. >>1732976 А в чём прикол такой херни? Понятно, что считывать будет до него, но это же херня. Или я что-то не понимаю?
>>1733008 Лол, меня уже сегодня послали с таким решения, сюда пришёл узнать что не так с кодом, нуууу, теперь узнал, хотя тоже недоумевал с постановки задачи.
>>1733008 >>1733013 Лол. Эта задача по си, а не плюсам, но классические макакодебилы плюсовые как всегда тупят как дебилы, совершенно не разбирающиеся даже в сишных строках. Ну хуле, в крестах де объекты, лолкек, как в любой жабаскрипто/питоно дрисне, вот и интеллект того же уровня.
Читал про RB и AVL деревья, потому что мне больше нравятся вторые, а тот же map построен на первом, мне захотелось понять почему. Так вот, во многих туториалах, и на википедии, пишут, что преимущество (одно из, про количество поворотов при вставке/удалении говорить не буду) RB в том, что нужно дополнительно хранить всего лишь один бит информации о цвете ноды, по сравнению с unsigned char для высоты или balance factor АВЛ!
Как авторы этих туториалов собираются выигрывать это место? Каждый раз делать свои ноды и паковать там битики, потому что семь лишних бит это важно? Unsigned char, да даже просто char, для высоты АВЛ хватит с головой, потому что высота дерева это logN, и для высоты 30 должно быть миллиард нод.
>>1733484 Что "скорость"? Я разобрался, в чём преимущество. Да, в RB будет меньше вращений -> должно местами быстрее работать.
Я про том, что в туториалах и на википедии отдельным пунктом упоминают, что RB дерево будет занимать меньше места, чем АВЛ, но по факту так не делают, а если так делать, то это скорее всего убьёт всё преимущество по скорости.
Скорость в наше время зависит от ублажения кеша, а не от битового кулхацкинга (им-то как раз наоборот можно перфоманс заткнуть, забив пайплайны и пролюбившись с кешем.)
>>1733491 Инфа же всё равно в каком нибудь char хранится, который побитно обрабатываеся, всё равно надо по байту выделять, наверное.
>>1733492 И это хорошо, пердолинг никогда и ни к чему хорошему не приводит. Вчера поинтересовался хаскелем и понял, что лучше пожертвовать памятью с одинаковыми данными для каждого потока в программе, чем выгибаться от ментального напряжения в попытке сэкономить пару мегов инфы. Но хаскель по моему слишком куда-то далеко пошёл в своей идее функций.
>>1733526 Это стандартная библиотечная фича, которая не знает, на чем ты там собрался запускать свою программу. Плюс при этом меньше indirection, значит выше скорость.
>>1733526 >>1733529 >>1733537 Это экономия не на памяти, а на аллокации памяти. Нет смысла лезть в кучу за пятью байтами для строки "fuck", особенно учитывая хуевость стандартных аллокаторов.
>>1733555 Если ты, анон, написал "экономить на памяти плохой тон", а указание на то, что это экономия на обращениях в кучу, называешь капитанством, то ты ультрадушный хуй.
Двач, использую заголовки github.com/p-ranav/tabulate Как мне их закинуть в директорию и от туда подключать (к примеру #include "3rd_party/tabulate/table.hpp")? Использую cmake. Просто эти заголовки друг друга подключают по пути #include <tabulate/*.hpp> Подскажите
>>1733878 В C++50 можно будет # include <c_sharp> using System; class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } }
Двач, как мне проитерироваться в контейнере от элемента до этого-же элемента через конец вектора? Есть решения какие? Не хочу большие велосипеды писать.
>>1734425 > есть ли на C++ хуйня типа maven или npm? Vcpkg, conan.
> Или этого можно добиться только написав делающий это вручную makefile? Вопреки здравому смыслу, здесь принято делать так. Или через cmake.
> Так же вопрос насчёт web framework'ов? Можно ли на C++ нормальный CRUD написать как на джувке? Нормальный - нет . Хоть какой-то - да. Есть несколько либ, их никто не использует, и со спрингом в плане крудошлёпства они не сравнятся.
> Если всё хуйня, то как бы поясните чё вы сами-то кроме лаб на крестах пишите? Открой hh, вбей кресты и почитай, что пишут, чем придётся заниматься. Что угодно, кроме веба.
>>1734455 > или сделано для галочки? Да, но кто-то использует.
> https://hh.ru/vacancy/37314205 Там, похоже, не классический бекенд, отдающий html, а очереди и вебсокеты. Этим заниматься на плюсах не так больно.
> А почему? Язык бы мог джаву порвать... Небезопасный и сложноват. Конкретно джаве конкуренты, наверное, только шарп и пщ. Бизнесу нужна проверенная временем и устойчивая к ошибкам кодера технология, которую может изучить куча разрабов, чтобы брать количеством.
>>1734472 Да, это пожалуй лучше будет т.к. это в отличии от >>1734420 не уходит в бесконечный цикл если i = v.begin() + 0; Поэтому ещё большее спасибо!
>>1734474 >Там, похоже, не классический бекенд, отдающий html, а очереди и вебсокеты. Этим заниматься на плюсах не так больно.
А насколько рилтайм аппликации на вебносках лучше делать на C++, чем на каком-нибудь node или той же java? Буст к производительности будет?
> Небезопасный
Ну хуй знает, завезли же smart-ptr. Или не безопасный это больше про еблю с потоками? Ну это да, есть немного. Сложнее будет. А так язык как язык. Не знаю чем прям он такой сложный. По-моему весь спринговысер разбирать не легче.
>>1734487 > А насколько рилтайм аппликации на вебносках лучше делать на C++, чем на каком-нибудь node или той же java? Буст к производительности будет? Имеет смысл, только если будут интенсивные расчёты/вычисления. Судя по словам "реалтайм" и "крутая математика", там так оно и есть. В остальном толку мало, в обычном круде самое долгое - ждать ответ на запрос к базе, и стльного буста не было бы, что джава, что ассемблер.
> smart-ptr Не универсальны, потому что куча либ и старого кода работает с сырыми указателями. Да и без этого хватает способов выстрелить себе в ногу, тот же move.
> весь спринговысер разбирать не легче В спринге ты хоть разбираешь только то, что нужно. Учишь десяток аннотаций, ставишь их в правильных местах - и вот тебе готовое приложение. В плюсах тебе одни только шаблоны будут сниться в кошмарах, что уж UB.
>>1734501 Бля, я даун, я понял. Из-за того, что uint8_t это по сути unsigned char, то оператор вывода выводит data, как символ, а там как раз '1', а это 49 в ascii. Короче, попал в свою же ловушку жокира.
>>1734510 > не говорил Там в вакансии упоминается, имею в виду.
> Так они же сами должны уже мемори менеджить? Менеджат, да. Но в местах вызова можно проебаться. Это всё равно нужно постоянно держать в голове вместо джавовского "я создал объект, передал куда-то ссылки, а дальше пусть GC разбирается".
Как в крестах правильно форматировать строки? stringstream выглядит как говно, особенно если формат строки сложный. Склеивать строки c std::to_string ещё более неудобно. Нет какого-то стандартного sprintf, чтобы вывод был сразу в std::string без ёбли с буферами?
>>1734764 На линуксе обычно хватает make-файлов или вообще build.sh, там системный менеджер пакетов сам тащит то, что нужно. На винде cmake, архивы с либами качаю вручную. Неудобно, но это делается один раз.
>>1734839 >На линуксе обычно хватает make-файлов или вообще build.sh, там системный менеджер пакетов сам тащит то, что нужно. Детектор говноеда красноглазого
И тут я понял, что по меркам ДС это не так много, ибо квартира будет стоить рядом все 15 000 000, и даже если ужаться и отдавать по 200 000, то потребуется шесть лет и три месяца, а гарантии такой ЗП как и существования конторы нет.
Аноны, а есть у кого-нибудь итт опыт создания приложений реального времени? Когда например какая-нибудь операция должна выполниться за время T, не дольше? Есть ли какие-нибудь либы, или паттерны проектирования?
>>1734952 Можно начать с малого, устроиться на подобную работу, через несколько лет питания исключительно гречкой купить за 5 лямов где-нибудь за МКАДом, чтобы добираться до работы за 2 часа. Затем поднакопить ещё сколько-то, взять новую и т.д, пока внезапно не обнаружишь, что тебе уже 50 лет, здоровье посажено, тяночки нет и никогда не было.
Тут есть, кто пишет и дебажит в vscode? Вас устраивает, как работает дебаг? Какой дебаг используете? Вас не смущает то, что stl коллекции нельзя просматривать полностью в удобном виде, а только добавлять каждый интересующий элемент? А это дрочево бесконечное по всяким библиотечным аллокаторам, когда хочешь просто зайти в свою функцию? Или это у меня что-то не так настроено/работает?
>>1735003 Алсо, что скажете о clion? Думаю, может туда перейти... Но мне нравились все эти редакторы простенькие типа sublime text, vscode, только постоянно в них проблемы какие-то с удобством использования gui дебага у меня. VS studio вообще не нравится, тяжелая, открывается годами. Если clion окажется таким же тяжеловесом медленным, то скорее всего продолжу жрать кактус.
Вообще не понимаю людей, топящих за vim/emacs. Неужели там действительно все так удобно, включая дебаг? А автодополнение там есть вообще?
Если я читаю из файла 4 байта сразу в float, то я получаю правильно число. Но если я читаю 4 байта в unsigned char, а потом сдвигаю биты в порядке LE (моя архитектура именно так и считывает), собирая в int, то после приведения (float)int число не верное. Как вручную из 4 charов собрать float правильно?
Как в 17 стандарте работает placement new? У меня есть класс с конструктором по умолчанию, new работает, а placement new не хочет. Более того, он даже для int не работает, хотя я точно помню что использовал его без каких-либо проблем, правда в 14 стандарте.
https://en.cppreference.com/w/cpp/memory/new/operator_new Там ниже идёт operator new(std::size_t sz, bool b) - что это за bool, откуда он берётся? Там написано что placement-версия должна иметь 2 или более параметров, но если я меняю на int - то оно не компилируется. С bool всё работает, но не хотелось бы писать однотипный ctrl+c/ctrl+v оператор во всех классах.
>>1728337 Как по мне только усложняет код. Буквально на днях написал похожий интерфейс для аналогичный фичи на сях. Зачем мне в С++ такое? Даунгрейд ас ис.
>>1734960 Формально, игоры это такой софт реалтайм. что не мешает писать их на джаве Нужен как минимум аллокатор с гарантированым временем худшего случая. Либо по возможности обходиться без динамической памяти.
>>1735069 Эээ, ну и что из этого следует? Риалтайм — это про константное время выполнения, а не про твои маняфантазии. Если на одной железке фпс в одной сцене одинаковый — то это уже риалтайм.
>>1735079 Если этот софт запустить на приборах 15+ летней давности — он перестанет быть риалтаймом из-за возросшего времени выполнения?
Пример отсутствия риалтайма — это разработчики компиляторов и иде, уже середина 2020, а модулей как не было так и нет.
>>1735070 1) это когда ОС (если она есть) даёт гарантию, что ты точно получишь сколько-то процессорного времени (и других ресурсов). Если есть многозадачность, то в правилах переключения между задачами нет никакого рандома и эвристики, всё документировано. 2) и ещё это когда ты сам используешь алгоритмы, которые занимают предсказуемое время, и не имеют никаких "скрытых" просадок. Под такими просадками я имею ввиду всякие аллокаторы и прочие разновидности функций типа ДайЧтоНибудь(), которые могут дать быстро, а могут не найти чего-то и начать грузить, искать где-то ещё, и т.д.
>>1735051 >user defined параметр Какой у него смысл? Я нигде его после же не указываю, верно? Если это просто сигнатура для компилятора как с префиксным и постфиксным ++, то по идее там бы явно было написано про bool. Причём при наличии обоих вариантов оно выбирает в пользу void✱ (его я случайно подобрал).
>>1735070 Есть софт риалтайм и хард риалтам. Хард риалтайм - это когда точно известно, что операции выполняются за столько-то времени и не больше(меньше), и кушают столько то ресурсов и не больше(меньше). Какая-то погрешность может быть заложена, но она обычно весьма мала и тоже точно определена. Обычно хард риалтайм на заводском оборудовании, в военке, авиации, мед оборудовании и так далее.
Софт риалтайм это когда тоже что-то выполняется в реальном времени, но нет требований к высокой точности, например, внезапный проход GC не приведёт к аварии/смерти/прочим фейлам, а просто юзер увидит лаг, или даже не увидит.
>>1735117 > Какой у него смысл? Я нигде его после же не указываю, верно? У него смысл быть user defined параметром. Ты эти параметры явно указываешь в скобках: new(myparam) > Причём при наличии обоих вариантов оно выбирает в пользу void✱ (его я случайно подобрал). Ты в свой placement new передаёшь указатель, ясное дело, что void ★ лучшая альтернатива bool. В третьем случае у тебя не собирается, потому что указатель к инту так просто не приведёшь.
>>1735131 Можешь объяснить почему ub без просмотра видео на час? Фигня с выравниванием, потому что компилятор пытыется считать число как выровненное, но никаких гарантий этого у него нет? У меня не получается сломать: https://ideone.com/ika5RK
>>1735012 Можешь более полный код показать? Я создал файл с одним флоатом, и у меня всё корректно считывает даже по байтам. И если в начале дописать какие-то байты, то тоже нормально работает.
>>1735532 UB это когда в стандарте не прописано,не? Все компиляторы могут сделать его результат одинаковым, но можно написать компилятор у которого результат будет другой и компилятор будет прав а погромист не прав, не? мимо проходил
>>1735552 Да. Более того, существующие компиляторы могут изменить своё поведение в будущем, и те, кто думал, что можно хоть иногда полагаться на UB, пососут больших жилистых хуйцов.
>>1735575 А они не абстрагируют от реализации контейнера. Как и исключения, модули, темплейты, смартпоинтеры, ссылки, поддержка ООП, небо, аллах. Кто тебе сказал, что задача ranges в том, чтобы полностью вытеснить итераторы?
>>1735345 > Можешь объяснить почему ub без просмотра видео на час? Потому что области в памяти перекрываются. Например кто то запишет float в байты с 0 по 3й, а другой считает с байтов 2 по 5й. И кое что может пойти по пизде, из за предустановки что второй флоат никем не мог поменяться.
>>1735685 Компилятор может выкинуть чтение, если считает что в то место никто не писал. Думаю так. float f=blabla[0..3]; blabla[2..5] = 3.1415; f=blabla[0..3] //выкинуто, компилер считает что в f уже считано
>>1735345 Я заметил что ты используешь слово выравнивание. Возможно у тебя произошла путаница с aligning? Aliasing это скорее "псевдониминг". Если совсем просто, то он означает, что в каждом участке памяти находится только одна переменная. Можно сказать, что этому участку памяти дан псевдоним с именем этой переменной. Если компилятор видит что области двух переменных перекрываются, он может решить да ну нахер такого не может быть это UB ) И вернуть просто 1. Можешь нагуглить это реальный пример.
>>1735690 Нет, я именно про выравнивание. Предположил, что на каких-то архитектурах чтение невыровненного флоата сильно медленнее, и потому компилятор использует предположение, что указатели выровненные (что верное в 99% случаев), чтобы программы не работали в два раза медленнее. Первый раз за десять лет самообучения слышу что есть какая-то проблема с тем, что в одной и той же памяти две переменные.
>>1735691 Так union вроде как сам язык определяет - для чего он тогда нужен, если он ub? Я понимаю если там указатели отдельные - тогда он мог бы предположить, но union это же явное указание неадекватности переменных? Ну и ладно, всегда можно пометить как volatile - тогда оно вроде как раз должно отключать подобные оптимизации и предположения.
Единственная известная мне "ошибка" (я не знаю на сколько это ub - случайно нашёл когда пытался понять для чего нужен const_cast) стабильно возникает с const - то что компилятор излишне сильно предполагает что const сохраняет значения. Вот эта: https://ideone.com/pFSkKv
>>1735746 Прям открыть скорее всего никак (только если скопировать проект и открыть сразу две), но при смене ветки если ты настроил gui-утилиту для merge, то ты можешь просматривать и вручную сливать изменения.
Ещё можно вот так, переходишь на нужно ветку, правой клавишей кликаешь по другой и нажимаешь сравнить - и потом можно райткликом применять отдельные строки - но я не пробовал, не знаю насколько это будет удобно.
>>1735820 >Ещё можно вот так, переходишь на нужно ветку, правой клавишей кликаешь по другой и нажимаешь сравнить - и потом можно райткликом применять отдельные строки - но я не пробовал, не знаю насколько это будет удобно. Неудобно >только если скопировать проект и открыть сразу две Походу единственный приемлимый вариант
>>1735734 union для экономии памяти, когда ты точно знаешь, что у тебя или int, или float. Записал int полчитал int - ок. Записал float прочитал float - тоже ок. Записал float прочитал int - UB. > Первый раз за десять лет самообучения слышу что есть какая-то проблема с тем, что в одной и той же памяти две переменные. Ну, теперь знаешь.
>>1736018 Address Sanitizer, написано же. Чтобы искать выход за границы массива и всякие преколы в коде от любителей высрать вот такое >>1736011 На самом деле если не понимаешь что это и зачам — лучше даже не смотри в эту сторону, рано ещё.
>>1736029 Да не почти, все попытки наебать систему типов это UB, просто потому что это обход вообще всего чего можно.
>>1736044 Понятно, а то я думал, что там выделяет только определённый объём памяти и я малость перестарался. Интересно, что VS на такое жалуется только тогда, когда ты лезешь в память чужого процесса, иначе молча принимает происходящее.
>>1736011 Это может быть и не ub, не помню. Вот если бы там были разные типы, int[] и short, тогда было бы. Но в случае union только при доступе по другому типу, не тому который ты в него поместил.
Читаю книгу "Программирование: принципы и практика с использованием C++" И там первый же пример с hello world не совсем рабочий, стоит ли вообще изучать эту книгу? Или есть что-то более стоящее?
>>1736162 Я другой, у Шилдта чистал только про чистый си, и это больше на справочник было похоже - подходит если ты с другого не слишком высокоуровневого языка перекатываешься, но как справочник оно было очень хорошо - прям за час или два можно всё прочитать и вкатится. Не думаю что в книге по си++ что-то поменялось, но не читал. По с++ мне Прата понравился, прям на порядок лучше страуса на полторы тысячи страниц, где дыры в информации и нет ответов на закономерные вопросы.
>>1735345 >Можешь объяснить почему ub без просмотра видео на час? Берёшь стандарт и читаешь релевантные параграфы. Там всё просто в том смысле, что про UB сказано явно.
>>1735345 >Можешь объяснить почему ub без просмотра видео на час? Видео вообще не при чём. Доступ к элементам массива char через glvalue с типом float это нарушение strict aliasing. А в видео про более тонкие вещи.
>>1735552 Не совсем. То, о чем ты говоришь - это unspecified behaviour, т.е. зависящее от разработчиков компилятора, но всегда одинаково. А undefined behaviour - это когда на одном и том же компиляторе сегодня так, а завтра по-другому.
>>1736333 Ну там есть интересный пример того насколько бывают компиляторы пидоры. https://godbolt.org/z/cpFd-T msvc и clang выдают адекватный и ожидаемый вывод строки Test1 (объект t1 был инициализирован конструктором Test1, который в свою очередь задал виртуальную таблицу класса Test1). И только gсс, компилятор пидор, начинает выебыватся и кричать "РЯЯЯЯЯ UB" не выдавая вообще нихуя.
>>1736414 Ну, класс в смысле категория. Есть класс окон-кнопок, окон-чекбоксов, окон-полей-ввода и так далее. Винда не знает что будет делать окно твоей программы, поэтому тебе надо зарегистрироваться в системе.
>>1736403 В чем указанное различие? Зависящее от компилятора == не прописано в стандарте, а значит может измениться в новой версии компилятора, так что ждать там одно и то же поведение на разных версиях глупо. UB в одном и том же компиляторе скорее асего ведет себя одинаково, так в чем отоичие unspecified от undefinef? Если ты про реализацию каких то стандартных алгоритмов или про тот же vtable(его нет в стандарте), то не понимпюч при чем тут это.
Как добавить в программу параметры командной строки? Многие gnu программы принимают их по одному и тому же принципу -f par --foobar par. Это всё пишется вручную или есть какая-то либа, которая всё это облегчает?
>>1736500 >А вот и нет, memcpy как раз не ub Ну тащи определение поведения что будет если я поверх объекта какого-то типа скопирую байтики, которые я взял с потолка с какого-то левого файла
>>1736407 >И только gсс, компилятор пидор, начинает выебыватся и кричать "РЯЯЯЯЯ UB" не выдавая вообще нихуя. Действительно пидор. Нет бы файлы в хомяке тебе затереть рандомом, он всего лишь нихуя не делает.
>>1736429 Да я вроде понятно написал, давай ещё подробнее. Unspecified behaviour действительно ведёт себя одинаково, реализация зависит от разработчика. Как, например, некоторые стандартные алгоритмы, где порядок обработки не всегда регламентируется стандартом.
Undefined behaviour никогда не ведёт себя одинаково, а зависит от положения звезд, планет, Аллаха, оперативной памяти, секса соседа с женой и непредсказуем. То, что ты скомпилил и оно ведёт себя так, как ты ожидаешь - не значит, что при следующем запуске программы или после следующей компиляции будет вести себя так же. Самый простой пример: int* a = new int[2]; std::cout << a[100500]; что не отменяет того, что ты можешь десять лет подряд тестить UB код и получать одно и то же.
Есть ли работа вообще в области написании нативных C++ модулей для node.js. Меня что-то очень заинтересовала тема. Насколько это вообще живая хуйня. Делает ли кто?
>>1736862 А зачем тебе а шад? Ты же байтойобом идёшь работать, а не датасатанистом. Хотя алгоритмы для собеса выдрочить придётся. У нас хуйлоада на плюсах кроме хуяндекса я лично не помню (видел вакансии от авито и баду, но то такое).
>>1736868 >алгоритмы для собеса выдрочить придётся Но их же дохуище просто. Невозможно знать их все и помнить. Я только поэтому и не хочу идти ни на какие собесы, боюсь забыть где надо инкрементировать j, а где декрементировать k, епта... Вообще, кто придумывает эти собесы ебанутые? На практике всегда есть возможность найти нужный алгоритм и по гайду написать. Имхо, если на помидора идешь и от тебя требуют опыт, достаточно только знать примерное название алгоритма, который подошел бы для решения задачи. мимо
>>1736874 Ну, там обычно смотрят на параметры как ты это решаешь, иногда не дают тебе всех данных чтобы посмотреть насколько ты хикка и ссышь открыть рот и тд. Если не знаешь тему — так и говори, и прямо говори с чем хорошо знаком, это же не егэ, результат энивэй будет зависеть от общего впечатления а не от баллов. Я сам в таком говне с обоих сторон участвовал, хз что в яндексе, но всякого бреда уровня верчения деревьев на досках лично я не видал.
>>1736881 >Да это шутка. Но типа алгоговно учить запарно, могут дать пососать. Ну тут уж либо ты не ссышь и ходишь по собесам, либо тебе рано или поздно дадут пососать по з/п. >А чё ты пишешь? А я вообще выкатился из плюсов в мобилки после пары месяцев практики кое где на плюсах, и с тех пор вижу их только браузя вакансии. Сюда обычно забегаю спросить как там модули поживают.
>>1736891 На го по ощущениям пишут скорее там, где пыха/нода/итд жирные, а жаву лень разворачивать, а не в прям ХУЙЛОАДЕ.
На чем пишут текстовые редакторы? Используют ли для этого графические апи типа opengl или directx? Если нет, то что используют? Хочу написать свой hex редактор, ибо нигде, блядь, вообще нигде, не смог найти нормальный, разве что hxd больше всех понравился, но и там не все идеально для меня. Так же, наверное, не хочу использовать никакие готовые формы типа TextBox и т.п. Как ни странно, инфы я найти на эту тему не смог особо... Ну и сама архитектура редактора интересует велосипедить особо не хочется. В качестве хранимого буфера могу представить какой-нибудь стек. Ну, а для поиска по файлу - обычный поиск подстрок.
>>1736937 >к же, наверное, не хочу использовать никакие готовые формы типа TextBox и т.п. Как ни странно, инфы я найти на эту тему не смог особо... Ну и сама архитектура редактора интересует велосипедить особо не хочется. В качестве хранимого буфера могу представить какой-нибудь стек. Ну, а для поиска по файлу - обычный поиск подстрок. На как раз Direct2D или там OpenGL, Рисуют внутри консоли, без виндового API
>>1736937 >На чем пишут текстовые редакторы? На чём удобнее конкретной команде/программисту. >Используют ли для этого графические апи типа opengl или directx? Ты ебанёшься на шейдерах рисовать гуи, это оверкил. >Если нет, то что используют? Гуи фреймворки или пилят свой (если писали игру и дописывают что-то к ней — то на своём слою абстракций или берут какую нибудь готовую либу вроде саблайма на skia). >Так же, наверное, не хочу использовать никакие готовые формы типа TextBox и т.п. Как ни странно, инфы я найти на эту тему не смог особо... Ну и сама архитектура редактора интересует 5 минут гугла и вот такой вот рещультат https://chromium.googlesource.com/skia/+/e73aa7573279cda200b80c1a858ae00762a5516b/experimental/editor
>>1736937 Со стороны геймдева я бы взял что-то типа freetype для вывода букв, и sdl для обертки над окошками. А может, даже взял бы что-то вроде litehtml для рендера, собственно, html. А то, что ты ищешь, называется text rendering component, и одна из самых распространенных, это Scintilla
>>1737099 сейчас гуйню на С++ впринципе делают только немцы, дрочащие на кутя, и эстеты. Очень рекомендую освоить шарпы всем крестобогам, отличное дополнение к крестам
>>1737139 Там qml, ты пишешь очень простой код с вставками на жс, оно дёргает функции на крестах, которые ты специально объявил на подъязыке кюта. Звучит странно но это реально удобно. И все это можно рисовать мышкой, и добавлять скрипты чтобы автоматом переводить из формата тз в прогу, я очень апнул скорость программирования как допер.
>>1737157 Не, qml это просто gui в твоём случае, почти. Разрешение экрана будет автоматом, а вот остальное... Конфиг наверное будет искаропки, даже от ОС не зависит, может быть в файле, может в реестре, и тебе не важно где.
>>1737301 >В этом случае memcpy подтвержденный стандартом метод решения данной проблемы. Так значит тебе не составит труда притащить определение поведения
>>1736604 >>1736749 Это все из-за strict aliasing rule. Если упрощенно, то если указатель видит два указателя несовместимых типов, то он считает что они указывают на разные объекты. Соответственно когда код пишет в первый указатель, компилятор может посчитать что второй не поменялся и соптимизировать чтение из него нафиг.
>>1737438 >но такое случается только при включении дополните но такое случается только при включении дополнительных флагов, насколько я знаю даже gcc по умолчанию позволяет делать type punning с enum.
>>1737423 Да мне-то зачем. Я ведь ~свою жену~ плюсы сам пользую и другим не навязываю, а вот ты ходишь по другим тредам и ноешь, что твой раст всем нужен, но все тупые и не используют его.
>Informally, two types are similar if, ignoring top-level cv-qualification: > they are the same type; or > they are both pointers, and the pointed-to types are similar; or > they are both pointers to member of the same class, and the types of the pointed-to members are similar; or > they are both arrays of the same size or both arrays of unknown bound, and the array element types are similar. > they are both arrays of the same size or at least one of them is array of unknown bound, and the array element types are similar.
>>1737342 Мне по работе надо было написать REST сервис - я нашлепал на ASPNet core. Кресты таки для другого. Хотя, в последнее время, меня мучает мысль о том, что 90% нашего софта можно переписать на шарпе а еще есть кернелдрайвер который переписать нельзя. Но остальное то можно.
>>1737469 Это явно не все, потому что тогда любой указатель, любая рефка была бы ub. int i; int* r = &i; А в твоей цитате рассматриваются только пары типов или пары указателей.
>>1737483 Дополню что struct POD { float f;} pod; float pf = &(pod.f) Точно не UB. Сложнее если полей в поде больше, потому что может быть паддинг. sruct POD2 { float f1 char[4] possible_padding; float f2 } float pf2 = (&(pod.f))[1]
>>1737500 Ты там с зеркалом разговариваешь? Может ты не понял, но я тебе уже указал что пруфы "для двух указателей на разные типы" никак не доказывают ub в унионе с под структурой.
>>1737423 Дак там это тамщета фаерфокс хуя пососала с растом в прочем как и любой кто его действительно использовал. А вообще язык хуйня неимоверная, какую еще поискать надо, что это блять за убийца C++, который безопасно работает с памятью? Ты там ебу дал?
>>1737782 Любой современный язык небезопасен, так как компилятор содержит ошибки (статистически должен из-за сложности) и может сгенерировать некорректный код.
>>1737782 Что тебе мешает не абузить ансейф? Что тебе мешает тестить точечно ансейф код, повышая шанс отлова опасного бага? Ведь в С/С++ весь код - UB, а в расте хотя бы знаешь где может быть заложена свинья. Есть проекты и без ансейф кода вообще, он не везде нужен.
>>1737790 Удачи тебе найти переполнение буфера в джаве или сисярпе, лол (они уже могут компилиться в нативные бинари). Не, в самой инстраструктуре могут быть такие дыры, ибо она написана на С/С++, но есть языки, которые неуязвимы к ошибками памяти (тащемта любой managed язык)
>>1737845 Было пару раз в 2018 брал заказы, на QT быстренько нашлепать приложение, однако потом это перерастало в обычную работу. Но это большая редкость.
Скачал курсы по обоим, а там просто трата времени бессмысленное. Какие-то дроби, числа огромные. И самое главное, что там нихуя не объясняется что они делают. Просто блять пишут всякие дроби, а потом говорят - это дроби. Ну ахуеть! Я понял, что бывают разные переменные, но причем тут всякие дроби? Вы что программируете дробями? Пиздец нахуй. Нечто подобное помню было когда изучал HTML. Там тоже какую-то хуйню втирали, которую нигде не используют. А верстать на нем я научился когда делал себе одностраничный сайт. Вот только с С# и C++ так не получается. Помогите с чего начать, как научиться использовать эти языки, чтобы потом дополнять нехватку знаний дробями из курсов?
>>1738215 Грубо говоря, в языке всего 32 буквы, а в байте 256. Значит уже на букву надо около 5 битов, а не 8. Дальше, буквы встерчаются с разной частотой. Гласные ОЕАИ занимают 33% текстов, а цщф - меньше процента. Значит, можно частые буквы кодировать 2-3 битами, а редкие более длинными последовательностями. zlib, сейчас вроде еще brotli
>>1738324 Не обязательно ждать окончательного утверждения нового стандарта, чтобы уже начинать писать компилятор, реализуая сначала устоявшиеся фишечки, которые редизайнить потом не будут.
>>1738371 Как тогда сделать что-бы строка из stringstream переместилась в мою строку без копирования? std::string&& string = stringstream.str(); сработает копирование или перемещение? Я немного не в теме всех этих перемещений. https://en.cppreference.com/w/cpp/io/basic_stringstream/str
>>1738470 Я бы посоветовал вообще не юзать спинлок если ты не уверен на 100% что делаешь. Понять нужен ли он тебе можно по следующим пунктам: — У тебя мало потоков (желательно <4, иначе накладных расходов из-за дрочащих циклы потоков будет явно больше чем от переключения контекста каким нибудь мутексом), т.е. использовать с какими нибудь корутинами шедулящимися по потокам точно хуёвая идея; — Изменение быстрое (по крайней мере не особо жирное, если будешь переиндексировать всю базу эти спинлоки отправят тебе процессор нахуй в троттлинг).
Насколько я понимаю понятие оптимистик лока — да, но если хочешь спать спокойно лучше выбери что нибудь более предсказуемое.
Двач, можете пояснить в двух словах где надо ставить const, а где нет. Нужен ли const параметрах функций для фундаментальных типов и нужен ли он для переменных в телах функций?
>>1738857 1. литеральные строки автоматически const 2. желательно ставить const перед таблицами констант 3. все указатели на сущности, которые ты не собираешься менять, объявлешь как "const foo ⛧" 4. опционально const int pi = 4; // здесь const запрещает pi++
>>1738857 const нужен там, где ты внезапно не собираешься менять содержимое. Например: если у тебя функция возвращает длину строки, не меняя ее, то size() const. А если ты делаешь функцию set_value(int x) которая меняет состояние объекта, то не она не const. Параметры функций примитивных значений не надо - они передаются копией по значению. То что ты поменяешь параметр внутри функции, внутри функции и останется. Если же ты передаешь объект внутрь функции, то опять же, если ты гарантируешь что не будешь его менять, а только считаешь из него данные - то const. Если же ты именно меняешь полученный объект - то не const. Зачем он переменным - загадка. Зачем заводить константную переменную внутри функции? Константы надо хранить где-то в другом месте. Завести отдельный класс или неймспейс.
>>1738962 const_cast нужен, чтобы приводить неконстантные вещи к константным в стиле "современных плюсов". Снятие константности таким образом ведет к UB, что и написано в стандарте. Компилятор как раз может конст каст соптимизировать и положить значение в read only память.
>>1739145 >приводить неконстантные вещи к константным А смысл? Если они внутри либы остаются неконстантными. А значит это все равно UB когда их поменяют.
>>1738930 > Зачем он переменным - загадка. Зачем заводить константную переменную внутри функции? Что значит зачем? Затем же, зачем и параметры передавать по константной ссылке. auto const values = GetValues();
Блджад, я не понимаю. Подскажите как организовать проект, чтобы можно было его одной кнопкой собирать, генерировать документацию, устанавливать зависимости и т.п. Хотя бы последнее.
Хочу сделать это с помощью cmake. Желательно версии 3.10, но если очень надо, можно и свежую скомпилировать. Сейчас есть следующие директории (может это надо как-то реорганизовать, я не знаю): build doc test lib — сюда хочу запихивать сторонние библиотеки src — собственно, исходники проекта. Вероятно тут будет лежать только main.cpp, а остольное распихано по директориям типа src/core/, src/server/ и т.п. Сейчас это собирается баш скриптом, который выглядит так cd build cmake .. cmake --build . cd .. doxygen Doxfile # генерирует документацию для всего, что в src/*
Есть одна либа с гитхаба, которую я хочу использовать. Если сделать git clone, то создастся следующая структура YetAnotherLib/ YetAnotherLib/doc/ YetAnotherLib/cmake/ YetAnotherLib/CMakeFile.txt ... YetAnotherLib/YetAnotherLib/ — собственно, сами исходники.
Сейчас я в main.cpp могу написать #include "core/MyObj.h" Но не могу написать #include "YetAnotherLib/YetAnotherObj.h" А хотелось бы. Не "YetAnotherLib/YetAnotherLib/YetAnotherObj.h" и не "lib/YetAnotherLib/YetAnotherLib/YetAnotherObj.h". Тем более, что в той либе есть инклюды типа "YetAnotherLib/subdirectory/SomeOtherObj.h", так что даже если тупо скопиастить директорию с исходниками или всю директорию с гита в src/, собираться не будет.
>>1739469 Почему параметры это как раз понятно. Функция в другом файле, написана другим человеком. А тут то зачем? Если только склероз и ты забыл зачем получал переменную. const int a = get2() const int b = a * a
>>1739561 Тоже конаном недавно пользовался, все завелось под виндой. Чего то не было в бинарном виде в дебажном виде, собрал из сорцов. Добавлял cpr и openssl чтобы качать сайты и какую то либу чтобы обрабатывать изобоажения.
>>1739605 > Почему параметры это как раз понятно. Функция в другом файле, написана другим человеком. То есть в своих функциях ты не по константой ссылке данные передаёшь? > А тут то зачем? Очевидно, чтобы подчеркнуть тот факт, что ты эти данные собираешься только читать
>>1739650 Пиши структуру, которая будет содержать эту структуру и две ссылки на саму себя. Создаешь новую структуру оператором new и задаешь для нее предыдущую, для предыдущей следующую.
Да ну, чел, попытайся сам сделать. Отучивайся быть пидором. Сделай отдельно структуру и эти алгоритмы добавления удаления хуения и скинь код сюда если где-то ошибка есть или чет конкретное непонятно.
>>1739735 Не умеешь искать. У меня однокурсники целиком классы списка находили. Но если совсем не можешь, используй STL, скажи, что по постановке задачи все верно.
Да не нужна тебе инфа никакая. Для этого. Просто создай структуру, и сделай 4 функции.
1. Создать первый элемент списка. Принимает параметры(все кроме указателй), инициализирует, сохраняет. Возвращает указатель на структуру 2. Добавить элемент. Принимает первый(но это не точно) элемент списка, идёт по указателям до конца(пока не nullptr) и когда доходит до конца добавляет. (Первые 2 можно объединить) 3. Вывод всего списка. 4. Удаление всего списка из памяти. Либо сначала, либо с конца, как хочешь.
>>1739753 Ну да, вместо того, чтобы вручную качать каждую либу, вручную искать её зависимости и собирать, а затем в вижуалке все эти либы вручную прописывать, люди используют vcpkg, который всё это делает сам. Ух, пердолинг так пердолинг.
>>1739650 Делай все по частям, по шагам. В этом и есть смысл программирования. Что такое указатели знаешь? Что такое new/delete? Ну вот у тебя есть структура, там кроме данных есть указатель на следующую запись списка и на предыдущюю. Включай логику, рисуй схемы. Каким может быть указатель? Правильным на другую запись, или нулевым, например в последней записи. Как пользоваться списком? Надо где-то завести указатель на первую запись, остальные ты сможешь получить переходя по указателю на следующую. Как удалить список в памяти? Надо удалить каждую запись, начиная с первой. Как вставить элемент в конец списка? Дойти до последнего элемента, там следующий будет nullptr, вписать туда указатель на новый элемент. Как удалить элемент из середины списка? Надо чтобы список остался в согласованном состоянии, значит надо изменить указатели так, чтобы указатель предыдущего начал указывать на следующий (и наоборот), а на этот теперь никто не ссылается и его можно удалить delete. Как сохранять в файл? Ну видимо открыть файл и записать каждую запись списка по порядку, каждое поле по порядку. И т.д.
>>1739826 > эфемерную Сейчас бы не мочь задеплоить свой проект на сервер с линуксом, потому что не дрочил на кроссплатформенность и делал всё для винды.
>>1739852 Очень противно качать какую то либу с гитхаба, а там расширения компилятора или уникальные типы. На малиночку-ардуиночку не засунуть. Нормально делай нормально будет.
>>1739869 я писал выше про проекты, а не про либы. Либы должны быть кроссплатформенными по возможности. А вот коммерческий проект пилить под то, где оно нахуй никогда не потребуется - смысла нет.
>>1739650 Можно хоть обчитаться, но все равно обучение сводится к методу проб и ошибок. Алсо я читал, что когда еще мышечная память задействована наряду с мозгом, запоминание гораздо эффективнее, т.е. надо вручную все вводить, а не копировать куски.
>>1741194 У меня как-то заблочили учётку и попросили телефон для разблокировки, даже удалить учётку без указания номера нельзя. И с тех пор я регаюсь там на 10-минутное мыло, и каждый раз, когда учётку блочат, регаюсь заново.
>>1739600 >с cmake+mingw же полный пиздец. Поставь MSYS2, там все искаропки, пакман как в арчике, вообще пердольства нет. Куча пакетов под небо и аллаха, даже для Qt статически собранный пакет есть.
>>1741266 Поставил, понравилось, спасибо. Раньше только cygwin пробовал, в котором пакеты ставятся очень странно, ну и в git-bash нет менеджера пакетов.
Нет времени сейчас читать книги, потому только в них есть. Подскажите как верно интсанцировать функции, в том числе, которые возвращают некоторое значение. Всё, что нашёл, это хабр, но этого недостаточно.
>>1741996 Да, это. Но почему низя прост ниже объявить список типов для специализации, как я хотел выше или как предлагают для функций не возвращающих чего-то?
>>1742000 ты либо делаешь специализацию, как это сделал я, либо обьявляешь нужную тебе функцию без какого-либо отношения к тимплиту, т.к. при overload resolution выберется именно функция, а не тимплит по приоритетам. Третьего не дано.
Я не совсем понимаю, что такое список типов для специализации. Нужна специализация - пиши, нужна generic специализация для нескольких типов? Ебашь SFINAE, или концепты.
>>1742009 По мере надобности, я не настолько йоба прогер, чтобы использовать такое. Уже не первый раз натыкаюсь, даже читал у Страуструпа, на невозможность перегрузки по возвращаемому типу, что странно и вроде бы даже понятно.
>>1742011 а, блядь, я наконец-то понял о чем ты. Специализировать можно, а вот перегружать - низя, т.к. overload resolution не поймет, что конкретно ты хочешь.
Котаны, короче пожилые ммодрочеры решили вкатиться в С++, так как мы уже хуеву туч лет играем в ММО совместно, решили и совместно ворваться в С++. Мы не знаем никаких языков программирования, стоит ли начинать именно с С++?
>>1742072 Зачем вам этот вкат? Если вы хотите сменить карьеру - то С++ это один из худших возможных вариантов, в связи с отсутствием джуновских позиций.
Если чисто для себя порофлить - тогда ок, и с С++ начинать тоже вполне ок. Книги в шапке говно, но я вообще не видел ни одной нормальной книги по С++ для новичков.
>>1742072 C++ - ебануться какой сложный язык, и многие, кто начинает с него, потом забивают на программирование. Но если достаточно усидчивые - дерзайте.
>>1742122 Фишечек всяких намного больше, чем в других языках. Изучать эти фишечки намного дольше. И потом при чтении кода приходится дольше вспоминать, как они работают.
Конкретно? Темплейты; сложно победить UB. а ещё сложнее из-за тех долбоёбов сверху, которые РЯЯЯ UB НО РАБОТАЕТ; прямая работа с памятью; при юзании сырых указателей легко обосраться; нет универсальных способов для сборки проектов и разрешение зависимостей, даже для подключения сторонних библиотек нет универсального способа, собирать эти библиотеки из исходников зачастую самому; постоянно надо думать, как не проебать хоть 0.000001% перфоманса, вебня на крестах; компиляция может длиться часами; километровые и непонятные ошибки компиляции.
Но зато потом любой другой язык будет казаться псевдокодом.
>>1742137 Мне наоборот было проще осваивать С++. В нём абсолютно нет магии, которая есть в скриптовых\VM-based языках. Любая высокоуровневая сложная конструкция без проблем разбирается на простые манипуляции байтиками, в отличии от питонов\шарпов на которых я писал и нихуя не понимал, что там под капотом.
>>1742142 Я другие языки учил уже после плюсов и хз, каково их учить с нуля. Но почти все пишут, что легче. На скриптовых зато легче решается класс задач, когда нужно тяп-ляп - и готово, хоть и не до конца понимаешь, как это работает. Но в них этого и не требуется, там подход - верить в магию и надеяться, что не выстрелит.
Решил установить Qt, скачал новый онлайн-инсталлер, и увидел, что нельзя пропустить авторизацию, как раньше. Начиная что-то подозревать, полез гуглить. И нашёл это (да, я слоупок): https://www.qt.io/blog/qt-offering-changes-2020
> Installation of Qt binaries will require a Qt Account > Long-term-supported (LTS) releases and the offline installer will become available to commercial licensees only > everyone, including open-source Qt users, will require valid Qt accounts to download Qt binary packages. We changed this because we think that a Qt account lets you make the best use of our services and contribute to Qt as an open-source user. > We want open-source users to help improve Qt in one form or another, be that through bug reports, forums, code reviews, or similar. These are currently only accessible from a Qt account, which is why having one will become mandatory.
М-да. Так похоже на Oracle с жабой: либо плати, либо будь бета-тестером. Понятно, что хочется заработать денежек, но такое пидорское отношение к пользователям опенсорса нищебродам вызывает очень много вопросов.
>>1742142 Это, скорей, относится к Си или "си с классами". Во что разворачивается какая то конструкция с++ угадать очень трудно, особенно новичку. А главное, малейшее изменение, причем не тобой, может кардинально все изменить. Ну например, в глобальное пространство имен кто то добавит функцию, из за этого выводы темплейтов станут другими, и твоя функция, которую ты считал константной времени компиляции, станет рантаймовой с оверхедами.
>>1742224 Сорцы-то есть, они любезно написали в своём посте, что по-прежнему можно собрать самому, не регистрируясь. Понятно, что большинство этого делать не будет и смирится с новыми условиями.
>>1742142 Вот кстати поддвачну, на шарпе вроде приятно писать, библиотека заебись, сахарок, всё такое, но вот если надо понять, какие конструкции приводят к аллокации из кучи, а какие нет, то начинается ебучая магия. В С++ с этим гораздо проще.
>>1742137 > нет универсальных способов для сборки проектов и разрешение зависимостей, даже для подключения сторонних библиотек нет универсального способа, собирать эти библиотеки из исходников зачастую самому Вот это пожалуй единственное, с чем может столкнуться новичок и с чем ему придётся серьёзно разбираться. Хотя в последнее время в 99% случаев написать vcpkg install my_liba. Всё остальное - это сложности, которые возникают уже у людей с опытом.
>>1742154 Страуструп уже лично просит не начинать изучение плюсов с Си, это ведет к тому, что люди пишут на Си с классами. Если нужен Си - учите Си, если нужны плюсы - учите плюсы. "Но си это фундамент!!1" - ASM тем более, но лучше начинать учить что то прикладное, а потом идти вглубь, не нужно школьникам про p-n переходы в транзисторах рассказывать, как только они захотели поучиться проге.
>>1742214 >uniform initialization можно везде хуярить Кроме реализации хитровыебанных шаблонов, потому что одному сотоне известно какие конструкторы будут у типа, и во что твои скобочки перегрузятся.
>>1742261 >люди пишут на Си с классами Как что-то плохое.
Двач, при запуске программы выбрасывается исключение, во время дебага всё нормально как бы я не пытался отыскать проблему. Как мне найти в какой строке происходит ошибка если код большой и много заголовков?
>>1742489 >Посмотри, какое исключение и примерно где выбрасывается, подключись дебаггером и жди >Двач, при запуске программы выбрасывается исключение, во время дебага всё нормально как бы я не пытался отыскать проблему. Как мне найти в какой строке происходит ошибка если код большой и много заголовков?
>>1742501 >Тебя не учили подключаться дебаггером к релизной версии? Не учили >Ну блядь если ты не знаешь, какая часть кода у тебя за что отвечает Выбрасывается std::out_of_range what(): std::substr. Мои std::substr ничего не выбрасывают >то может и не стоит этим заниматься? Хуй будешь? >Пиздец, оберни в таком случае всё в try-catch и потихоньку выноси оттуда код, вот ты и узнаешь, где ты обосрался У меня много много кода, я заебусь всё оборачивать и код работает с Qt что не позволяет оборачиваться в try-catch.
>>1742522 >сказала чмоха с подобными высерами: >Посмотри, какое исключение и примерно где выбрасывается, подключись дебаггером и жди >Двач, при запуске программы выбрасывается исключение, во время дебага всё нормально как бы я не пытался отыскать проблему. Как мне найти в какой строке происходит ошибка если код большой и много заголовков?
Пишу в Visual Studio под винду. Консоли нет. Как лучше всего искать узкие места в коде? Есть ли какой-то уже готовый инструмент, чтобы не писать руками вывод в файл? Код обрабатывает большой поток данных в цикле, и как-то бы автоматически рассчитывать среднее время, которое на это все уходит, чтобы сразу наглядно видеть, где программа тратит реально много времени.
>>1743224 Ксеон из раздела /hw за 20 000 с 16 - 24 потоками Федора или бабанта с КВМ/КСЕН Ну и далее устанавливаешь систему нужную на вирутальную машину
>>1743285 Открываешь hh, смотрешь что в вакансиях. По хорошему надо знать сами плюсы, включая STL.
Дальше можно посмотреть Boost, почти всё там - кандидаты на попадание в стандарт. Еще можно посмотреть репу awesome-cpp, там тоже куча всчких фреймворков, среди которых можно найти интересные лично тебе.
>>1742261 А как начинать то блядь тогда? С++ создавался на основе С, причём когда-то давно был С с классами, а потом добавили шаблоны, наследование и прочее.
Нужно написать сервер для браузерной игры. Тк за хостинг я плачу из своего кармана, то есть желание сэкономить. Имеет ли смысл писать на плюсах место пыхи? Сильно ли php уступает c++. Даст ли это возможность сэкономить на аренде менее мощного оборудования? Но еще я ни ращу такой хуйней ге занимался. На пхп наверное всякие проблемы безопастности исправлены, а на плюсах нужно будет самому писать все, а я нихуя не знаю какие угрозы могут быть
>>1743381 Правильно я понимаб, что если взять curl то можно легко написать взаимодействие с сетью и потом об этом не парится, а просто заниматься дальнейшей обработкой?
>>1743397 Точно............ А есть че по проще буста. Я могу загуглить, но может есть пооверенные варианты. Но правильно я понял, что если я использую библиотеки, то не должен думать о сетевой безопасности?
>>1743373 С++ конечно быстрее в разы, и по памяти тоже можно выжать сильную экономию. Грамотно написанный сервер можно хоть на одноплатнике держать, у которого мощности как у паршивого смартфона. Тут главное чтобы программа не уперлась в I/O, потому что если она будет делать по десять запросов к базе на каждый пук, то С++ ей ничем не поможет. То есть, сразу надо думать, куда и как часто будут ходить данные, и это не просто "взять и переписать на другой язык". Правда, сложность разработки веб херовин на С++ довольно высокая, особенно если брать в расчет безопасность. Если браться за такое, то либо для себя по фану чтобы научиться, либо если уже хорошо знаешь, что делаешь. А если под заказ и без опыта в таком деле, то на крестах писать не самый удачный вариант — наогребаться можно просто лютейше.
>>1743408 >Но правильно я понял, что если я использую библиотеки, то не должен думать о сетевой безопасности? Если используешь библиотеки, безопасность не под твоим контролем.
Какой блин boost asio мне советовали? Мне еще и писать http парсер. Найду че по проще. Уже приметил парочку библиотек, правда для http 1.1. Может для http 2 что нибудь найду.
>>1743883 английский учи бля никакого на русском ну и как обычно посмотри пару видосов по азам потом возьмись за небольшие проекты и сверяйся с SO + cppreference
Если про Питон и ЖС литературы до жопы, то на плюсах тоже. И на Питоне все стандартно читают несколько основных хороших книг для вката, все на русском.
>>1743810 > писать http парсер Почему, ну почему крестовики никогда не используют готовые http-либы и каждый раз их пишут с нуля чуть ли не через winapi? Бог дал им Poco, cpp-netlib и ещё сотню других, но нет, надо снова и снова изобретать велосипед. HTTP/2 не нужен.
>>1743905 > Почему, ну почему крестовики никогда не используют готовые http-либы и каждый раз их пишут с нуля чуть ли не через winapi? Бог дал им Poco, cpp-netlib и ещё сотню других, но нет, надо снова и снова изобретать велосипед. Так я пишу, что не собираюсь этого делать и ищу либу где сделано за меня. > HTTP/2 не нужен. Почему? HTTP 1.1 старый же очень
>>1743926 > ищу либу где сделано за меня Полно всяких, см. Communication: https://en.cppreference.com/w/cpp/links/libs Про парсинг http забудь. Даже если взять готовый парсер, придётся руками прикручивать SSL/сжатие/менеджмент потоков/хелперы даже для банального роутинга.
> Почему? HTTP 1.1 старый же очень Но используется повсеместно. 2.0 даже не поддерживается толком нигде.
>>1743597 Вряд ли, это как просить книгу с описанием багов.
Разбирайся внимательно во всяких галочках и настройках в стороннем софте и либах, которые используешь. Многие появились не от хорошей жизни, и содержат в доках описание, как делать так, чтобы не поимели.
В каких редакторах в конторах пишут код С++ в линухе?
Знаю Sublime, ну и всякое безумие типа простых редакторов.
Так же вопрос по настройке отладчика и компиляции, ибо последний раз после того как поставил Sublime и установил gcc всё равно ругался на отсутствие gcc.
>>1743983 Нельзя. Можно только учебник Борескова, и RedBook по OpenGL 4.5. На ангельском литературы не особо много, но она весьма годная. Мимо пишу компутерную графику уже три года.[spoiler ]Задавайте ответы если интересно.[/spoiler]
>>1744032 Он позволяет прогоаммистам управлять железом (память, вычисления на видяхе, вот это все) а не вызывать функции черного ящика, которых может и не быть.ж
>>1744032 Идея вулкана и ДХ12 - это суперпуперлоулевельное АПИ, которое должно помочь выжать больше ФПС на том же железе. Программировать его ощутимо сложнее
>>1743962 Вейленду уже больше десяти лет, а всё никак не прикрутят нормально хотя его по SSH нормально не передашь и не прорендеришь удалённо IPv6 уже почти 25, а все сидим на четвёрке.
Некоторые стандарты очень долго переходят от бумаги к реальному пользователю.
>>1744247 Не слушай этого долбаёба, в шапке есть прекрасные книги, которые можно прочитать. Именно КНИГИ, а не справочники. Справочники нет смысла читать в 2020, для вката достаточно книг,из шапки разумеется интернета и практики, а если справочная информация понадобится, то cppreference + другие источники - более чем достаточно.
Двач, пробую отдебажить свою программу Cmake/Qt в Visual Studio, при запуске пишет "Запуск программы невозможен, так как на компьютере отсутствует Qt5Widgetsd.dll", в чём проблема?
Сап двач, есть один код пик1 Он должен считать, через сколько слов повторяется слово. Но эта залупа в любом случае выводит максимум - 2!!!! пик 2 Я подозреваю, что дело в том, что ++number_of_words срабатывает лишь один раз - почему?
>>1744859 Потому что у тебя cin не кончается. Если можешь, въеби в консоль после своих слов символ конца файла, не знаю, какой он там на винде. Или лучше из файла читай, у него точно есть конец. Ещё можно getline, потом собрать istringstream. В общем, ебись, удачи.
Сделал всё как в инструкции - https://github.com/YOU-i-Labs/easy_profiler Но видимо не может слинковаться, пишет error: undefined reference to `__imp__ZN8profiler5BlockC1EPKNS_19BaseBlockDescriptorEPKcb' Как исправить проблему?
>>1745404 >>1745413 Я бы хотел вкатиться в десктоп и парсинг различных сайтов. Ну и прикольно было бы всяких ботов делать, чтобы видео с ютуба качал. Я пробовал конечно в Java вкатиться, аж целых два года (но с работой в кол центре после рабочего дня ничего не хотелось, был выжат как лимон), но как-то не пошло, да и не мог с целью определиться. PHP - попробовав, сразу решил, что это не моё. Python - вроде норм, но я никак не могу привыкнуть к динамической типизации и вакансий нет в моем городе. Вот я думаю, все же в C++ идти или в C#. С одной стороны все в моих руках и без ограничений в креста, а с си шарпом...ну я хз, не могу привыкнуть к её философии, да и тоже самое, что Java, только с привязкой к майкам. Ну а кресты живее всех живых и вроде не надо городить огород при написании программ. Ну и мне всегда хотелось с указателями подробнее познакомиться и работать с ними.
>>1745474 В 2020 не стоит знакомиться и работать с указателями. Что же касается парсинга, на шарпе ты напишешь его раз в 5 быстрее. Но написать не проблема. вот собрать openssl - это другая история
Ну хоть один раз мы не перекатываем тред как только 500 постов наберется. А то катаетесь быстро пиздец, что по плюсам 7 тредов живы. Предлагаю сделать перекат как умрет 12 тред.
>>1745771 С++ тоже для борщехлебов. Ну или для некрофилов, которые копаются в легаси. Новые проекты, тем более крупные, тем более требовательные к безопасности, не пишут на С++, и уж тем более не пишут на С. Эти языки держатся на плаву исключительно из-за УЖЕ написаннного кода, который просто везде.
>>1745837 Inserts a newline character into the output sequence os and flushes it as if by calling os.put(os.widen('\n')) followed by os.flush(). (from en.cppreference.com) То есть после \n ещё вызывается flush, как я понял.
>>1745842 Прямо АДОВЫЙ хуйлоуд - это редкость. Для 98% компаний тот же Го с удобными корутинами вполне себе быстрый, несмотря на наличие сборщика мусора.
>>1745879 FANG - 4 компании. У Фейсбука посещаемость - половина челевеческой популяции в месяц, про гугл вообще молчу. Сколько таких компаний есть в мире? Можно пересчитать по пальцам одной руки. 98% других компаний предпочтут менее хардкорные и более безопасные языки, которые будут достаточно быстры для их потребностей. То бишь для компаний помельче те же Го/Раст гораздо лучше, чем С/С++, и экономически выгоднее.
>>1745910 Да пускай, я-то что? Я сам с/с++ червь, лол, и пишу почти всегда на них. Просто объективно рассуждая, С/С++ очень слабо подходят на роль выбора языка для новых проектов, если у тебя не хуйлоуд уровня гугла. Более современные и безопасные инструменты подходят лучше в подавляющем большинстве случаев.
Игры делают на крестах. То есть геймплей может и можно оствлять на скриптах, но в какой то момент все понимают, что нет, нельзя.
Видеоаналитикой занимаются на Си/крестах. То есть питонисты сидят и дрочат свои нейронки на питоне, да, нопотом это все должно гонять видеопоток в риалтайме, и легче всего (!) это делать на крестах.
Моделирование всякой научной личи - прототипчики на питоне/матлабе, потом кресты.
Опа, оказывается не двум процентам нужны кресты. Я верю, что когда то кресты все таки должны будут уехать в дом престарелых, но Go явно пошел в другую сторону, а Rust пока стремный кузен какой то.
>>1746185 > Я верю, что когда то кресты все таки должны будут уехать в дом престарелых, но Go явно пошел в другую сторону, а Rust пока стремный кузен какой то. Почему? В чем смысл отказываться от крестов? Ну было бы конечно неплохо если бы просто было бы какое то ответвление без кучи ебанутых поддержек совместимости с прошлыми версиями и построенное чуть более логично с учетом текущих разработок, а так че плохого в языке?
>>1746193 У тебя что, нет ощущения, что кресты это язык прошлого века? В том то вся и проблема, что нормально замены (пока) нет, но замена реально нужна.
В языке куча мусора и ни для кого это не секрет. При этом многопоточность местами выглядит дичайше. Функции не граждане первого сорта. Все пишут свои аллокаторы.
Язык создавался почти сорок лет назад - все уже стали умнее, можно напрячь извилины и все таки шагнуть вперед.
Нужно взять раст, стандартизовать, сделать нормальные систему сборки и менеджер пакетов и запилить в него овер 9000 фич. Тогда наконец-то появится убийца C++.
>>1746202 Хотя сейчас подумал над сказанным. Буст кажется на 11 версии плюсов, а уже 20 на подходе. Че с такими либами делать, если они используются часто? Паралельно содержать 2 версии языка с поддержкой совместимости и без? Звучит не очень
>>1746215 только вот печаль, что никто не будет над этим заморачиваться, всем похуй( Эхх, а так хотелось бы, чтобы Раст стал новым глотком воздуха в мире этого старья из 70-80ых, но походу не судьба(
Помогите, мне нужна таблица, которая хранит какие-то элементы, например пиксели struct {unsigned char red, green, blue}, чтобы к ним можно было обращаться по координатам table[x][y]. Я хуйни нагородил? Поймет ли крестовый компилятор, что мне по факту нужно просто data[ x + (y << p2) ] ? Сможет ли опустить все промежуточное? Может, где-то надо еще инлайны и ссылки добавить?
>>1746447 Убрал все, как ты советовал. Сделал задаваемые с терминала координаты точки, которой присвоить значение, и опа, появился shl в main и с правильным значением, на двух вариантах ширины таблицы попробовал. ОНО РАБОТАЕТ! Может еще что по коду там выше скажешь? Заприватить конструктор Column, и сделать ему Table friend'ом?
>>1746461 Я могу тебе посоветовать только посмотреть похожие реализации, например из boost::gil или какого-нибудь eigen. Сам я таким байтоебством почти не занимаюсь.
Какие либы есть для годного сервера с вебсокетами, хттп и удп, построенные на бустасио? Чтобы самому ебаться не нужно было, просто взял и пользуешься. У меня жопа горит с того что придется на бустасио с нуля писать, даже хочется go использовать
>>1746540 Потому, что c=c+1 --> c+=1 --> c++, а не ++с Или идиоматическое (✭q++ = ✭p++) Даже дед Стауструп в книжке предпочитал for ( ... i++) >>1746568 Там uint, инкремент кодируется в одну команду. В случае, где что-то создается (сложный объект + тупой компилятор), лучше писать ++с. И эта запись сигнализирует, что объект сложный, а оператор ++ не является командой инкремента. Когда запись передает способна передавать дополнительную семантическиую информацию, это хорошо. А повсеместное использование ++с отбрасывает такую информацию.
>>1746646 Если для интов нет разницы, как писать, ++i или i++, а для итераторов есть (как минимум, реализацию префиксного инкремента быстрее писать), не проще и удобнее ли всегда писать одинаково? На самом деле, все эти "временные объекты" хуйня, всё это прекрасно инлайнится и оптимизируется с вертухи. Я лично всегда выбираю префиксный инкремент как более элементарный и простой, и другим советую.
>>1728315 (OP) Вкатываться ли в программирование? Если мне 29, и я два раза ушел с универов, когда учился на программировании (не было интересно и не было понимания зачем это. но это было давно)
>>1746646 > Или идиоматическое (✭q++ = ✭p++) Дебс, это имеет совсем другой смысл. Если ты тут напишешь преинремент, то копирование начнется со второго элема.
А вот если я возьму некий адрес с потолка (с точки зрения компилятора), присвою его указателю, разыменую, и этот адрес ВНЕЗАПНО совпадёт с адресом некой переменной (не обязательно из этого же скоупа), при условии, что тип правильный, это будет UB, или нет? Например, сохраню адрес в файл, а потом его где-нибудь прочитаю.
>>1747034 Преобразуем указатель в intptr_t, пишем число в файл, читаем в том же процессе, преобразуем в указатель того же типа. Никакого UB, если объект не освобождался.
>>1746573 >блять чо ты делаешь блять А мне нужно, чтобы было именно [x][y], а не [y][x]. Сейчас вот потестил на фильтре, который как на пике делает, со своим вариантом [y][x] типа твоего, который у меня уже был этого. Оказалось, скорость одинаковая.
У меня почему-то пригорает от мысли, что OpenGL, возможно, всё. Чисто по субъективным причинам не хочу, чтобы его выкидывали. Тешу себя мыслью, что если выйдет OpenGL 5, о его смерти будет говорить ещё рано.
>>1747397 Не знаю, у них аргумент, что это API предполагается использовать не напрямую, а с помощью движков, которые сами всё разрулят. Звучит убедительно, но ведь далеко не всем нужна трёхмерная графика исключительно для создания AAA-игор. Есть ведь куча научного и подобного софта, где те движки были бы слишком жирными, а использование вулкана слишком трудозатратно. Опенгл тут идеально подошёл бы в качестве апишки среднего уровня, ещё не движок, но уже не системщина.
>>1747415 Скорее всего всё не так плохо и это плотно нужно написать всего один раз и забыть про него. Хотя программирование видеокарты - это говно уровня embedded
>>1747383 Что есть всё? Да, развиваться оно скорее всего не будет вообще. Но юзать ты его сможешь юзать сколько хочешь, оно же никуда не ходит. До тех пор, пока тебе не нужны хуанговские лучи и прочие нововведения - используй OpenGL и не парься.
>>1747034 Что-то похожее уже задевали в прошлых тредах. И, если я не ошибаюсь, пришли к такому: прога использует что-то вроде косвенной адресации - то есть те адреса, которые ты можешь вывести на экран, это не прямой адрес в оперативе, а в какой-то виртуальный лист памяти, грубо говоря. И сегодня у тебя нулевой адрес находится в одной части оперативы, а завтра в другой. Допустим, ты подсосался к памяти другой программы, сохранил в файл адрес переменной - в этом случае не получится уже читать с перезапуском из одного и того же места. Но это все могут быть мои заблуждения из-за того, что я когда-то не понял дискуссию об этом.
>>1747542 Операционка теоретически не дает попасть в физические адреса чужого процесса, и тому процессу тоже не дает. Правда есть всякие хитровыебанные уязвимости типа spectre.
>>1747034 Доступ к любой памяти, которую ты специально не выделил - UB. А уж попал ты или не попал - без разницы. В адресное пространство другого процесса ты без ReadProcessMemory все равно не достучишься.
Сап аноны. Вкатываюсь к вам. Хочу узнать через какое время изучения языка смогу вкатиться на работу хотя бы на 30к вечно деревянных если в день буду ебашить 4-6 часов с упором в практику. До этого год писал на piтоне.
>>1747370 Зачем тебе, чтобы было [x][y]? Никаких преимуществ перед [y][x] абсолютно, только путает насчёт порядка доступа по индексам: соблазняет цикл внешний сделать по х, внутренний по у (привет кэшмиссы). Скорость скоростью, но то, что я скинул, в первую очередь, читабельно и просто. Ну и точно быстрее, если тебе это важно. То, что ты там назамерял, ещё ни о чём не говорит.
>>1747842 На что ты надеешься? Тебе на рiтоне мало платят? Можно же пойти на hh и посмотреть, что просят от того, кто хочет 30к. Учишь это - собеседуешься. В случае провала снова учишься, потом снова собеседуешься, и так пока не поймешь, что это не твое.
>>1748038 На piтоне я делал всякую хуебту на фрилансе для дрочащих мозг васянов с малым бизнесом, а теперь хочу вкатиться в тру язык и быть универсальным и востребованным. >это не твое С чего это?
>>1748044 >c++ >быть универсальным Да, тогда действительнотлет 10-20. >С чего это? Твой заход начинается с вопроса "что нужно знать, чтобы зарабатывать 30к", и ты просто так почему то решил, что кресты это труЪ, универсально и востребованно.
>>1748051 А разве не так? На каком ещё языке можно завести и лоулевел чепуху и игровые движки с ядрами ос? А деньги так-то всем нужны, пиздец экономики грядёт.
>>1748067 >чём я не прав >можно завести и лоулевел чепуху и игровые движки с ядрами ос? А деньги так-то всем нужны, пиздец экономики грядёт. Вот тут ты и не прав, я вроде это уже написал. >для достижения моей цели Какая у тебя цель? Зарабатывать 30к? Столько можно и в Пятёрочке. 150к? Столько и питонистом можно зарабатывать. Причём тут плюсы? Быть востребованным? Востребованны 10x инжиры, а быдлокодеры нахуй никому не нужны, от них спасения нет. Язык при этом абсолютно не важен. Так зачем ты пришёл в плюсовый тред, где парни угорают по ренжам и UB?
>>1747710 Вот не обязательно. Оптимизатор выпиливает переменные, которые ты явно не использовал, и в результате, если и сработает, похерится что-нибудь другое. Но может с volatile и сработает. Другой вопрос - если переменная используется явно, или объект вообще в куче...
>>1748009 Помню, как я делал в универе лабу на C++ Builder и жидко обосрался, когда пытался в виджет-таблицу записать матрицу, потому что у них, блеать, [x][y].
>>1748171 Ну ты-то точно знаешь, что такое "заниматься математикой", икс-то у тебя всегда первый! Ты осознаёшь, фантазёр, что относиться к своим выдумкам как к реальности и хуярить на плюсах -- вещи немного несовместимые? Икс у него блять и игрек не в том порядке, да пошёл ты нахуй.
Если когда-нибудь кто-нибудь ебался с матрицами, которые тензоры второго ранга, в координатном представлении, то он помнит, что элементы матрицы A индексируются номером строки i и номером столбца j как A_i_j. Проводя нехитрую аналогию, i работает как y-координата элемента, j -- как x-координата. Короче, получается A[y][x]. Ещё одно очко в пользу этой записи.
>>1748184 Как при умножении 100 на 0 получается не 100, а 0? А? Ученые, в говне моченые? Если я переложу 100 яблок из бочек А в пустую Бочку Б у меня не пропадут блядь яблоки все разом нахуй.
>>1748242 >Если когда-нибудь кто-нибудь ебался с матрицами Ебался с матрицами в direct3d и в opengl, и сгорел нахуй от этих сраных математиков с их ебучими row-major и column-major, которые всё только запутали. Мне похуй, как оно у них там в воображении делится на строки и колонки, мне надо только знать, какой элемент по счету в памяти куда попадёт.
>>1748254 Да, мы в говне мочёные, всё так. Если серьёзно отвечать на мини-пасту про яблоки, то тут происходит подмена понятий с умножения как чисто математической хуйни на больную фантазию яблочного маньяка.
>>1748259 Жиза пиздец. Как я понял, row-major юзают, если базис левый, и наоборот. Вздумал же кто-то глубину глубиной назвать, и понеслось. Все нормальные люди правые тройки используют, а эти нитакие.
Надо сериализовать/десериализовать кучу разных объектов в один файл. Понятно, что для каждого класса можно прописать руками, как конкретно его сериализовать. А вот как потом обратно по данным из файла создать объект? Еще раз, классы разные. Т.е. допустим первое слово в каждой строке - это название класса. Как зная название класса в string создать его инстанс в рантайме?
>>1748254 Если ты переложил яблоки из бочки А в бочку Б, то произошло вычитание, при чём тут умножение на 0?
Если тебе привезли пять бочек по 100 яблок в каждой, то у тебя 5х100 = 500 яблок. Ты отдал 2 бочки Абу, 2 бочки Страуструпу и 1 бочку Степанову. У Абу 200 яблок, у Страуструпа 200, у Степанова 100, а у тебя 100х0 = 0 яблок. Ты понял, куда их дел? Если нет, то не пользуйся умножением и не парься.
>>1748278 >Как зная название класса в string создать его инстанс в рантайме? Погугли реализации фабрик в с++. В целом всё, конечно, сводится к if (name == "..."), но можно при желании нагородить систему, в которой классы будут регистрировать себя, а макросами и шаблонами сделать так, чтобы это было одной строчкой в объявлении класса.
>>1748378 Плюсую. Нужна фабрика, а if можно убрать только сделав имя шаблонным параметром, но, насколько я понимаю, тогда их все нужно проинстанциировать заранее.
>>1748009 >>1748157 >делать как надо Так ему и надо чтобы x был первым. Вообще то язык это просто инструмент. Это как если бы ты подошел к менеджеру и сказал что у тебя в ценнике сначала будут копейки, а потом рубли, потому что ты по другому запрограммировать не умеешь.
>>1748520 Ему хочется, чтобы х был первый, у него нет в этом необходимости. С копейками и рублями немного неточное сравнение. Оно будет более точным, если ценник, в котором поменяли порядок, будет понятнее обычного в десять раз, и покупатель будет тупить на кассе в два раза меньше. Да, кому-то копейки вперёд рублей видеть непривычно, но если это со стороны реализации более естественно, какая тебе разница? Неужели это оправдывает вставку непонятных костылей и уродование кода?
>>1748009 >>1748520 Я дальше стал экспериментировать. Сделал 4 класса таблицы у котороых [x][y], [y][x], умножение и замена умножения сдвигом (длина строки - степень двойки и дополняется пустыми). Компилил с -O3 на g++ и clang++. Из замеров вмерени исключены всякие резервирования памяти. Тут-то оказалось, что умножение быстрее сдвига! Смотрю в таблицу операций по таймингу https://www.agner.org/optimize/instruction_tables.pdf и быть так не должно! Тогда я решил проверить на несколько отличном от пеки девайсе - Raspberry Pi B+. Одно и то же - умножение быстрее! С поправкой на частоту процессора, конечно. Теперь для окончательного решения сдвиго/умножительного вопроса придется писать на асемблере, благо там алгоритм не сложный.
>>1748567 Ты ебанутый что ли? Представь себе какое нибудь использование в реале get_mouse_pos(&x, &y); get_pixel(x, y); c = do_vasyan_calc[y][x]; set_pixel(x, y, c); Удачи ловить баги, просто потому что у тебя АПИ ебанутое потому что ты не представляешь как записать по другому.
>>1748572 Замеры производительности -- довольно тяжёлое занятие. Сам я ориентируюсь на собственные ощущения того, что сколько стоит. В твоей ситуации, я полагаю, всё упирается не в количество тактов на инструкцию, а банально в скорость доступа к памяти, причём разница по скорости между исполнением инструкций и хождению по памяти -- полтора-два порядка. На самом деле не важно, что там у тебя, [x][y] или [y][x], это вопрос простоты реализации и договорённостей между программистами. Важно, чтобы данные обходились в порядке, в котором они лежат в памяти, чтобы процессору удобно было заливать данные из RAM в кэш. Если добавляешь дыры промеж строк, кэширование отрабатывает хуже. Можешь попробовать сделать бенчмарк со случайным характером доступа к памяти, там производительность просядет огого как.
>>1748614 >Замеры производительности -- довольно тяжёлое занятие. Я беру самый железобетонный способ. Вот - обсчитать массив пикселей, и не просто последовательно, а там беготня в хаотических направлениях по пикселям. Замеряю все время обсчета. >В твоей ситуации, я полагаю, всё упирается не в количество тактов на инструкцию Не знаю уж чего там наоптимизировал компилер, но в нужном месте кода на крестах всего лишь разница - умножение или сдвиг. И разница на всей обработке процентов 75 и на x64, и на arm. Буду делать на асме без хаков, чтобы посмотреть.
>>1748009 >Зачем тебе, чтобы было [x][y]? Никаких преимуществ перед [y][x] абсолютно, только путает
>>1748567 >С копейками и рублями немного неточное сравнение. Оно будет более точным, если ценник, в котором поменяли порядок, будет понятнее обычного в десять раз
Собственно, почему захотел X вперед Y. Пример, функция рисования прямоугольника на WINAPI (и куча подобных функций других API):
BOOL Rectangle( HDC hdc, int left, int top, int right, int bottom );
Сперва X, потом Y.
А представьте себе функцию, рисующую прямоугольный фрагмент первой картинки в прямоугольный регион второй с ресайзом:
>>1748627 > Сперва X, потом Y. Вот и правильно. Абсолютно все библиотеки так делают, анону тоже так нужно делать. А если где-то всё-таки не так, то лучше написать обёртку.
>>1748627 Разница ведь не только в умножении и сдвигах, но и в устройстве памяти. Я думаю, разница из-за добавления пустых мест. Вполне может не влезть всё в кэш. Ты на разных размерах массива тестил? На малых, на больших? Чтобы всё в кэш влезло, чтобы ничего не влезло, что-то среднее, и так далее. >>1748632 Да делайте обёрток сколько хотите. Но в итоге, в первую очередь доступ идёт по строке, по у-координате. Если хотите забыть, что там под слоями абстракций -- пожалуйста, но производительность так проебать проще простого. Дизайн кода не должен забывать об особенностях реализации, и, по-хорошему, должен о них напоминать.
>>1748614 > разница по скорости между исполнением инструкций и хождению по памяти -- полтора-два порядка Из памяти нормальные задержки - 20 тактов. При том что современные процы за такт 2-4 инструкции могут выполнить. Но это всё хуйня, если юзается SIMD и правильное кеширование с нормальным выравниванием памяти. Там уже из стека будет сосать вполне со скоростью выполнения кода, особенно если переходы/арифметика. Алсо компилятор не волшебник, если говнокодить, то он не сможет ничего сделать с говнокодом. >>1748632 > Вот и правильно. Это надо смотреть как обход по пикселям идёт. Чтоб не шагать поперёк линий.
>>1748641 20 тактов -- это доступ в L2? Это ещё надо префетчер ублажить, чтоб так всё приятно оказалось. В любом случае, там абсолютно не важно, умножает он или сдвигает для индексации, в его ситуации это вообще на производительность не влияет.
>>1748640 >Разница ведь не только в умножении и сдвигах, но и в устройстве памяти. Так и предполагаю, в принципе, что при использовании сдвига вместо умножения в кэш грузятся бесполезные данные. Скорее всего ,в этом дело. Тестил на одной картинке пикрелейтед.
>>1748653 > это доступ в L2? Напрямую в ОЗУ. Если память выровнена по блокам кеша, то проц весь блок кеширует в L1 при обращении в начало блока, при последовательном чтении сильно быстрее будет. Опять же, можно в AVX-регистры тянуть данные, будет быстрее чем по 64 бита в RAX и ждать задержку. Компиляторы обычно такое не делают, у них максимальная совместимость с некроамудой.
>>1748681 А я думал, что напрямую в хорошую современную RAM сходить стоит 50нс. Я правильно понимаю, что при частоте 4ГГц, время такта равно 0.25нс? Тогда поход в некэшированную память -- 200 тактов. Но это при произвольном доступе будет, с данными, не помещающимися в кэш, а не при последовательном. Кстати, блок -- это сколько? Зависит от проца? Так-то довольно логично получается, заебись, спасибо.
Народ, работал 2 года байтойобом на МК, год писал на C# на юните, сейчас хочу вкатиться в с++. Что нужно уметь чтобы устроиться мидлом или джуном в мск? Мб проекты на примете есть, чтобы прокачаться ? Спасибо
а чего, ананасы, сколько получаете вообще? интернет говорит что по мск средняя 70к. Я так понимаю, что тут смешали и ждунов и сеньеров, потому что низковато в принципе для москвы, не то что уж для айти
>>1748922 > интернет говорит что по мск средняя 70к Я бы за такие деньги не пошёл даже джуном пинать хуи. Мало того что кодинг сам по себе рабская работа, так ещё и платят меньше чем админам без опыта.
>>1749182 тебя послушай, так он вообще нахуй не нужен везде, где есть железо и взаимодейсвтие с ним нужен с++ - те же ебучие беспилотники яндекса. Давай, ебани на расте пойди обработку данных с лидара
>>1749193 Ссылка прибивается гвоздями один раз - ее нельзя не проинициализировать, нельзя поменять на другой объект, нельзя присвоить nullptr, нельзя сделать ссылку на ссылку, нельзя складывать ссылку с ссылкой.
>>1749256 Лично мне удобно очень использовать их в параметрах функций, когда нужно передать объект, а не копию, но не хочется использовать синтаксис указателей.
>>1748783 До тех пор, пока тебе не понадобилось обеспечить корректность его исполнения, или, что ещё хуже, поправить там чего-нибудь. Хороший код выглядит просто и читается просто, а такое месиво, как у того анона, это невозможно ни прочитать, ни поддерживать. А юзабилити эту твою я смогу обёрточкой накинуть всегда, если меня будут просить такие вот, как ты. >>1748822 А, это ты cacheline так хитро назвал. Тогда я нихуя нового не узнал, а ты не объяснил, почему при последовательном доступе всё работает гораздо быстрее, чем при случайном. Как я понимаю, за счёт вот этого механизма происходит вся магия: https://en.wikipedia.org/wiki/Cache_prefetching
>>1749435 > почему при последовательном доступе всё работает гораздо быстрее, чем при случайном Потому что при обращении в начало выровненного блока кешируется весь блок и последующие данные берутся из кеша. Сколько раз тебе надо это повторить? У тебя только каждые 64 байта идёт прямой запрос данных из памяти. А если ты читаешь случайные данные, то ничего не кешируется в принципе, каждый раз ждешь задержку. Ещё почитай про throughput и как правильно разбивать цепочки инструкций для одновременного выполнения некоторых инструкций, что может помочь в чтении случайных данных.
>>1749562 1 год 4 месяца 24 дня 11 часов 13 минут 63 секунды чел, что ты ожидал услышать, всё от тебя зависит: куда вкатываться собираешься, сколько времени будешь тратить, как качественно ты учишься и тды
>>1749446 По твоей логике, если я работаю с выровненными данными размером 64 байта, я не увижу разницы между последовательным и произвольным доступом? Ведь тогда каждый доступ по памяти влечёт хождение в RAM.
>>1749573 > если я работаю с выровненными данными размером 64 байта > я не увижу разницы между последовательным и произвольным доступом Давай ещё раз. Для тупых. Когда у тебя выровнена память по 64 байта и ты читаешь последовательно - у тебя после первого чтения остальные данные из блока в 64 байта берутся из кеша. Когда у тебя произвольное чтение - каждое следующее обращение промахивается мимо кешированного блока и равно отсутствию какого-либо кеша.
>>1749645 >Давай ещё раз. Для тупых. Давай. >данными размером 64 байта Какие >остальные данные из блока в 64 байта берутся из кеша. Если он уже все 64 байта прочитал?
>>1749645 Я тогда тебе охуенный вопрос задам: а как проц определяет, какое чтение произвольное, а какое нет? Ты, наверное, удивишься, но никак. Поэтому прочитанное из RAM подымается наверх до L1 вне зависимости от того, какой у чтения характер, произвольный или последовательный. А вот хардверный префетчер (и софтверный, если есть) как раз следит за характером чтения, и если оно становится похоже на последовательное, то он начинает заливать данные из памяти в кэш ещё до того, как память понадобится. Именно за счёт этого получается быстро, а не из-за простого факта существования кэш-линии.
>>1749645 А, я ещё пару раз перечитал твой пост и понял, что ты не понял. Я о случае, когда меня интересует вся кэш-линия, полностью. В таком случае, какой прок от твоего кэширования?
>>1749648 > Если он уже все 64 байта прочитал? Как он тебе их прочитает за раз? У тебя 8 операций чтения будет, либо если SIMD используется, то инструкции SSE/AVX довольно медленные. Пока читаются эти 64 байта, в другом порте идет обращение к следующему блоку и его кеширование. Ты же не просто перемещаешь данные, а что-то с ними делаешь. Это с копированием ты в любом случае упираешься в ОЗУ. >>1749657 > как раз следит за характером чтения, и если оно становится похоже на последовательное Для таких случаев есть документация по архитектуре от вендоров, где тебе пишут как надо обращаться в память чтоб было быстро. Это тебе надо следить чтоб оно было последовательным, а не процу ванговать что в следующей инструкции ты соизволишь читать.
>>1749668 Так, подожди, не путай. Я говорю не об одновременном чтении. Я говорю о том, что мне нужна вся кэш-линия, ровно 64 байта. Ты заострял внимание на эффекте, порождаемом бесполезностью части кэш-линии при случайном чтении, если она мне нужна вся, я привёл пример, когда этот эффект обнуляется. Ты писал, что "блок" улетает в кэш ровно при обращении в его начало, а теперь пишешь, что где-то там до обращения к следующему "блоку", тот кэшируется вместе с ним. Я не могу понять, ты виляешь жопой, или просто не можешь чётко выразить мысль?
>>1749684 > при случайном чтении У тебя случайное чтение в пределах 64 байт? > "блок" улетает в кэш ровно при обращении в его начало, а теперь пишешь, что где-то там до обращения к следующему "блоку" Алло, блять. Инструкции не обязаны и не должны строго по порядку исполняться. Обращение в начало следующего блока может и должно быть до того как кончится текущий, за этим должны следить кодеры компилятор. Мне теперь тебе всю работу процессора объяснять, чтоб каждый пост ты не находил что-то новое и не начинал удивляться как же это так? > не можешь чётко выразить мысль? Это у тебя какие-то проблемы с пониманием как работает кеш. > в другом порте идет обращение к следующему блоку и его кеширование Что тебе тут не понятно? Почему следующий блок кешируется до того как в нём появляется необходимость или что?
>>1749718 > Я сдаюсь. Молодец. Зачем вообще тогда пытался разобраться, если даже не стараешься? Хотя если вместо чтения документации ты фантазируешь в треде, то наверное тебе и не сильно надо было.
>>1749818 >SIMD инструкции можно дергать хоть из питона через Numpy, результат будет очень близок А, сорян вот, дернуть-то я и письку могу. Их можно дергать из pitona, чтобы нечто типа fftw3 получилось?
>>1749858 То есть Python в данном случае лишь клей. Только в таком смысле и имеет смысл его обсуждать, хорошой ли он клей для блоков более быстрых алгоритмов. Как зашить питоний проект в одну экзешку? Да никак, только распаковать скрипты в %temp%, других вариантов не существует.
Каким образом можно реализации шаблонных функций написать в другой единице трансляции? По идее ему нужно явно в second.cpp написать что-то вроде using A<float>, чтобы он знал что используется float и скомпилировал функции с флоатом - но что-то я не могу нагуглить каким образом это можно указать.
>>1750309 Я пытался почитать сумму цифр в string, что сути не меняет. Сделал потом как на пикриле, но по началу не очень принимал эту идею. Это будет во всех кодировках норм работать? Есть ли кодировки где цифры не подряд идут?
Почему QLabel не хочет менять картинку в цикле? Я пишу for в котором меняю картинку, затем thread::sleep_for(2s), поток спит, но изменение картинки, вызванное ранее, не срабатывает Компилятор как-то пытается оптимизировать мой код и решает один раз поменять картинку вместо n?
>>1750687 Я думаю, бенчмарк о том, что from_chars явно сколько-нибудь быстрее, чем stoi. Непонятно, насколько, но быстрее, и именно это и хотелось показать. Правда, непонятно, лежит ли эта разница в пределах "погрешности измерения".
Какой все же вредный этот ваш кэш. А если мне надо побегать вокруг пикселя относительно хаотически в некотором радиусе? Ну, допустим, побью я картинку на квадратные тайлы, при первом обращении буду запрашивать [0][0] пиксель тайла, чтобы весь квадрат зэкэшился. Конкретный размер квадрата надо смотреть из параметров конкретного процессора? А как?
Двач, где читать про то, как работает QT и про его подводные.В интернете есть только как работать с QT, а не его принципы и технологии работы. Шлее читал, годно.
>>1750731 У практически всех процессоров, на которых твой код может запуститься, длина cache line -- 64 байта. Кстати, необязательно запрашивать [0][0] пиксель тайла, тот анон просто шиз. У тебя при доступе к любой памяти в кэш улетает 64 байта, в которых она содержится. Хорошая статейка про наблюдаемые эффекты кэширования: http://igoro.com/archive/gallery-of-processor-cache-effects/