Это копия, сохраненная 23 февраля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый: >>1758813 (OP)
Хорошо, что здравый смысл победил, и не ждут 1000 постов.
Наоборот же
Есть адаптированный перевод блога из шапки.
Оригинальный(из раздела "Куча других блогов") - https://www.learncpp.com/.
Перевод - https://ravesli.com/uroki-cpp/.
Возможно, стоит занести его в шапку? Он так же полностью бесплатный
А я учи по видосам на ютубе. И хули ты мне сделаешь теперь?
Заглянул по ссылкам, те же книги, что тебя не устраивает?
ostr << ifstream("file.txt").rdbuf();
Потому что классы - это типы данных.
Если я инициализирую константу переменной, то я так понимаю у нее есть адрес и ограничение на дальнейшие присвоения "искусствены"и с помощью указателя можно изменить константу?
И как это сделать? Там даже значений нет. Конструктор без аргументов в mat не работает.
Что-то вроде vec x{} тоже не работает.
Вот слева то что я хочу написать, а справа то что приходится писать с жутким }}}}. Я могу отказаться от union в vec записав оператор индексирования как *((&x)+i), но в mat это невозможно, потому что мне нужно как поле .x типа vec, так и поле .xx типа float.
Либо я могу отказаться от конструкторов, и писать _vec, который будет static-функцией возвращающий vec.
Это UB.
Это больная тема с++, потому что например в юникоде 1 "символ" может быть несколько байт.
В книге, что я читаю приведена таблица функций для работы с символами строки. Например isalnum, isalpha, isdigit и тд. Они работают в любой кодировке?
Ну их вообще принято использовать или есть более хорошие вещи?
Нет, они только для ASCII. Для юникода, который в 2020 стыдно не поддерживать из коробки, и по сей день тащат сторонние либы.
Что не так?
if (stream >> y && stream.ignore(1) && (stream >> m) && stream.ignore(1) && (stream >> d)) { что-то делаю}
Но если у меня не соответствует формату, то как мне вывести то, что было введено вместо даты? Пробывал так:
else if(stream>>s) {cout<< s;} , где s- это строка, но нихуя не работает.
Господи, их результат ещё и от текущей локали зависит. Пиздец.
А функции для них те же о которых я вверху писал?
Ооо. Спасибо большое
Он имеет в виду, что поддержка так себе. То, что я скинул, выглядит лютым костылём по сравнению с остальными языками.
Всё, понял. Надо в цикле в начале алгоритма файл открывать, а в конце алгоритма закрывать.
у запятой приоритет ниже, чем у <<
Экономия на времени открытия/закрытия файла, но вряд ли в твоём случае это критично.
Ты и там и там вывел a. Однако странно, что компилятор крестов позволяет писать как в первом выводе с b, я не вижу в этой записи смысла.
Проебался с приоритетом. Определение ни при чем
говнарь-пыхер стаж 4 года, бумер. Вчера начал учить си++ для того, чтоб уехать РАБотать в амазон через пару лет в какую-нибудь ёба-разработку нейросетей.
Пожелайте удачи, ебать.
алсо, a tour of c++ 2nd edition норм тема для новайсов?
не надо меня писать
Загляни в машоб тред хотя бы
В дурку точно уедет
Эх, я тут расписывал ответ, а ты взял и... сделал всё как надо.
Да ну ерунда, сделать их все ошибками и ввести какой нибудь аттрибут для отключения в конкретных нужных тебе местах.
Господа, мне нужно написать 10 строчек кода для пердуино (бесплатно), я попал по адресу?
Сам я так-сяк могу в питон, а в этих ваших крестах не могу даже вменяемо оформить цикл не говоря уже о бесконечных expected ";" и "{" и variable is not declared in this scope иными словами я жестоко страдаю.
Ну и если кто заинтересовался, то вкратце о проблеме. Есть датчик, который возвращает дистанцию в сантиметрах и есть некое relay, которое можно on/off. Мне нужно, что бы relay on на определенной дистанции обьекта до датчика, и оставалось таким вплоть до изменения этой дистанции, после чего переходило в режим off с задержкой в 2 минуты. Но если за 2 минуты обьект снова попадает в дистанцию, то задержка сбрасывается, и relay остается в on.
Если тут таким не занимаются, скажите куда идти только не нахуй
Подумай об этом не со стороны своих эгоистичных замашек, а со стороны разработчиков компилятора и кучи других разработчиков под самые разные архитектуры, и всё станет понятно.
Иными словами, тебе нужно постоянно проверять дистанцию - и если дистанция подходящия, то нужно две минуты держать что-то включённым?
> я попал по адресу?
Вообще нет, но твоя задача в самом деле решается за три минуты, если иметь ардуину и настроенную ide под рукой с датчиком. Вот так вслепую - не напишу, потому что ардуину мучал час или около того. Что-то вроде такого, но это в самом деле пальцем в небо и нужно дописать опрос датчика: https://ideone.com/yBqOdx
бумер на связи. Потихоньку читаю книжульку. Сейчас вот разбираюсь с понятием nullptr, вроде бы, пока что как по маслу маспу идёт, но медленно.
держу в курсе
Хуй знает, по адресу ли я, но мне нужен совет шарящих людей из мира с/с++ разработки.
Коротко - я не знаю в какую сторону мне дальше двигаться. Получил инженерную вышку, устроился в эмбедед разработку контрол инженером, шарю в ТАУ и физике, построить элементарную 1d симуляцию вообще не проблема, умею в fem и cfd. Разработка в основном в симулинк, с автоматическим кодогенератором. Некоторые модули пишу вручную на С, типа adc или пвм модуляции.
Так вот, то чем я занимаюсь - абсолютно унылая и хуево оплачиваемая дичь, потолок может 100к в ДС. Эти скиллы никому практически никогда не нужны.
Два стула - вкат в С++ разработку эмбедед или околоэмбедед, ну или забить на всё выученное хуй и вкат в какой-то дата сайенс/машин лернинг.
По первому стулу меня готовы почти мидлом брать. Уже потыкался по собеседованиям. По второму надо будет начинать с джуна.
Буду благодарен за совет.
Иди в эмбед. научишься писать код, а дальше перекатишься в нормальную или ваще в гермашку какую.
да я уже именно в Гермашку и перекатился и занимаюсь вышеописанной хуйней к сути моего поста это правда отношения не имеет. Разве что это огромный минус, так как то, чем я занимаюсь есть только 5/2 8 часов в неделю в офисе, в очень дорогих городах, где 3к€ разраба просто смешны. Кодинг же в отличии от инженерии достаточно гибкий, фрилансить или работать удалённо или работать на гелере можно откуда угодно за те же деньги. Но это лирическое отступление.
У тебя есть опыт или знакомые в эмбедед с++ разработке?
Спасибо! Перепощу в /ra, похоже что для них это совсем пустяки.
Ситуация: некая программа построчно пишет данные в конец файла(всякие логи), нужно отлавливать момент записи и собственно сами логи, в какую сторону капать?
Возможно проблема слишком легкая, но никогда с этим не сталкивался, максимум парсил готовые XML-ки
Можно отслеживать событие изменения файла: https://stackoverflow.com/questions/931093/how-do-i-make-my-program-watch-for-file-modification-in-c
А можно с определённой частотой, например, 10 раз в секунду, смотреть время последнего изменения файла, что менее эффективно: https://en.cppreference.com/w/cpp/filesystem/last_write_time
Это почему?
Давай на конкретном примере. Сложение двух знаковых целых чисел с переполнением. Это потенциально практически каждое сложение интов. Какие ты тут хочешь ввести атрибуты? Как ты уберёшь тут UB? Кому станет от этого легче жить?
Благодарю тебя анон
Не слышал о такой. Но выглядит на первый взгляд неплохо.
Эмбедед на плюсах? А что ты им делать собрался, когда там максимально низкоуровневый код?
Весь driver assisntent systems на плюсах, почти весь автономный драйв на плюсах, всевозможные драйвера, комуникации, инфотеймент и тд.
Эмбедед это же не только диодиками мигать.
wxWidgets не поддерживает кучу фич винды, qt сам рисует интерфейс и он выглядит как инородное говно, WPF ущербный и опять же не может как винапи. Неужели нет нормальной абстракции винапи с поддержкой всех свежих фич DWM?
Это как раз очень простой пример. Если у тебя переполнение, то у тебя UB. А значит ты не проверил данные, и на выходе у тебя мусор. Проверять надо или в рантайме, или в компайл тайме, где ты явно указываешь гарантии что твои данные вписываются в диапазон. Например специальным типом данных, который точно может быть только от -5 до 5. Или контрактами. От этого станет легче жить вообще всем - и программистам, которым меньше ловить плавающих багов и уязвимостей. И пользователей, чьи самолеты перестанут втыкаться носом просто потому что компилятор что то там оптимизировал скрыто.
Ну это конечно высокая планка, если вкатишься во все это то мое почтение
Электронику и то, как работает микропроцессор. Слова регистр, adc, dma, eeprom, spi не должны наводить ужас. В зависимости от отрасли еще и теорию автоматического управления, физику этц. Эмбедед эмбедеду рознь.
А прикинь, антош, если каждый сраный ++i сможет кидать исключение IntegerOverflow
как в божественном SML
Я только за. Нахуй нужен wrap чтобы индекс в массиве стал отрицательным?
Оба варианта так себе, но иногда перформанс действительно важен, и тогда программу должен писать очень высококвалифицированный кодер, чтобы она была как можно менее некорректная.
Если не нужна производительность, зачем вообще плюсы трогать? Есть куча других безопасных языков, выбирай любой и ебись с ним.
У Boost есть какая-то обертка над WinAPI, но над чем именно не знаю.
Нет, это выбор. Я выбираю нож поострее. Да, острым ножом можно себе где-нибудь артерию вскрыть, но на то он и нож.
Да это и так понятно что ты эджи школьник любящий играться с ножами. Жалко людей которые потом гибнут
Ничего общего с MFC.
Хочу для начала винапи, который не засирает всё своими макросами.
WPF. Используй C++/CLI для взаимодействия между шарповой и плюсовой частями. Работает, проверено на себе
А, чёрт, недочитал (хватит с утра на двачах сидеть). Кроме как чистых винапи для взаимодействия с DWM от роду не видел.
Зделай дизасм да посмотри
>Как константы в памяти хранятся?
Как скажешь так и хранятся.
attribute _((section("name")) и man ld.
Да получается, что никакой. Вызывается одинаковый конструктор для списка инициалиазации.
В первом случае создание и копия - во втором создание и пробрасывание по rvalue reference.
Зачем? Аргумент и так rvalue. В std::move надо было бы оборачивать, если бы передавался lvavlue объект, созданный заранее вектор.
Здесь фишка в том, что объект создается прямо в выражении. Поэтому вызывается обычный конструктор в обоих случаях, а не копирования и не перемещения.
Спс, надо попробовать.
1) сначала декларативно описать правила комбинации флагов
2) проверить в compile time произвольный набор флагов на корректность
Ну вот например - https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
Очевидно, что, скажем, комбинация MB_RETRYCANCEL | MB_YESNOCANCEL смысла не имеет. Но когда туча флагов, можно и не заметить ошибку. А тут в compile time сразу будет ошибка
Как вам?
Ну, что могу сказать - удачи, и не забывай писать ::type после enable_if
Круто. Я тоже свои хеллоу ворлды на 17 пишу, а на работе 11.
При переходе c++11 -> c++14 семантика и поведение некоторых конструкций менялось,
https://stackoverflow.com/questions/23980929/what-changes-introduced-in-c14-can-potentially-break-a-program-written-in-c1
Надо деньги чтобы все исходники проверять
Вакансий
Если уж по чесноку, то эти изменения скорее всего у тебя никак не проявятся. Да и ищутся такие места простым поиском по исходникам.
Ну да. Берем один стандарт, другой, и делаем diff. И вывод суем в grep. По миллиону строк исходников. Так проекты на новые сипласпласы и переводят.
Сап, анон. Какой есть самый адекватный способ передачи произвольных контейнеров определенного типа в функции? Через итераторы? Можете привести пример?
> произвольных контейнеров определенного типа
Ты уж определились
Посмотри на std::for_each какой-нибудь
stb-стайл - в стиле библиотек от Шона Баррета (https://github.com/nothings/stb). Вместо размножения inline функций в каждом месте, где ты инклюдишь либу, ты в одном файле подключаешь инклюдишь с макросом (например, STB_TRUETYPE_IMPLEMENTATION), который вставляет реализации, а в остальных файлах будут только сигнатуры функций. Хотя если писать на плюсах, то линкеру от этого будет ни холодно ни жарко по сравнению с нагрузками от тысяч шаблонов.
Final Destination - старый мем про Smash Brothers
Наверное он хотел сказать "произвольных контейнеров, которые могут содержать элементы только опоеделенного типа".
Ну и что? Везде по-разному.
*то же
Вот я прикрепил код, который у меня примеррный.
И если я вызываю Person bob(), то никакого вывода в консоли нет.
А если Person bob = Person() то вывод пикрелейтед
Какого хуя?
>И если я вызываю Person bob(), то никакого вывода в консоли нет.
Че ты врёшь? У меня всё есть
>Class object = Class();
Создание переменной object конструктором Class
>Class object();
Объявление функции object, не принимающая параметров и возвращающая объект Class.
Это, наверное, одна из самых больших грабель новичков. Читай про most vexing parse. Отчасти ради этого и ввели синтаксис конструирования объектов через фигурные скобки: Class object{}; ведёт себя так, как интуитивно кажется.
Можешь сделать
Person bob();
bob();
Получишь ошибку линкера, а не ошибку компилятора. Потому что декларация есть, а тела функции нет.
>Объявление функции object, не принимающая параметров и возвращающая объект Class.
А разве мы можем объявлять саму функцию в структурном блоке?... Я думал можно только указатель на неё.
открываешь MSDN и читаешь
Вроде ничем, там все равно вызовется у базового.
Что будет, если я при переобъявлении методов этого абстрактного класса не напишу const override позади них?
Какой проверки?
Override - это компайл-тайм проверка на то, что ты оверрайдишь метод класса в наследнике.
Если ты его уберешь - то просто проверки не будет.
Если ты уберешь конст - то ты нихуя не переопределишь (если в паренте был конст)
>>768527
При правильном использовании - это гораздо более мощная фича, позволяющая писать короче и красивее. При неправильном - пиздец.
Он сам подставит.
if работает только внутри данной функции. Прикинь тебе все функции придется оборачивать в тонны if. Но вообще сейчас в сторону возврата туплы смотри. [result, error_code] = some_foo();
int & const r2
Что поменялось бы если бы const не было?
Спасибо.
{
std::cout << "Спасибо.";
}
const int & — норм
int const & — норм (то же самое)
int & const (как ты написал) — не допустимо.
Сделай свои exceptions на longjump, сравни. Только так чему-то можно научиться по настоящему.
Можешь купить оффициальный стандарт
На крестах нет работы для джунов (есть только для обладателей связей). 99.9% работы на крестах в продакшене требуют знаний как минимум миддла, который почти синьор. С++ - худший ЯП для вката.
Тебя могут пригласить на собес, если у тебя есть очень серьезные личные байтоебские проекты (своя ОС, свой игровой движок, компилятор, эмулятор процессора - нужное подчеркнуть), но если не повезет и в то же время у них будет собеседоваться пчел с 10-ью годами коммерческого опыта разРАБотки на крестах - тебя пошлют нахуй. Се ля ви.
Спасибо
> опыт разработки в Qt на С++ под Windows/Linux;
> уверенные знания С++, STL
> знания ООП.
> Должен иметь представление о разработке многопоточных сетевых приложений на C++ под Linux
> Знать С++11, STL, metaprogramming, Atomic, POSIX API, IPC;
> Знать фундаментальные структуры данных и алгоритмы;
> В состоянии прочитать техническую документацию на английском языке.
Как-то лайтовенько очень.
Ещё хочу заметить, что лично у меня никогда не было чисто плюсовской работы, даже если в вакансии были только плюсы. Везде нужен был какой-нибудь ещё доп язык типа шарпов или питона.
Мимопроходил
Это требования для мидла
А ты и половины слов в этой вакансии не знаешь небось, зато выебнулся про лайтовенькость
Скачал CodeBlocks, создал проект hello world, а он не может найти компилятор. Оказывается там была отдельная ссылка для скачивания CodeBlocks+MinGW.
Удалил, установил CodeBlocks с MinGW. Опять не находит компилятор. Видимо старые настройки остались. Попробовал прописать пути, но то ли я не все прописал, то ли неправильно прописал. Ничего не компилирует.
Все снес. Установил отдельно MinGW в c:\MinGW, отдельно чистый CodeBlocks. CodeBlocks его увидел. Собираю проект.
>fatal error: wchar.h: No such file or directory
Но этот файл есть в C:\MinGW\lib\gcc\mingw32\9.2.0\include\c++\tr1
Почему он его не находит?
> опыт разработки в Qt на С++ под Windows/Linux;
> уверенные знания С++, STL
> знания ООП.
Для мидла?
Почему каждый тупой уебан ставит этот ебучий кок-блокс, который нихуя не умеет и нихуя не работает, а потом ебется с ним в жопу, когда есть стандарт индустрии под винду - Вижуал Студия.
Она просто работает из коробки, поставь ее и не еби голову.
Пиздежь и провокация. Работу нашёл с первого раза, через пять лет уже сам набираю в команду джунов. а других нет
У меня стоит VS2019. Я захотел попробовать SFML, а там на сайте нет либ для этой студии (есть для 2013, 2015, 2017) и написано, что разные версии не совместимы. Была еще версия для кодеблокс, и я решил ее попробовать.
Начиная с 2015 совместимы, но не наоборот
Бери для 2017 или 2015 - взлетит
Установлен в C:\Program Files. Есть пробел, но он сам предлагает туда устанавливаться.
Собери сам, собирал недавно, всё ок.
Ачько
> Должен иметь представление о разработке многопоточных сетевых приложений на C++ под Linux
> Знать С++11, STL, metaprogramming, Atomic, POSIX API, IPC;
> Знать фундаментальные структуры данных и алгоритмы;
> В состоянии прочитать техническую документацию на английском языке.
Ты тупой? Сам же написал.
Ща бы вкатываясь в плюсы стремиться "знать" какую-нибудь хуйню типа метапрограмминга, а о сетях и многопоточке просто "иметь представление". Складывается такое ощущение, что ХР нагуглила базвордов и разместила это гавно не особо заморачиваясь согласованием с разрабами
средства 3d моделирования
Если уж проводить такую аналогию, то получается, что удалил два ребра
Только одному. Ему тоже не зашло.
Должен быть в C:/MinGW/include
ЧЯДН?
Ты это, следи еще за типом возвращаемого значения, потому что зачастую в переопределенных методах надо возвращать ссылку на дочерний класс.
ПС орнул с названия метода в коде
Это иллюстрация просто была, точки с запятой на месте.
>>769514
Трабла оказалось, наоборот, в значении аргумента.
У меня в родительском классе есть статическое перечисление, которое и является аргументом метода pidoras.
Проблема в том была, что я не указывал полный путь к перечислению (имя базового класса::enum name)
Странно, что про точки с запятой ты написал, а про то, что ЧВМ с модификатором доступа private по-умолчанию (private не наследуется) ты не написал.
Естественно, без исключений, STL, стоковых new/delete и прочего такого, чисто классы, шаблоны, ссылки.
Можно и со всем этим.
Ты возвращаешь ссылку, а не указатель.
Так-то это работает, но задумка странная. Класс А абстрактный, ты не можешь создавать объекты этого класса. При этом в дочернем полиморфном классе ты возвращаешь ссылку на объект класса А, который ты не можешь создать (по сути, ты можешь из этой функции вернуть лишь ⚹this - ссылку на объект класса B, именно в данном контексте). Зачем - непонятно, объясни если не лень.
Динамик касты между референсами работают по тем же правилам, что и для поинтеров.
Так мне в данном методе и нужно вернуть объект класса B. Но полиморфность должна сохранится, поэтому я возвращаю ссылку на класс-родитель, указывающую на объект this.
Хер Саттер хорошую речь толкнул про низко-оверхедные исключения, но это только ближе к 2026...
Что скажешь, анон?
Если годнота, то прошу линк на второе издание
Они и так низкооверхедные. Точнее зиро оверхедные. Да, когда исключение таки кидается, все это разматывание стека и деструкторы это очень медленно. Но похуй же, это нештатная по сути ситуация.
>Точнее зиро оверхедные.
А вот и нет. Performance penalty есть, даже если исключение не кидается.
Анончик, возможно ли в модуле завести hrtimer с периодом, скажем, где-то 20-50 мкс? В обработчике собираюсь ногами дрыгать (нет, не колхозный ШИМ). Сильно ли это повлияет на производительность системы, смогу ли я юзать гуй (KDE/XFCE), сеть, HDMI с такими выкрутасами? Платформа - RPi Zero W, 1GHz, 1 ядро. С DMA в пролете, не смогу обеспечить нужную (пониженную) частоту реквестов.
> Зачем? Аргумент и так rvalue.
Внутри функции rvalue считается как lvalue, и если предполагается дальнейшая передача, то нужно юзать std::move
И бинарник кучей таблиц раздувается.
Нет.
зачем заниматься анальной гимнастикой и писать это на плюсах? Не проще ебануть на сишке?
Всё заебись и удобно.
Недавно начал изучать кресты, пишу маленькую игру для ребенка, есть ощущение, что написал что то лишнее в коде, он работает, конечно, ощущение есть. Может использовать goto лучше чем do и while?
Посоветуй еще, что делать с игрой дальше, как добавить туда кота, который будет бить рыцаря в случае правильного ответа и наоборот. Подойдет ли для этого Unreal? Что почитать на тему того, как добавить всякие красивые свистоперделки, чтобы весело было?
>В языке Cи (но не в C++) есть специальный макрос препроцессора с именем NULL, который определен как значение 0. Хоть он и не является частью языка C++, его использование достаточно распространено, и должно работать в каждом компиляторе С++:
А как сделать красивый и элегантный генератор случайных чисел в С++? Я нагуглил такое решение и допил его в меру своих знаний, подскажи, пожалуйста.
Спасибо, Анон.
https://pastebin.com/X0aALMPB
Покатит? Это только для интов, но общий посыл, думаю, ясен. В плюсах если дистрибьюшн для чисел с плавающей точкой, если тебе надо.
Наверное, пока слишком сложно для меня. Буду пытаться дальше. Мне понравилось то, что я нагуглил потому что я смог понять что происходит в коде, а тут некст левел, походу.
Расскажите, пожалуйста, как из кода сделать веселую игру? Куда его прикручивать?
найс троллишь, я только 2 недели назад начал учить кресты, лул, не преувеличивай :D
Прикручивать нужно либу, которая может в графику. Слышал про SFML, она вроде удобная и вроде может много, чекни.
Дэк там же WinAPI 95.
Это я пытаюсь выводить в ячейку таблицы параметр объекта MyClass, который находится в QVector<MyClass> *storage.
И еще такой вопрос заодно: почему если storage - указатель, то я не могу обращаться к содержимому вот так storage[1], storage[2] и т.д.? Приходится юзать storage->at().
>storage — тоже const
Так как обращение к нему осуществляется через this, который pointer to const, так как на скрине const-qualified method.
Не понел. То есть index.row() мне зашкваривает все выражение в return? А storage у меня не const.
Но как? MyModel::data() - это же перегружаемый метод, а storage я сам создал вообще то.
Оно должно давать undefined reference to yoba_method же вроже как..
Ну да. То есть если в сигнатуре метода написано const, то он все внутри метода зашкваривает const-ом? Пиздец... И что делать? Переделывать MyClass, чтобы там все методы были const?
Господа байтоёбы, ответьте.
На второй вопрос тоже ответьте пожалуйста.
>То есть если в сигнатуре метода написано const, то он все внутри метода зашкваривает const-ом?
В этот как бы и смысл const-qualified метода.
>Переделывать MyClass, чтобы там все методы были const?
Если метод не изменяет состояние класса, то он должен быть const.
Спасибо, понел.
В университете есть, если на инженера поступать.
На курсере есть от яндекса, я правда не знаю, насколько бесплатно. Ну т.е там есть триал на неделю кажется, но что потребуется после этой неделе не в курсе.
Браузеры (3.5 конторы по понятным причинам), мк, эмбедщину, хуйлоуд, тяжелый image processing, игры ААА класса.
Короче, в основном байтоебство и performance-oriented софт
Разного рода код.
1) ~MyClass(){}
2) ~MyClass() = default;
3) то же, что и 1, но в cpp
4) то же, что и 2, но в cpp
5) вообще без десруктора
Да, я знаю, что лучше не писать вообще. Но я слышал есть какая-то разница между нахождением деструктора в .h и .cpp
1-4 - никакой афаик
5 - я видел примеры кода, которые не компилировались, пока руками дефолтный деструктор не пропишешь. Хуй знает почему.
Шаблонный метод определен в хедере, алле.
Нет, между 2 и 4 есть разница, вроде даже в стандарте прописана.
Не компилировалось скорее всего из-за incomplete type в каком-нибудь unique_ptr, которому нужно знать, как удалить объект уже в .h. Или хотя бы успокоиться знанием того, что этот деструктор где-то там объявлен
incomplete type это совсем другое.
А вот между 1 и 3 разницы точнон икакой
4 я не думаю, что прописать вообще реально.
>4 я не думаю, что прописать вообще реально.
Реально, но декларация в class scope всё равно нужна.
> incomplete type это совсем другое.
Конечно другое, но именно это и вызывает проблему
https://stackoverflow.com/questions/9954518/stdunique-ptr-with-an-incomplete-type-wont-compile#9954553
>И еще такой вопрос заодно: почему если storage - указатель, то я не могу обращаться к содержимому вот так storage[1], storage[2] и т.д.? Приходится юзать storage->at().
Потому что сторейдж указатель. Разыменуй указатель, и сможешь использовать скобки. (✱storage)[1]
Ну так-то он может писать и storage[1], storage[2] и т.д., вот только результат будет отличаться от желаемого.
Лол, да. (✱((storage) + (1))) легитимно
Списали бабки после недели, пидорасы, нигде не написано про это, а тех поддержи как будто не существует, еле нашёл контакты и добился рефанда, т. к. тогда уже забросил. Ну а вообще, для вкатышей хороший курс.
assert из стандарта си говно, например не делает брикпоинты, из-за чего потом хуй найдешь где он вылетел.
Обязательно нужно чтобы он показывал строчку где сработало
Опционально - добавлять кастомный текст сообщения
Велосипедить свое вот прям некогда. Портабельность не нужна - Windows и Visual Studio
и пользуясь случаем - как сделать тоже самое но чтобы срабатывало во время выброса исключения (а то тоже задалбливает по стеку вызовов искать где же сработало исключение)
Вообще-то assert() ставит брейкпойнт, только чуть выше по стеку.
Попробуй вот это: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/assert-asserte-assert-expr-macros?view=vs-2019
>>770495
> и пользуясь случаем - как сделать тоже самое но чтобы срабатывало во время выброса исключения (а то тоже задалбливает по стеку вызовов искать где же сработало исключение)
В студии в окошке exceptions можно поставить галочки на исключения, которые хочешь ловить. Вроде называется "other exceptions not in this list"
И откуда списали?
Я просто зашёл и начал изучать, карту не просили даже.
Только аккаунт, который уже был залогинен.
А самое главное я не проверил, да.
просто конструктор этого класса же будет вызывать в производных классах( для инициализации полей)
*будет вызываться
Тебе нужен виртуальный деструктор в классе, который является прародителем всех подклассов в данном древе наследования, иначе привет утечка памяти.
Можно ещё protected его объявить
Я понимаю, что не void функция без return это ub. Но почему тут это работает так?
в foo - undefined behavior. Как он работает - никто не знает.
в main UB нет, т.к. по стандарту оно может быть без return, будет implicit return 0
> Вот такая хуйня в b вернет значение последнего аргумента.
А мне когда-то msvc туда вызов другой функции вшил.
Форматируй нормально код.
Потому что когда говорят "рандомный мусор", не имеют в виду что в компе миниатюрные гномики кидают игральные кубике. То есть мусор не рандомный. (отсюда и многие траблы с безопасностью, когда могут прочитать пароль из памяти через уязвимость) Лень вникать, но допустим так - на стеке выделили память под две переменные a и b. В функции они сравниваются, для этого одна из них загружается в регистр eax, и потом сравнивается со второй. Регистр eax же используется для возвращаемого значения, но в него перезаписывается 1234 только если if сработает.
При UB у тебя вообще диск может форматироваться.
Спасибо огромное. Ну я когда говорил "рандомный мусор" имел ввиду что будет что то похоже на с использование переменной без инициализации. Типо в ней содержится то, что кто то до этого в участок памяти, где переменная лежит записал.
Это UB, а поэтому компилятор может делать все что захочет. Попробуй для теста скомпилировать с оптимизациями (-O3), обычно UB клоунада начинается у хитрожопых оптимизирующих компиляторов. Такой хитрожопый компилятор спокойно может заменить вызов твоей функции на константу 1234. Так как на программиста возлагается обязаность недопускать UB в программе, компилятор в полном праве предпологать что в твоей программе нет UB, тоесть в функцию foo будет всегда передаваться два равных аргумента (иначе будет UB чего программист не должен допускать). А при равных аргументах функция всегда возвращает 1234 - тоесть ее вызов можно просто заменить на костанту ради оптимизации. Например GCC что-то подобное и делает, при максимальных оптимизцациях функция foo превращается в int foo(){return 1234;} https://godbolt.org/z/T6Mjr5
Без оптимизаций возвращается первый аргумент скорее всего из-за того что его помещают в eax регистр в надежде потом перезаписать на правильный результат. Но все зависит от компилятора.
list<int>* hash = new list<int>[1000];
>первый аргумент скорее всего из-за того что его помещают в eax регистр в надежде
Потому что нет инструкции cmp [mem], [mem2] думаю.
Так все элементы одного списка связаны указателями, это одно и то же.
Так (динамическая продолжительность хранения aka "в куче") или
list<list<int>> hash; - автоматическая продолжительность хранения aka "на стеке".
Автоматическая предпочтительней. Если нужна динамика - желательно использовать умные указатели.
Ее нет потому что ОПТИМИЗАЦИИ. Без оптимизаций GCC https://godbolt.org/z/bqjE1M действительно первый аргумент функции помещает в eax, а так как при неравных аргументах он не перезаписывается правильным результатом его и возвращает. Правда неясно зачем его помещать в eax, я в асемблере нихуя не разбираюсь.
он помещает не аршумент функции в eax, а возвращаемое значение из функции. По конвенции вызовов (во всех популярных так, не видел чтобы хоть в каком-то ABI было по-другому) в архитектуре x86 процедуры кладут возвращаемое значение в регистр eax.
>я видел примеры кода, которые не компилировались, пока руками дефолтный деструктор не пропишешь
А может быть такое, что абстрактные классы требуют наследования чисто с помощью деструктора?
Я имел в виду потому что такой инструкции в x86 (да и в arm вроде) не существует. Значение из переменной (расположенной в памяти) должно быть помещено в регистр, чтобы с ним могли проводиться операции типа сравнения (=вычитание с отбросом результата). Сравнить значение в памяти со значением в памяти невозможно. Можно только регистр с памятью, другим регистром, или с константой, указанной прямо в инструкции.
Сначала (без оптимизации) он помещает один из аргументов в eax чтобы сравнить со вторым аргументом.
https://www.youtube.com/watch?v=ryRf4Jh_YC0
Учиться нужно по хорошим книгам, а не по движущимся картинкам для даунов. Сначала читаешь что-то базовое (Страуструпа), потом учишь наизусь Effective Modern C++, потом внимательно читаешь Concurency in Action.
Естественно.
Тип массива это костыль, который имеет мудацкий синтаксис и в любой непонятной ситуации стирается до обычного указателя.
Ну наканецта. Будет так же хорошо, как в фортран-77 или придется еще пару стандартов подождать?
я знаю, что в 20 стандарте они могут быть constexpr, но не понимаю, почему не могли быть до этого
Нет, я серьезно.
Ты мимо жс треда промахнулся
А причем тут траленк? Ты же можешь объявить константную переменную типа std::string и присвоить ей результат функции, почему тогда компилятор не сможет вычислить эту функцию в компайл-тайме, сделать из выхлопа строковый литерал и инициализировать им строчку? Естественно, предполагается, что функция без побочных эффектов и не опирается на рантайм-данные.
Про выделение в куче нехуй пиздеть, ты неизбежно выделяешь память на стеке в процессе любых вычислений, например.
Это называется "иф йа ниприэмлю, но бесполезную переменную рес все равно за каким-то хуем заведу".
В тредах уже обсуждался курс от Яндекса практикума?
Хочу после фронта стать нормальным человеком
Строки char[] вполне себе constexpr.
> ты неизбежно выделяешь память на стеке в процессе любых вычислений
Во-первых, нет (при 2+3 никакой памяти не выделяется), во-вторых, стек это очень просто, он практически автоматом работает если у тебя вызов функций. При заходе в функцию выделяется нужное место под аргументы и локальные переменные, при выходе автоматически освобождается то же количество. Ничего никуда утечь не должно. При new же надо следить, а когда delete вызвали, а не используется ли после удаления, указатель на этот кусок кучи могут передать в другую функцию, там изменить содержимое, короче муть.
Не могу смотреть на 1.0 скорости, слишком много информационного мусора
Че блять? К чему ты это вообще высрал, долбоеб? Разговор был про перенос инициализации в компайл-тайм.
Ну да, и я про него же.
моё айсикью 0xFF
058 в треде.
В vim-е, конечно же.
Nvim + правильный набор плагинов. Если ты сойбой-говноед, то сойблайм или вскод. Активация защиты против долбоебов: я знаю, что вышеперечисленное не IDE, но IDE не нужна в байтоебских проектах любой величины.
Clang или gcc, не особо принципиально.
>но IDE не нужна в байтоебских проектах любой величины.
Когда не писал ни одного проекта больше тысячи строк
IDE это просто набор полезного функционала.
Он может быть условно в виде "одной" софтины (vs) или комплекта из нескольких (терминал + vim + плагины)
>Когда не писал ни одного проекта больше тысячи строк
Проиграл. Писал L1 гипервизор, тотал 70000 LoC в одно рыло, вообще никаких проблем.
У тебя в 2к20 есть полный автокомплит, средства рефакторинга, профилирования, global jump, линтеры, полная семантическая подсветка, отладка, нахуя тебе IDE весом с твою мамку, анон? Для байтоебских, мать твою, проектов. Единственная причина юзать IDE - когда она наворочена разным говном типа шаблонов для автовысирания гуй-окошек, но в байтоёбщине это не требуетсяв 99% случаев.
Подписываюсь под каждым словом.
Тогда вижуал студия код, кланг.
>У тебя в 2к20 есть полный автокомплит, средства рефакторинга, профилирования, global jump, линтеры, полная семантическая подсветка, отладка, нахуя тебе IDE весом с твою мамку, анон?
Ты сам написал только что, зачем мне IDE? Я не хочу собирать конструктор, я хочу, чтобы работало. Студия + решарпер - оп, всё работает.
Не работает в любом случае, но если не писать ClassA::, то не подсвечивается.
В class scope есть member function declaration (int ClassA::g()), но для неё не существует member function definition.
В global scope есть function definition (int g()) — читай "global function" или "free function". Эта функция никак не пересекается с декларацией, которая есть в class scope.
>Все варианты инициализации, все об указателях, конструкторах и тд.
По перечисленному не так уж много нужно знать.
А так — вряд ли конечно, но очень многие знают 90%, а этого достаточно.
Спасибо большое
Некоторые вещи депрекейтят и затем полностью исключают (auto, register, throws, auto_ptr, триграфы и кучу другого). Главное - чтобы можно было прямолинейно переписать код из старого стандарта в новый. А сильно ломать совместимость никто не хочет, ибо уже есть триллионы строк кода. Уже который год ведуться дискуссии по поводу "эпох" и std2, но там дохрена проблем, да и компиляторостроители не хотят поддерживать несколько сильно различающихся версий одного языка.
Старый auto, который storage duration. На его смену и пришёл сегодняшний auto.
Это другое auto
Скотт Мейерс, Бьорн Страуструп, Андрей Александреску, Степанов, некоторые мейнтейнеры Буста, я (шучу)
Они всё равно собирают древними версиями компиляторов.
Да и вообще, плюсы не самое сложное что бывает на свете.
Есть монстры, знающие наизусть Евгения Онегина или там Гомера. Ну или на худой конец ещё какая нибудь ошеломительная память у них.
Ещё вот попробуй разберись в математических книжечках каких. Матанчик там, линалчик, функанчик. Как по мне - куда жестче этих сраных плюсов.
Да пиши в виме, никто не запрещает. У меня на работе дрова в студии лепят, удобно. Одной кнопкой билдишь, другой дебажишь, третьей выкатываешь в прод, ну итд.
>Бьорн Страуструп,
Он точно уже признавался что не полностью знает современные кресты, остальные хз.
>Nvim + правильный набор плагинов
Не подскажешь какие плагины юзал?
пытался вим напердолить, но автокомплит победить не смог он работал, но не удобно
coc.nvim ставится и работает тупо из коробки. Выйди из 2012 и перестань пытаться поставить говно под названием YCM.
Если бы тебе надо было взять адрес какого-нибудь 10 элемента то еще норм, а так у тебя есть функция .data() для этого.
UB UB ГРОБ КЛАДБИЩЕ
*v.resize
Аноны, чем вообще заниматься после изучения синтаксиса? Что учить дальше чтобы взяли на работу и желательно не как веб макаку на 40к?
Писать программы. Все похуй на твои знания синтаксиса, нужно уметь код писать.
вебмакака всегда будет зарабатывать больше тебя, анон. Если твоя цель вката в плюсы - это 300кк/наносек, то ты не по адресу.
Веб-макакерство - деньги и смузихлебство.
Кресты - душа.
std::bit_cast
что ты хотел написать для себя когда-нибудь? То и напиши.
>Выйди из 2012 и перестань пытаться поставить говно под названием YCM.
Я делал как в туториале говорили...
>Скажите, есть ли в мире человек, который помнит все нюансы плюсов?
Думаю, нет. Видел несколько раз как ключевые разрабы GCC и Clang не помнили относительно простых вещей.
Думаю, у них память занята ньюансами парсинга ~ в шаблонах.
Это с с++17. Тип авто выводится.
Чере какую-нибудь констэкспр парашу? хз
В c++ нельзя вернуть функцию. Или по дедовски указатель на функцию, или какой нибудь современный но более оверхендный std::function.
Указатель на функцию конечно же
О, я прозевал, с с++11 можно еще лямбду вернуть.
Эх, дружище... Это примерно как спросить "Вот я английский алфавит выучил, что дальше учить, чтобы переводчиком в правительстве стать?".
Так ты когда учил чем руководствовался?
>Все похуй на твои знания синтаксиса
Только на собесах почему-то заебывают вращением деревьев, и квадратными кругами
Так прохождение собеседования это параллельный скилл, к реальному программированию применим постольку-поскольку.
Это валидно?
(Foo2 возвращает указатель на строку аргумента str)
Везде где видишь
Ты можешь присваивать массив символов в std::string, там закулисами перегружены оператор =, (), через uniform initialization офк тоже можно, но это уже не присваивание, а инициализация.
Отсюда вытекает, что можно слать в функцию, которая принимает std::string, сырой массив символов, вызываемая функция примет это, как std::string. То бишь,
void foo(std::string govno) {
std::cout << govno.size(); // 6, rabotaet!
}
const char mocha = "zalupa";
foo(mocha);
В обратную сторону это, офк, не работает, но имея std::string, ты можешь получить на него константный сырой указатель (const char), вызвав метод data:
std::string random { "yayayoyo" };
printf("%s", random.data()); // rabotaet!
сука, забыл про то, что дефолтные астериски хавает макаба.
Перед mocha после char есть астериск
и там, где const char в скобочках, тоже звездочка должна быть после char и перед ")"
std::string_view это не std::string.
Имей в виду что с-строка в памяти хранится как \0-терминированная, т.е.
'h' 'e' 'l' 'l' '\0'
Но string_view может указывать на середину строки, и вернуть что то вроде 'h' 'e' 'l', т.е. работать с этим char* полноценно ты не сможешь, т.к. функции типа strlen будут ждать \0 в конце.
Тут про string_view вопрос,
Он внутри хранит указатель на строку char (как я понял). Он не создает строку, у него вообще нет операций выделения памяти (типа умный указатель на строки?).
Но если я передаю "hello" в функцию - разве это "hello" не создается локально на время жизни функции и не удаляется по завершению функции Foo2?
Если да, что тогда вернет return? Это UB?
Если нет - как это работает?
В таком виде как ты написал - нет, литерал строки будет записан в static storage, т.е. секцию .data. На него ничего больше не будет выделяться, все уже выделено линковщиком 1 раз.
>Но если я передаю "hello" в функцию - разве это "hello" не создается локально на время жизни функции и не удаляется по завершению функции Foo2?
string_view все равно, оно хранит указатель, а валидный он или нет - твои проблемы
Как быть, если у меня есть класс A у которого есть класс мембер в виду указателя на объект класса В и я хочу использовать умные указатели? Я пришел к выводу, что если хочу, допустим, аллоцировать память для указателя на объект В во время вызова конструктора класса А, а пото деаллоцировать память во время вызова деструктора, то мне приходится использовать сырой указатель для этого. Я не то чтобы против, у меня первый ЯП См и я привык работать с сырой памятью, но в плюсах хочется обмазываться фичами плюсов все же.
Например:
class A {
public:
A() {
ptr = new B();
}
~A() {
if (ptr) {
delete ptr;
}
}
private:
B⚹ ptr;
};
Здесь все предельно ясно - указатель на объект класса В аллоцируется при вызове конструктора класса А и деаллоцируется при вызове деструктора класса А. Лайфтайм указателя на объект класса В равен лайфтайму объекта класса А (при условии, что этот указатель не освобождали в одном из методов класса А, естественно). Как провернуть такое же, но с умными указателями? Или в таком случае лучше юзать сырые указатели и не ебать себе мозги? Заранее благодарю.
Чтобы не писать по три раза код для оператора <, > и =.
Мысли на тему у меня есть, но думаю, что пргограммисты с двача знают что - нибудь лучше
Объясни внятно что делаешь.
Тебе эмулятор экселя или может 1С нужен? Кассовое ПО?
Что имитировать собрался?
Блять, я на дауничах думал, что unique_ptr разрушится при выходе из деструктора -_\\
Так и есть
> достаточно шаред_птр
Это мнение жабасприптеров или кого? Потому что разработчики стандарта советуют свести к минимуму shared.
Есть реальное мнение топовых крестовиков - что шаред_птр это антипаттерн почти везде, где он используется, кроме очень редких кейсов.
нафига тебе вообще указатели? Я в продакшене даже unique_ptr почти не использую. Строки\вектор<чар> - этого достаточно.
>>773543
Да вы заебали ныть. uint64_t или void - это всё что нужно. Ну ещё char для байтоёбства. Память через malloc выделяем для массивов или структур. Типы вообще придумали инвалиды с IQ 60. Какая-то ненужная хуита. Лямбды, классы, корутины - нахуя? Или вот, вспомнил смешную хуйню - шаблоны. Это когда у тебя есть типы, но они мешаются...
чего несешь, шиз?
Это программа Parent. Как теперь строку "Hello, my son!" принять в Child? Нихуя не пойму, что писать. А вот этот код я тупо скопипастил, поправив кое-что вызывавшее ошибку.
http://www.cpp.sh/4ltcc
Поясните вкратце, визуальная уебищность программ на Qt является следствием лени и/или отсутствия чувства стиля у программистов, или платформа в принципе не позволяет делать годный интерфейс?
Один красивый скриншот богатого интерфейса на Qt будет лучше тысячи слов.
А как ты хочешь чтобы оно работало везде и сразу?
Тут либо тащить бровзер (тебе же нравятся красивые программки на электроне выедающие треть цпу и 1 гб оперативки?) либо по костылику собирать вот такую еботину, которая кое как, но таки работает везде и быстро, лол.
Короче, хочешь красоту и чтобы не лагало — пиши на технологиях вендоров для каждой платформы свой код.
>отсутствия чувства стиля у программистов
Частично конечно вот это.
Слушай, я в сях и юниксах мимокрок, поэтому весьма условно понимаю что ты говоришь.
Вот конкретный пример раз (пикрил 1): здесь слева, в навигации, можно (нужно) было поставить условный MinLength или .FixedPanel. Это кодер его не поставил или ферйморк не возволяет?
Кокретный пример два (пикрил 2): слева, в навигации, используется очевидно не подходящий по контексту контрол. Это от безрыбья или от вкусов пограммиста? И еще, эти гигантские отступы от иконок, это уебок-программист, или кутэ по-другому и не позволила бы сделать?
И еще один пример, который лично меня заебывает больше всего: комбобоксы в Qt-программах всегда позволяют редактировать содержащиеся в них элементы (или текст комбобокса, уж не знаю как там в кутэ). Это происходит даже тогда, когда по контексту список выбираемых элементов конечен и сами элементы неизменны (в том же WinForms это "стиль" DropDownList, пикрил 3). Я встречал это стопиццот раз, но ни разу не наблюдал фиксированного комбобокса. Его не существует в природе или кодеры говноеды?
Так, про комбобокс, походу, я нашел ответ в собственных же скринах.
>Это кодер его не поставил или ферйморк не возволяет?
Скорее всего поставил, просто он может где-то и не работать — это же кроссплатформа, в Qt постоянно нихуя нормально не работает, кек.
>Это от безрыбья или от вкусов пограммиста?
Это от вкусов программиста, как и
>эти гигантские отступы от иконок
зумерок. Эпол не так-то и давно всех анально прищучил к гайдлайнам и приучил везде пускать дизайнеров вперёд через мобилки, ещё лет 10 назад это был бы отличный по юзабилити и дизайну интерфейс, погугли что лепили в эпоху XP и Winamp.
>Его не существует в природе или кодеры говноеды?
Или.
Ещё раз, пчел — десктопный софт находится в полумёртвом состоянии не развивается уже больше десятилетия (даже проф софтины — поголовно говнины говн, наращивают фичи но чтобы ими пользоваться надо нахуй вышку по ним получать), то, что на мобилках и в вебе ускакали на столетия вперёд тут никого не колышит. Я вот например ничего страшного в этих пикчах не вижу, потому что застал кое что похуже.
У DevMachines есть куча стилей для qt.
Ещё если ты не скопировал папку styles, то будет что-то вроде вин95.
для меня лучшая программа на qt - это qbittorrent
>зумерок
Ты ебанутый, блядь?
> десктопный софт находится в полумёртвом состоянии не развивается уже больше десятилетия
Ты ебанутый, блядь.
>>773708
>qbittorrent
О, а он виндовый ну кутэ?! Ох нихуя! Ну тогда вопрос к кутэ закрыт, хуле я тут соплю жую. Двойных пиздюлей авторам всей той еболы, что я выложил пикрилами.
> Ещё если ты не скопировал папку styles
А это че? Они на этапе вступления и компеляции подсасываются или конечный пользователь может их скомпелированной софтине подкладывать и вертеть ее представления согласно собственным представлениям?
>Ты ебанутый, блядь.
Ну ты сейчас берёшь и показываешь живой софт широкого назначения, а не профессиональный софт который юзают в лучшем случае 5% от общей массы. Да и тот в плане интерфейса мёртв, только на маках красивые свистоперделки делают.
>Ну ты сейчас берёшь и показываешь живой софт широкого назначения, а не профессиональный софт который юзают в лучшем случае 5% от общей массы.
Бля. Столько хуйни в одном предложении, пиздец. Во-первых, венда - это все еще десктопное приложение. Это детский мат в один ход тебе. Во-вторых, неси-ка пруфы про "5% от массы", потому что это пиздежом попахивает. Как принесешь, сразу станет понятно, что такое "профессиональный софт", что такое "софт широкого назначения" (лол) и насколько можно доверять методике подсчета. В-третьих, даже если "софт широкого назначения" составляет "мало процентов" от "общего количества софта" (разрабатываемого? эксплуатируемого? поддерживаемого? Хуй знает, но ПРОЦЕНТОВ МАЛО Я СКОЗАЛ), это не значит, что развитие десктопа остановилось. Шапку посмотри, там один WPF твои домыслы опровергает на раз-два датой свежего релиза и спискотой допилов.
> А это че?
Честно говоря не знаю наверняка, но вроде по умолчанию идёт попытка загрузить тот самый стиль из папки styles, если не удалось, то fallback до win95. Можно и текстом задавать стиль, вроде setStyle("fusion")
> вроде по умолчанию идёт попытка загрузить тот самый стиль из папки styles
Так на этапе выполнения попытка идет?
http://www.cpp.sh/2hzyq
Да
>>773729
Попытка мелкомягких в юникод
https://www.codeproject.com/articles/2995/the-complete-guide-to-c-strings-part-i-win32-chara
А почему не работает? Какая библиотека этому говну нужна?
Поддержка юникода в ШИНДОВС.
Когда у тебя определен дефайн __UNICODE, CreateProcess (а это макрос, шоб ты знал) разворачивается в CreateProcessW, а _T("xxx") в L"xxx".
А когда дефайн не определен, CreateProcess разворачивается в CreateProcessA, a _T("xxx") просто в "xxx".
И так большинство функций имеют две версии _A и _W, принимающие сhar и wchar_t соответственно.
А фраза "Hello, my son" почему не отправляется?
Не используй макросовую юникодопарашу, прямиком из 95ого года.
Ко всем API добавляй A (CreateProcessA), и просто "xxx" как аргументы юзай.
Не слушай дебила, добавляй W везде, только не забудь в настройках проекта поставить юникод
>TCHAR-парашу
Ты про как здесь? Это неработающий пример моей лабе про обмен данными процессов.
Тут я могу только предложить скинуть денег на лечение
>>773745
https://habr.com/ru/post/164193/ Почитай вот это, и почини код из примера
всю _T парашу убрать, из _tmain сделать main, и все T-функции сменить на нормальные и взлетит, по идее
Там другое вылезает помимо _T. Если так уверен в себе, можешь сам попробовать, если хочешь.
https://drive.google.com/drive/folders/0B0tDS9ufZC7EaXZpeEVBWGZPSUU
https://hastebin.com/gafigovoyi.cpp
Давай так, я сделал чтобы этот мусор компилировался. Но это все настолько ужасно и неправильно, и не имеет отношение к нормальному сиплюсплюсу даже десятилетней давности.
И чето у меня очень большие сомнения про создание маппинга от INVALID_HANDLE_VALUE, но я виндовое IPC не трогал, мб это правильно.
Не уверен, где заканчивается C и начинается C++, но, наверное, мне следовало обратиться в C тред с вопросом по CreatePipe. Это всё вообще имеет отношение к плюсам?
> Тут я могу только предложить скинуть денег на лечение
Ну толсто же. А оператор в каких нибудь госуслугах твое имя тоже должна транслитом вводить?
Вообще все классическое виндовое апи - это чистый си. И судя по всему, ты проходишь какие-то очень старые говноуроки, которые учат сложным и очень специфичным понятиям (нахуя тебе IPC руками?).
Мало того, что тут отвратительный си, и мешанина из какой-то полной хуйни, типа io.h (легасевые куски какого-то закоса под POSIX?), так и сама лаба тебе не дает никакого понимания, что происходит, а просто говорит, делай так-то - будет волшебство.
Т.е. это реально полная хуйня, и учить так не надо. Сначала надо набить хорошую базу на самом языке, а потом уже пытаться пердолить предметную область, будь она систеным апи\графикой\сетью\любой хуйней.
>>773762
щас бы laba5.cpp в продакшен запуливать. А вот русский юзернейм в винде - только лечение.
оператор_ка
>Во-первых, венда - это все еще десктопное приложение.
А айось и андроид это мобильные приложения, ахуеть, вот это тейк.
>Во-вторых, неси-ка пруфы про "5% от массы", потому что это пиздежом попахивает.
https://en.wikipedia.org/wiki/1%_rule_(Internet_culture)
>что такое "профессиональный софт"
Софт, юзаемый для создания чего либо и прочей проф. деятельности, эти самый "креэйторы".
>что такое "софт широкого назначения"
Софт, который юзают обычные человеки, потребители.
>Хуй знает, но ПРОЦЕНТОВ МАЛО Я СКОЗАЛ
Если бы было НЕ МАЛО, твой труд стоил бы как труд студентика-юриста в нулевых и начале десятых, и ты бы кряхтел в подвале за 10к.
>В-третьих, даже если "софт широкого назначения" составляет "мало процентов" от "общего количества софта"
Не мало, а ничтожно мало. В общем-то, своим постом ты показал свой кругозор — ты программист и видишь вокруг только таких же гиков — значит врёти. Помочь достать голову из ануса я тебе не смогу, извини.
> Шапку посмотри, там один WPF
Его там нет.
>твои домыслы опровергает на раз-два датой свежего релиза и спискотой допилов.
Ещё раз, читай что я написал
>>773717
>в плане интерфейса мёртв
ты возможно не увидел слова
> интерфейса
но я тебе могу объяснить: возьми свои WPF, и смотри на zbrush/photoshop/visual studio/3ds max/unreal engine(всмысле, редактор)/unity/qt creator/что угодно. Единственное, что изменилось в некоторых за последние годы (если не десятилетие) — добавилось свистуличек, и теперь там красивые иконочки, а юзабилити на уровне нулевых так и осталось.
А теперь посмотри на веб/мобилки, и сравни прогресс. Тащемта, если 2 десятилетия стагнации — это не смерть, то хз что это.
>Во-первых, венда - это все еще десктопное приложение.
А айось и андроид это мобильные приложения, ахуеть, вот это тейк.
>Во-вторых, неси-ка пруфы про "5% от массы", потому что это пиздежом попахивает.
https://en.wikipedia.org/wiki/1%_rule_(Internet_culture)
>что такое "профессиональный софт"
Софт, юзаемый для создания чего либо и прочей проф. деятельности, эти самый "креэйторы".
>что такое "софт широкого назначения"
Софт, который юзают обычные человеки, потребители.
>Хуй знает, но ПРОЦЕНТОВ МАЛО Я СКОЗАЛ
Если бы было НЕ МАЛО, твой труд стоил бы как труд студентика-юриста в нулевых и начале десятых, и ты бы кряхтел в подвале за 10к.
>В-третьих, даже если "софт широкого назначения" составляет "мало процентов" от "общего количества софта"
Не мало, а ничтожно мало. В общем-то, своим постом ты показал свой кругозор — ты программист и видишь вокруг только таких же гиков — значит врёти. Помочь достать голову из ануса я тебе не смогу, извини.
> Шапку посмотри, там один WPF
Его там нет.
>твои домыслы опровергает на раз-два датой свежего релиза и спискотой допилов.
Ещё раз, читай что я написал
>>773717
>в плане интерфейса мёртв
ты возможно не увидел слова
> интерфейса
но я тебе могу объяснить: возьми свои WPF, и смотри на zbrush/photoshop/visual studio/3ds max/unreal engine(всмысле, редактор)/unity/qt creator/что угодно. Единственное, что изменилось в некоторых за последние годы (если не десятилетие) — добавилось свистуличек, и теперь там красивые иконочки, а юзабилити на уровне нулевых так и осталось.
А теперь посмотри на веб/мобилки, и сравни прогресс. Тащемта, если 2 десятилетия стагнации — это не смерть, то хз что это.
Ок, пчел, вот поясни мне — чем эти скрины принципиально отличаются от того, что было лет так 10-15 назад? Тем, что всё свистит, пердит и выглядит в лучших традициях винампа, но с красивыми хуй-рез иконочками с тенями, а не пикчами 16x16 и квадратиками?
> >что такое "профессиональный софт"
> Софт, юзаемый для создания чего либо и прочей проф. деятельности, эти самый "креэйторы".
Тик ток это профессиональный софт, ясно.
>Это на чем, на winapi и cocoa без лейаутов?
Cocoa адекватно сравнивать разве что с WPF, который и есть подход вендора к созданию гуя, но точно не с винапи.
Там есть и лэйаут, и визуальный редактор, и куча контролов на все случаи жизни с возможностью кастомизаций/анимаций/ебли в ухо и всем чем тебе надо.
>Попробуй winapi, чтобы почувствовать разницу.
Он на момент выхода XP уже не был главным вендор-веем, уже были и MFC и тонны прочей говнины от M$.
>А я говорил о интерфейсах десктопных приложений, и ты ответил на пост про интерфейсы.
Нет, ты говорил о том что десктопные приложения мертвы. Игры не мертвы => десктоп не мертв.
>Нет, ты говорил о том что десктопные приложения мертвы
Ну давай восстановим хронологию:
>>773707
>Ещё раз, пчел — десктопный софт находится в полумёртвом состоянии не развивается уже больше десятилетия (даже проф софтины — поголовно говнины говн, наращивают фичи но чтобы ими пользоваться надо нахуй вышку по ним получать)
Перевожу: интерфейс мёртв.
>>773717
>Да и тот в плане интерфейса мёртв, только на маках красивые свистоперделки делают.
Перевожу: интерфейс мёртв.
>Игры не мертвы => десктоп не мертв.
Во первых, это и не десктопные приложения. Ведьмака на свитче запустили, который вроде как мобильная консоль, теперь это что?
Во вторых, из твоего вывода следует, что игры на мобилках и консолях не мертвы => пека не мертво. Справедливо, чо.
Да, вот так выглядит современный софт на десктопе, кекус.
ВЕБПУНК
>MFC
А, точно, вот эту хуйню сравнить с Qt.
Да я уже позабыл все это говнище, как страшный сон
Потому что ШИНДОВС
Двачую этого
это было сделано в те времена, когда разница в перфе между char и wchar_t действительно была заметна
Хорошо выглядит.
Понимаешь, это концепция "окна", она реально так работает - у тебя маленькое окошко, а за ним целый мир...
Так ведь до сих пор встречается ситуация, когда какая-нибудь залупа отказывается работать из-за того что в каком-то там пути кириллица, или пробел, или конкретно символ 'я' (реальная история, я не тролль), или сам путь длиннее 254 символов.
Как же всё таки легко спалить простофилю-зумерка, достаточно назвать зумерком — горит и рвётся.
>А зачем тебе не-ASCII символы?
>А зачем тебе монитор?
>А зачем тебе больше 16 Кб памяти? Ты что, потреблядь?
У тебя какая-то нездоровая фиксация на зумерках.
Ха ха, у меня так emscripten однажды умер. Хотя если подумать, то не только он - еще сборка какой то прошивки. Пришлось творить адову хуйню типа переименовать все папочки чтобы путь был C:\M\N\P\fucking_long_file_name.cpp
У меня один набор криптографических предвычислений — 512 кб в лучшем случае.
В производительном — 64 мб.
Когда уже #embed сделают
QVariant MyModel::data(const QModelIndex &index, int role) const у меня при DecorationRole возвращает QImage. Хотел запилить делегата, пишу значит index.data(Qt::DecorationRole), но index.data() то возвращает QVariant, сука. qobject_cast не сработает, т.к. QImage - это не QObject. Другие касты боюсь использовать. Как быть?
НУ а о всяких {} я молчу. КАк разобраться в этом?
int main() {} // вот теперь заебись
Шо тут сложного то?
> Почему в конструкторе ()
Ну так придумали. Типа "безымянная" функция с именем класса. MyClass()
>просто через присваивание
Если ты напишешь MyClass obj() то ты создаешь объект конструктором.
Если ты напишешь MyClass obj = MyClass() то ты сначала создашь (безымянный) объект, а потом присвоишь его переменной obj. Как написал анон, умные компиляторы сейчас выкинут этот лишний шаг.
>о всяких {}
То что MyClass() подозрительно похож на функцию, создало некоторые проблемы. Можно перепутать с объявлением или вызовом функции. MyClass {} работает почти так же.
> Ну так придумали. Типа "безымянная" функция с именем класса. MyClass()
Я про инициализацию членов класса после двоеточия.
> Если ты напишешь MyClass obj() то ты создаешь объект конструктором.
> Если ты напишешь MyClass obj = MyClass() то ты сначала создашь (безымянный) объект, а потом присвоишь его переменной obj. Как написал анон, умные компиляторы сейчас выкинут этот лишний шаг.
А просто MyClass obj не вызывает конструктор?
> То что MyClass() подозрительно похож на функцию, создало некоторые проблемы. Можно перепутать с объявлением или вызовом функции. MyClass {} работает почти так же.
Если почти также, то в чем смысл два разных знака делать?
Во втором случае создается объект 2, а потом он копируется. В случае примитивов ничего, но при объектах это могут быть лишние телодвижения.
>>774708
>Я про инициализацию членов класса после двоеточия.
Не очень понял тебя.
>Если почти также, то в чем смысл два разных знака делать?
Чтобы убрать путаницу и неоднозначность, которая была со скобками.
тебе нахуй не нужен буст. Надо понимать сам язык, задрачивать библиотеки без задач (для тебя в текущий момент) - смысла бананий.
У меня есть задача, которую я хочу сделать. Для нее нужен буст. Я открыл доку и понял, что не понимаю код. Начал читать липпмана. Потом прочту про многопоточность
Что за задача? С некоей вероятностью она решается чем-то в разы более легковесным, чем буст
а, ты тот самый челик. Посмотри доклад Vinnie Falco - Get rich with Boost beast, чето такое. Там прямо готовый код есть для биста.
Блин, все равно нужно до шаблнов дочитывать.
Так не бывает сердце сгорает
Делегат добавляю вот так:
MyModel model;
QTableView view;
MyComboBoxItemDelegate *myDelegate = new MyComboBoxItemDelegate(&view);
view.setItemDelegateForColumn(2, myDelegate);
view.setModel(&model);
view.show();
Блять что за пиздец этот ваш qt и вообще ООП. В два раза больше ненужных строчек, выделение памяти под объекты, которые через 10 строк кода уже не нужны и прочая срань. Про читаемость вообще молчу. Вот другое дело процедурный стиль, когда каждая строчка - какое-то действие, которое из названия понятно.
Я не особый спец, но мне кажется, что ооп придумали, чтобы приложения можно было писать командой, а процедурный стиль годится только для одиночек.
Да, но когда кодишь соло, то от ООПа глаза вытекают и аж трясёт. Как будто специально сидели и придумывали как усложнить тебе жизнь.
Пусть это в энтерпрайзе варится, обычным смертным-то зачем это высерать?
Структуру уже проинициализировал? Не от хорошей жизни ООП придумали, и не от плохой от него не уходят.
Ну не сказал бы, что усложняет. Оконное приложение на Qt довольно удобно пилить. А процедурно как его пилить? Через Win32API и всякие хэндлеры? По моему это еще сложнее и трудночитаемее.
Ну так что я все таки сделал не так? В MyComboBoxItemDelegate я определил методы createEditor(), setEditorData() и setModelData(). Может еще какой то метод надо определить, чтобы при вызове view.setItemDelegateForColumn(2, myDelegate) делегат стал отображаться в ячейке таблицы?
Приведи пример такой нечитаемости, желательно с пикрилом. ООП призван упростить разработку крупных проектов, и он реально упрощает. Я участвовал в проекте на 18 млн. LoC и без ООП там был бы просто ад ебаный.
Даже в ядре Линукса, которое на чистых сях, есть овердохуя костыльных ООП конструкций. Костыльных - потому что в Си нет родного ООП и надо дрочить вприсядку, чтобы код хоть как-то был структурирован, а не напоминал один сплошной процедурный чиркаш, который невозможно ни мейнтейнить, ни отлаживать, ни вменяемо разбивать на модули.
> А процедурно как его пилить?
Как в ImGUI. Вот это просто сказка, жаль что под десктоп такого нет.
- дрочка вприсядку на паттерны ради паттернов (карго-культ). AbstractHelloWorldConsoleOutputPrinterFactoryFactory, сука.
- тотальная ненависть к ООП
По сути причина одна и та же - неумение в декомпозицию и осознанное использование инструментов ООП, из-за которого его инструменты только усложняют работу и вносят неразбериху, вместо того, чтобы все структурировать, упрощать и уменьшать связность.
>>775489
Просто ты школьник-неосилятор ебаный, и я рекомендую тебе просто прикрыть свою пасть и перестать тявкать.
>>775492
>>775505
Процедурный стиль годится только для говнокода, или для мелких-мелких скриптов, или для микроконтроллеров, в которых тесно, как в сортире и даже на передаче this экономят место. И то, даже там бывает все же выгоднее использовать классы.
>>775462
Нахуй тебе их недоMVC? Он же всратый, как говно, там даже размер колонок у QTableView нельзя настроить в модели, насколько я помню, и приходится дописывать свои велосипеды, или вообще слать нахуй эту парашу и пилить свой MVC. а лучше MVVM
> some of the C features we use may or may not be usable from C++ (statement expressions)
Иронично но в С нет такой фичи (это нестандартное расширение языка), и он умудряется в соседних абзацах критиковать плюсовиков за то что они смеют писать на С++ в разных стилях.
Ну да, GCC его любимый компилятор.
Микроконтроллеры - в большинстве случаев, няш.
Хочу начать учить С++ для Анрил Энжина по курсам от Udemi. Ну или по каким-то другим, если мне эти на зайдут, выбрать вроде есть из чего, не суть
До этого писал некоторое количество кода в блокноте на AutoHotkey и в текстовом редакторе Линупса (каким бы он там не был) на Баше.
В общем, я не хочу среду разработки здорового человека, типа Вижуал Студио или КЛион, я хочу себе околоблокнот, который не будет сам расставлять табуляцию, выделять ошибки и пытаться дописать за меня строку, типа вот такого: https://www.youtube.com/watch?v=F_dezRfdvg8
Если я начну учиться на таком - это инстафейл?
Какую бы вы мне среду посоветовали под мои запросы?
Или же вы посоветовали бы не выебываться и брать студию?
В 18 тред пиздуй
Вим
Да любой подойдет, если не будешь ставить плагины, у тебя будет только синтаксис подсвечиваться, никакого автокомплишена и проверки ошибок ни у какого редактора из коробки нету.
Бери какой-нить сублим текст или нотпад++ и вперед, если хочешь конкретно заморочиться то вим из твоего видео, там он просто обвешан тонами плагинов уже.
Это копия, сохраненная 23 февраля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.