Вы видите копию треда, сохраненную 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
>Да и тот в плане интерфейса мёртв, только на маках красивые свистоперделки делают.
Перевожу: интерфейс мёртв.
>Игры не мертвы => десктоп не мертв.
Во первых, это и не десктопные приложения. Ведьмака на свитче запустили, который вроде как мобильная консоль, теперь это что?
Во вторых, из твоего вывода следует, что игры на мобилках и консолях не мертвы => пека не мертво. Справедливо, чо.
Да, вот так выглядит современный софт на десктопе, кекус.
![vaporwave-window-windows-webpunk-vebpank-okno-windows-95-se[...].png](https://2ch.life/pr/thumb/1765587/15971419980640s.jpg)
ВЕБПУНК
>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 года.
Можете попробовать обновить страницу, чтобы увидеть актуальную версию.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.