Программирование


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
496 24 106

C++ тред #111 Аноним 18/05/20 Пнд 18:24:47 16930811
sad.jpg (13Кб, 612x504)
612x504
comment.jpg (58Кб, 878x111)
878x111
Аноним 18/05/20 Пнд 18:25:51 16930832
Двач, подскажите, есть ли такой контейнер что-бы можно было задать ему фиксированный размер и вставлять в него элементы с одной стороны, а с другой что-бы они смещаясь по очереди вылетали?
Аноним 18/05/20 Пнд 18:43:40 16930963
>>1693083
Врядли точно такое есть. Только свой навернуть. Можно на основе вектора. Сохраняешь индекс последнего добавленого элемента (он же начало). При добавлении - инкрементируешь индекс и заменяешь текущий элемент вектора на новый. Если дошел до конца - начинаешь снова с нуля. Ну и нужно operator[] продумать - вычислять индекс исходя из текущего смещения, учитывая границы массива. Вообще очень похоже на кольцевой буфер - но для буфера заполнение это гроб, кладбище, пидор и надо разгребать. А у тебя нрмальный режим работы.
Аноним 18/05/20 Пнд 18:45:53 16931024
Аноним 18/05/20 Пнд 18:47:30 16931055
>>1693083
Двусвязный список?
Аноним 18/05/20 Пнд 18:50:25 16931086
>>1693105
Он растёт до бесконечности.
Аноним 18/05/20 Пнд 18:52:19 16931107
Привет, анон. Возможно ли реализовать односвязный список без проверки при создании каждого нового узла списка, не первый ли он? Мой внутренний байтоёб не даёт мне покоя, пожалуйста, помогите.
Аноним 18/05/20 Пнд 18:55:34 16931148
Аноним 18/05/20 Пнд 19:04:10 16931229
Есть ли смысл пихать по всех функциях noexcept, если я не юзаю исключения? (именно в этом мини-проекте)

То бишь, void foo() noexcept {...}
Аноним 18/05/20 Пнд 19:06:33 169312610
image.png (168Кб, 1280x720)
1280x720
Как std::set будет сортировать типы, которые не сортируются? Ну там классы какие-нибудь? Или надо обязательно перегружать что-нибудь?
Аноним 18/05/20 Пнд 19:12:03 169313311
>>1693126
Если тип не поддерживает оператор <, то код не скомпилируется (ну или если ты явно не передашь функтор-сравниватель).
Аноним 18/05/20 Пнд 19:12:08 169313412
>>1693126
Реализовать std::less или написать кастомный operator<
Аноним 18/05/20 Пнд 19:18:35 169313913
>>1693110
Так, ладно, я уже сам разобрался. Всем спасибо.
Аноним 18/05/20 Пнд 19:25:03 169314514
>>1693122
да, будет чуть чуть побольше перфа и четкое напоминание самому себе, что тут эксепшен не бросается
Аноним 18/05/20 Пнд 19:27:50 169315115
Аноним 18/05/20 Пнд 19:52:59 169317016
Двач, делаю свой класс наследуясь от array, но при создании объекта нового класса в конструкторе не работает initializer_list.
https://pastebin.com/QB5TRuHz
Подскажите плиз, тема нихуя не простая, примеров нет, а что делать не ясно.
Аноним 18/05/20 Пнд 20:03:38 169317817
>>1693170
> делаю свой класс наследуясь от array
Не стоит наследоваться от классов из std
Аноним 18/05/20 Пнд 20:03:59 169317918
>>1693170
ваще не надо наследоваться от std контейнеров, они об этом намекают невиртуальным деструктором.

А к твоему вопросу - сделай конструкторы. Для твоего нового класса определен только дефолтный конструктор
Аноним 18/05/20 Пнд 20:04:19 169318019
Аноним 18/05/20 Пнд 20:06:37 169318220
>>1693179
>сделай конструкторы. Для твоего нового класса определен только дефолтный конструктор
using std::array<T, N>::array;
Разве это не наследует все конструкторы?
Аноним 18/05/20 Пнд 20:07:22 169318321
>>1693180
Не у всех у них есть виртуальный деструктор
Аноним 18/05/20 Пнд 20:10:44 169318522
>>1693182
Вот даже цитата из вики
If the using-declaration refers to a constructor of a direct base of the class being defined (e.g. using Base::Base;), all constructors of that base (ignoring member access) are made visible to overload resolution when initializing the derived class.
Аноним 18/05/20 Пнд 20:14:17 169319123
Добавил наследование для своего класса от QObject, чтобы сигналы работали:
class Layer : public QObject
После этого в инициализациях этого класса стали появляться ошибки о неявно-удаленном копи-конструкторе. Как это понимать? Я ничего не удалял.
Например:
Layer currentLayer = layers[index];
Пишет:
ошибка: call to implicitly-deleted copy constructor of 'Layer'
Аноним 18/05/20 Пнд 20:24:31 169320024
image.png (48Кб, 882x325)
882x325
Объясните пожалуйста начинающему долбоёбу, зачем автор урока использует суффиксы если он уже объявил тип? Нахуя нужна эта сраная "f" в конце если уже указано, что там float? Типа если суффикс не указать, будет какой-то не такой float? А если такой, то вопрос тот же - нахуя эти суффиксы в таком вот виде?
Аноним 18/05/20 Пнд 20:28:56 169320525
>>1693182
Например 1.0 - это double, а не float. И в момент создания переменной будет implicit конвертация из double во float.

Суффиксы корректно задают тип у rvalue.
Аноним 18/05/20 Пнд 20:31:22 169320926
Аноним 18/05/20 Пнд 20:31:22 169321027
>>1693200
По умолчанию X.X вроде double даёт, поэтому будет неявная конвертация. В данном случае суффиксы нахуй не надо, но уж не знаю где, но где-то потом может всплыть проблема.
Аноним 18/05/20 Пнд 20:33:24 169321228
>>1693205
>>1693210
То есть грубо говоря компилятор такой "а похуй что там этот хуй указал, ну написал float, да мне насрать, буду считать что это double"? И суффиксом мы ему уточняем, что это точно float. Типа без суффикса ему мало?
Аноним 18/05/20 Пнд 20:36:23 169321429
>>1693212
он будет неявно преобразовывать значение слева к типу слева.

попробуй сделать что-то в духе int a = 55555555555555555ull;
Аноним 18/05/20 Пнд 20:38:11 169321630
>>1693212
auto a = 1.0; // double
auto b = 1.0f // float
Это поведение кстати можно в компиляторе поменять.
Аноним 18/05/20 Пнд 20:41:37 169322331
>>1693216
Так лол, там в примере на скринах уже указан тип. Это же не как в го, где := написал и оно само определило что там за тип. Здесь конкретно написано, что переменная fValue это float. Не double, не ещё что-то, а именно что float. То есть мы это указали. Если бы мы захотели, чтобы переменная была double мы бы написали double. Но мы написали float. У меня именно это вопросы вызывает.
Аноним 18/05/20 Пнд 20:42:37 169322532
>>1693214
По моему это буквально означает то, что я написал постом на который ты ответил. Ну ок, буду знать, спасибо.
Аноним 18/05/20 Пнд 20:47:59 169322933
>>1693223
Тебе уже 5 раз написали
float x = 1.0; // компилятор компилирует неявную конвертацию во float т.к. значение 1.0 является double а тип данных куда это значение будет присваиваться является float
float x = 1.0f // компилятор нихуя не делает т.к. значение 1.0f уже является float
Хотя с оптимизацией компилятор вроде как в любом случае делать нихуя не будет
Аноним 18/05/20 Пнд 20:50:05 169323134
>>1693229
Хорошо, я даже не буду спрашивать нахуя это надо и почему бы просто не сделать так, что если ты указал float - это будет float без всяких неявных конвертаций. И double будет только если ты укажешь, что это double. Раз сделано значит умные дяди решили, что надо. Спасибо.
Аноним 18/05/20 Пнд 20:59:56 169323735
То что справа это временный объект и временный объект будет таким каким ты его там описал, с таким-же типом данных и таким-же значением, а технически без конвертации разные типы данных нельзя друг в друга записывать.
Поэтому значение double обязано и будет конвертироваться во float.
Временное значение - https://en.cppreference.com/w/cpp/language/lifetime
Аноним 18/05/20 Пнд 21:00:14 169323836
Аноним 18/05/20 Пнд 21:03:24 169324037
>>1693231
> почему бы просто не сделать так, что если ты указал float - это будет float без всяких неявных конвертаций
Последнее что я добавлю для полной ясности
float a = 1.0;
В данном случае ты указал float для своей переменной, она и будет float, но правое значение это double, а как я уже сказал разные типы данных не могут быть записаны друг в друга, поэтому конвертации не может не быть.
Аноним 18/05/20 Пнд 21:44:28 169328038
>>1693191
Я тоже пытаюсь разобраться в куте, пока безуспешно.
Подозреваю, что тебе нужно конструктор копирования для твоего класса Layer сделать.
Аноним 18/05/20 Пнд 21:54:26 169329039
Аноним 18/05/20 Пнд 23:49:51 169337640
Сколько бит за раз суммирует процессор?
Аноним 19/05/20 Втр 00:06:02 169337941
>>1693376
Что ты имеешь в виду?
Аноним 19/05/20 Втр 00:09:13 169338242
>>1693379
Ну где то слышал что для длинных примитивных типов сложение выполняется за 2 такта в отличии от коротких
Аноним 19/05/20 Втр 03:08:02 169342443
>>1693376
32-битный — 32, 64-битный — 64.
Со всякими SSE и MMX может и больше.
Аноним 19/05/20 Втр 09:02:17 169347444
>>1693424
С AVX2 может 256 бит за инструкцию. Все ждем следующую версию, когда векторы увеличат до 512 бит.
Аноним 19/05/20 Втр 10:05:45 169350145
>>1693081 (OP)
Сап, анон. Есть параметрический класс, я на вход проги получаю тип , через свитч-кейс перебираю способы вызова параметрической функции, параметр которой собственно передается в параметр класса. Есть ли какой-то более элегантный способ, кроме как свитч-кейс?
Аноним 19/05/20 Втр 10:46:42 169352146
Подключение всех библиотек разом замедляет компиляцию?
Аноним 19/05/20 Втр 10:48:19 169352247
Аноним 19/05/20 Втр 11:28:27 169356448
>>1693474
Это не следующая версия, они давно увеличены на серверных сокетах
Аноним 19/05/20 Втр 11:37:01 169357149
Аноним 19/05/20 Втр 11:37:44 169357350
Аноним 19/05/20 Втр 11:53:30 169358651
>>1693564

И уже в десктопах на skylake-x
Аноним 19/05/20 Втр 12:01:57 169359352
Поясните за разницу между set и unordered_set
Аноним 19/05/20 Втр 12:06:41 169359953
>>1693593
Не разницу в том как они устроены и внутри, это я понял. А в том какую когда дучше использвать. Они почти одинаковые. Единственное перебирать упорядоченное множество иногда удобнее
Аноним 19/05/20 Втр 12:11:06 169360354
>>1693599
set - когда не очень много элементов и операции сравнения будут быстрее чем взятие хэша от элемента. unordered_set - когда дохуя элементов. Я по крайней мере стараюсь так юзать.
Аноним 19/05/20 Втр 12:12:29 169360455
>>1693593
В гугле забанили?
Set - это всегда отсортированный массив (под капотом там red-black tree) с неповторяющимися значениями. Если это сэт структур/объектов, то ты решаешь по какому полю структуры будут неповторяющиеся значения.
Unordered_set - тоже самое, только эта структура данных позволяет хранить повторяющиеся элементы, в отличие от сэта.
А вообще, если ты не смог ТАКОЕ нагуглить, то земля пухом, анонче.
Аноним 19/05/20 Втр 12:14:50 169360656
>>1693604
>позволяет хранить повторяющиеся элементы
Ты с мультисетом перепутал
Аноним 19/05/20 Втр 13:05:28 169366557
>>1693593
для laba1 разницы нет
Аноним 19/05/20 Втр 14:08:03 169373058
>>1693593
Первый на дереве, второй на хэш таблицах. В первом сохраняется порядок, во втором дешевле операции доступа, вставки, удаления.
Аноним 19/05/20 Втр 14:25:10 169374559
Аноним 19/05/20 Втр 14:35:02 169375960
Ананасы, как заставить программу больше потреблять ресурсов процессора?
Аноним 19/05/20 Втр 14:40:26 169376561
Аноним 19/05/20 Втр 14:40:33 169376662
Аноним 19/05/20 Втр 14:44:58 169377263
изображение.png (108Кб, 604x347)
604x347
Аноним 19/05/20 Втр 16:00:31 169385464
image.png (44Кб, 741x708)
741x708
>Напишите программу, которая просит пользователя ввести число от 0 до 255. Выведите его как 8-битное двоичное число (в парах по 4 цифры). Не используйте побитовые операторы.

Вот это хтоническое нагромождение говна реально самый простой и правильный вариант решить эту задачу? Разве через кучу if else не проще? Мне просто в голове пока ещё трудно держать такой громоздкий алгоритм как тут. Стоит биться башкой в эту задачу пока на 100% её не пойму?
Аноним 19/05/20 Втр 16:09:48 169388265
>>1693854
std::string str;
If (i < 256)
while (i > 0){
str+=i%2;
i/=2;}
std::reverse(str.begin(),str.end());
std::cout << str;
Аноним 19/05/20 Втр 16:09:54 169388366
Аноним 19/05/20 Втр 16:15:30 169390167
>>1693882
Что такое reverse я ещё не знаю, но сама часть с вычислениями выглядит проще
Правда я не люблю использовать оператор +=, а предпочитаю писать это в полном виде
Аноним 19/05/20 Втр 16:23:59 169391268
Аноним 19/05/20 Втр 16:31:37 169392669
Аноним 19/05/20 Втр 16:35:10 169393270
Есть какие-нибудь сайты или сборники упражнений по плюсам с градацией по сложности (начиная от самых лёгких уровня хелло ворлд)? А то я чувствую, что практики мне нужно раз в десять больше чем предлагают эти уроки или в голове у меня нихуя не отложится
Аноним 19/05/20 Втр 16:36:56 169393471
Аноним 19/05/20 Втр 16:37:23 169393572
>>1693912
Ты читал сам ссылку свою? Двоичного нет модификатора.
Аноним 19/05/20 Втр 16:43:29 169394273
>>1693854
#include <bitset>
if(i<256 && i>=0){
std::bitset<8> x(i)
std::cout << x;}
Аноним 19/05/20 Втр 16:51:29 169394974
Анон, а как тру пацаны хранят id какой-нибудь сильносоздаваемого говна, пусть будет например идентификатор события убийства игрока в сетевой игре? Int мне кажется маловат. Какой-нибудь guid + хеши для map?
Аноним 19/05/20 Втр 16:57:34 169395175
>>1693934
Codewars выглядит именно как то, что нужно. Раздражает правда, что там надо каждый раз нажимать kata, выбирать сложность, выбирать упражнение, и нет возможности просто решать их подряд одно за другим
Аноним 19/05/20 Втр 16:58:57 169395376
>>1693934
>>1693951
Точнее есть, но там сложности как-то намешаны в кучу
Аноним 19/05/20 Втр 17:18:01 169397177
Аноним 19/05/20 Втр 17:22:19 169397578
>>1693971
это интрисики, С++ тут непричем
Аноним 19/05/20 Втр 17:49:19 169401379
Аноним 19/05/20 Втр 18:00:21 169402980
>>1693949
GUID неплохим вариантом выглядит. Там 128 бит, на долго хватит. В Boost есть heade-only реализация (UUID обзывается), хешер в комплекте.
Аноним 19/05/20 Втр 18:03:12 169403581
>>1693949
Int'ом обычно и хранят. В UE4 например для строк юзаются идентификаторы строк FName который и является интом.
Аноним 19/05/20 Втр 20:19:49 169417682
>>1693290
А как тогда сделать, чтобы для моего кастомного класса работали сигналы и слоты? Он же должен быть наследником QObject.
Аноним 19/05/20 Втр 20:21:18 169417783
Аноним 19/05/20 Втр 20:22:54 169418184
Аноним 19/05/20 Втр 20:28:13 169418885
>>1694177
У меня 11 хедеров и столько же cpp-файлов. Бесполезно требовать код.
Аноним 19/05/20 Втр 20:29:09 169419086
>>1694181
Что значит "создавать в куче"? Как я класс создам в куче?
Аноним 19/05/20 Втр 20:30:42 169419387
Аноним 19/05/20 Втр 20:33:30 169419788
>>1694193
Я итак так инициализирую все кастомные объекты. Причем здесь сигналы и слоты?
Аноним 19/05/20 Втр 20:49:37 169420989

>>1694197
Какой же ты тупой блядь...
> std::vector<std::unique_ptr<Layer>> layers;
> Layer ★currentLayer = layers[index].get();
Аноним 19/05/20 Втр 20:56:14 169421390
>>1694209
И че тут? Ты создал вектор с моим классом? И че? Как это связано с сигналами и слотами?
Аноним 19/05/20 Втр 22:14:17 169427791
Аноним 19/05/20 Втр 23:13:44 169432992
Сап, анон. Прочитал про REST, захотел к своей хайлоад-проге прикрутить няшную мордочку, чтобы веб-сервер делал к ней запросы (формат типа шттп, ответы - жсон, сильно ограничить большое количество запросов), потом хуячил вебомагию, а уже к серваку коннектились пользователи.
И я не знаю приемов и апи, как это всё правильно делать. Изи изучить язык и поведение, и как-то не изи собрать этот вебопаззл.
Например, сервер апач, в нем что там, питон-скрипты? А вся красота на js на страничке? А есть что-то красивое из коробки?

Второй вариант - подключить Qt + qml, оно проще, но платно и не веб
Аноним 20/05/20 Срд 01:53:57 169444593
Анчоусы, когда определяют класс, чисто стилистически следует ли писать отдельно поле private? А то у меня привычка делать, например, такое :
class RandomClass {
// private members
public:
// public members
};

Зная, что неявно поля класса имеют модификатор доступа private... Нужно ли явно указывать энивей или так норм?
Аноним 20/05/20 Срд 01:56:53 169444894
>>1694445
вкусовщина, но мне персонально больше нравится классика. сначала паблик, а потом прайвет, т.к. интерфейс должен быть выше, чем детали реализации имх
Аноним 20/05/20 Срд 07:58:17 169453195
Аноним 20/05/20 Срд 13:26:50 169501496
Выводится что надо qDebug() << string;
Выводится только один раз (вывожу в цикле) и только часть строки std::wcout << string;
Почему так? Строка является std::wstring
Аноним 20/05/20 Срд 18:03:41 169534097
>>1694445
>чисто стилистически следует ли писать отдельно поле private?
Обычно внизу пишут, но я для своих проектов сверху леплю. Когда сам класс пишешь, удобнее сразу потроха видеть. Когда чужой класс используешь - внутренности не особо важны.
Аноним 20/05/20 Срд 18:10:04 169534998
>>1693971
Они оче давно появились, году в 2013 что ли. Но у нас компилятор интеловский. В вижуал студиях новых точно тоже доступно.
Аноним 20/05/20 Срд 18:47:04 169541199
Аноним 21/05/20 Чтв 14:14:33 1696226100
>>1695411
Для таких извращений лучше подойдет Intel комппилятор.
Аноним 21/05/20 Чтв 16:18:29 1696399101
>>1696226
>Для таких извращений лучше подойдет Intel комппилятор.
Почему "извращений"? Очень удобно и кроссплатформенно, в отличие от интринсиков.
Аноним 21/05/20 Чтв 16:58:23 1696434102
>>1696226
А потом волшебным образом на не на интеловских процессорах программа будет работать не совсем так, как задумывалось.
https://3dnews.ru/997915
Аноним 21/05/20 Чтв 17:34:50 1696499103
Я правильно понимаю, что нужно для каждой закладки(tab) в Qt надо создавать отдельный класс виджета и наследоваться от виджета главного окна?
Аноним 21/05/20 Чтв 18:04:20 1696558104
Аноним 21/05/20 Чтв 18:30:35 1696594105
>>1696558
открой дебаггер и посмотри
Аноним 21/05/20 Чтв 18:35:13 1696602106
>>1696594
Нарушение прав доступа при записи.
Аноним 21/05/20 Чтв 18:35:48 1696605107
Аноним 21/05/20 Чтв 18:38:24 1696611108
>>1696605
Выходишь за границы может?
Аноним 21/05/20 Чтв 18:39:58 1696615109
>>1696602
Что по твоему возвращает sizeof(Student)?
Аноним 21/05/20 Чтв 18:42:55 1696618110
>>1696611
Ну, у меня файл используется только в этой функции, нет никаких лишних данных. Проверки на пустоту сделал, динамическую память нигде не использую.
Аноним 21/05/20 Чтв 18:43:37 1696619111
Почему единственный способ узнать точный тип объекта это вызывать ошибку во время компиляции?
Аноним 21/05/20 Чтв 18:43:44 1696620112
>>1696615
Размер упакованной структуры в байтах?
Аноним 21/05/20 Чтв 18:47:31 1696624113
>>1696620
Сгенерированый файл проверял? В нем все правильно?
Аноним 21/05/20 Чтв 18:49:50 1696626114
Бля, я дебил, у меня там string используется.
Аноним 21/05/20 Чтв 19:57:46 1696685115
Парни, помогите. Нужно сделать программу, которая делает зеркальное отражение бинарного дерева(данные из файла) и записывает его в другой файл. Вводные данные в виде(первая цифра-родитель; последующие- дети):
5 8
3 6 7
8 9 10 11
1 2 3 4 5
Порядок случайный. Можно использовать только fstream библиотеку.
Аноним 21/05/20 Чтв 21:09:28 1696781116
Аноним 21/05/20 Чтв 21:19:58 1696785117
>>1696781
В чем ошибка? Не надо наследоваться, только указать this в качестве parent?
Аноним 21/05/20 Чтв 21:26:35 1696796118
Аноним 21/05/20 Чтв 21:43:00 1696807119
>>1696685
Делаешь структуру узла бинарного дерева(инфо, указатель налево, указатель направо), делаешь функцию добавления и вывода. Добавляешь по принципу большее слева, меньшее справа(при условии, что в фале всегда большее справа) и все.
Аноним 21/05/20 Чтв 21:46:53 1696810120
Аноним 21/05/20 Чтв 21:54:38 1696817121
У статического метода класса ключевое слово static указывается и в хедере, и в cpp?
Аноним 21/05/20 Чтв 23:22:29 1696956122
>>1696399
Я об этом и говорю. У них есть поддержка встроенной сборки.
Аноним 21/05/20 Чтв 23:27:46 1696965123
>>1696817
Все, нашел. Только у прототипа.
Аноним 22/05/20 Птн 00:38:26 1697090124
Привет, аноны. Хочу перекатиться из Жавы в плюсы. Какие у меня есть варианты?
Аноним 22/05/20 Птн 00:40:48 1697093125
>>16968
Ну а разве там не нужно, чтобы родитель указывал на массив из детей(односвзный список)?
Аноним 22/05/20 Птн 01:17:53 1697136126
Аноним 22/05/20 Птн 01:40:50 1697149127
Сап анон, вопрос по выбору контейнера. Предположим, есть тип Player c id, name, bag, всей хуйней, как обычно такой формат хранят? Предполагается, что игроки часто удаляются, добавляются, а id - глобальный счётчик, считает подряд.
unordored_map мне кажется нормально подходящим под задачу, но есть же ещё unordored_set? (Ключ для map берется тот же, что и player.id)

А если задача взятия i элемента по ключу не популярна, в основном все операции идут со всем контейнером, то может вообще использовать std::list, а при необходимости поиска просто пробегаться через find?
Аноним 22/05/20 Птн 02:22:29 1697174128
Аноним 22/05/20 Птн 05:01:19 1697200129
>>1696619
Мышкой наведи на него в ide, тип в подсказке будет.
Аноним 22/05/20 Птн 09:33:30 1697287130
>>1697149
umap наилучший вариант, странно, что в тебя такие вопросы возникают
Аноним 22/05/20 Птн 10:41:16 1697347131
>>1697149
Игроков много всегда в один момент? Порядок игроков внутри контейнера важен? Структура не очень тяжёлая? Если на все вопросы ответ "нет", то думаю, что итерирование по обычному вектору быстрее будет. Удаление будет просто своп удаляемого элемента с последним. Хотя unordered_map тоже хороший вариант, да и чуть проще в исполнении.
Аноним 22/05/20 Птн 10:58:01 1697372132
>>1697136
Варианты переката. Куда? Что нынче пишут на плюсах? Бывают ли проекты где используют Жабу и плюсы, чтобы перекат прошел безболезненно?
Аноним 22/05/20 Птн 11:36:07 1697422133
>>1697347
Ну там не игроки, там другое, но да, много пиздец, по 10-100к, обновляется раз в секунду. Вектор не зашёл вообще из-за жирной реаллокации. Да и не нужны выровненные в памяти данные для таких объектов.
>>1697287
unordored_map?
Аноним 22/05/20 Птн 11:48:25 1697441134
>>1697174
А куда, в раст? хочу в системные
Аноним 22/05/20 Птн 11:53:55 1697454135
>>1696434
>>1696399
>>1696226

поясните за симд интринсики. Как я понимаю они же на любом х86 будут работать, или на амуде что-то пойдет не так?
Аноним 22/05/20 Птн 12:27:05 1697527136
>>1697441
Да, в раст. Пока освоишь плюсы хотя бы на уровне джуна - раст уже выстрелить успеет.
Аноним 22/05/20 Птн 12:39:24 1697542137
Вот с этого я охуел.
class Widget : public std::enabled_shared_from_this<Widget>{}
Как же криво реализован shared_ptr
Аноним 22/05/20 Птн 13:07:44 1697564138
>>1697542
>Как же криво реализован shared_ptr
Попробуй сам сделать, придешь к такому же решению. Если ты не понимаешь зачем так сделано (причем людьми которые гораздо опытнее тебя) - это не "криво", это просто ты недалек.
Аноним 22/05/20 Птн 13:14:07 1697570139
>>1697542
Лично мне очень редко нужен shared_from_this. Намного реже, чем сам shared_ptr, которым я и так почти не пользуюсь. Хотя емнип в асио это сильно используется.
Аноним 22/05/20 Птн 13:21:32 1697581140
>>1697454
Через cpuid набор инструкций нужно проверить, конечно же.
Аноним 22/05/20 Птн 14:42:47 1697652141
Двач, как зарегулярить два числа в строке? К примеру вот "Строка: 150/550"
Аноним 22/05/20 Птн 14:52:59 1697664142
Аноним 22/05/20 Птн 14:55:46 1697665143
>>1697664
Ну так регулярится только первое число, ко второму не переходит с std::regex_search
Аноним 22/05/20 Птн 14:56:54 1697666144
>>1697664
>>1697665
Хотя нет, так как ты написал всё зарегуляриться, но мне надо только числа.
Аноним 22/05/20 Птн 15:24:47 1697694145
Аноним 22/05/20 Птн 21:27:03 1698205146
Господа, поясните за паттерн Prototype. Почему прототип нужно копировать? Что мешает мне создать точно такой же объект с помощью new? Копирование быстрее, чем инициализация?
Просто вот есть у меня куча объектов-прототипов, и у каждого по несколько полей-указателей. Я не понимаю, зачем мне заново прописывать инициализации для каждого из полей в методе Clone(), когда я могу просто создать новый объект, и все точно будет работать.
Аноним 22/05/20 Птн 22:25:27 1698289147
Хочу в катиться в thread, но мне для моей задачи надо знать, могут ли несколько потоков обращаться к одной области памяти одновременно. Если да, будут возникать баги или конфликты?
Аноним 22/05/20 Птн 22:28:47 1698293148
>>1698289
Один массив объектов класса должен параллельно обрабатываться.
Аноним 22/05/20 Птн 22:32:33 1698301149
>>1698205
ДАВАЙ ХУЯРЬ ПО ПАТТЕРНАМ, РАБ
Аноним 22/05/20 Птн 22:36:21 1698310150
>>1698301
думать от тут блять начал.
ХУЯРЬ НЕ РАЗГИБАЯСЬ
за тебя другие чувачки подумают
Аноним 22/05/20 Птн 22:36:58 1698312151
>>1698289
В общем случае, да. Есть исключения (например, если все потоки будут только читать, то это безопасно)
Аноним 23/05/20 Суб 01:41:22 1698549152
>>1698289
Почитай про понятие "состояние гонки" или на человеческом языке - race condition. Пусть кол-во тредов - N, если N > 1, то если хотя бы один из тредов пишет в общую между тредами область памяти - состояние гонки имеет место быть. Решается это несколькими способами - атомарными переменными, мьютексами (в твоем случае, скорее всего, подойдет больше мьютекс).
Аноним 23/05/20 Суб 03:26:17 1698607153
>>1698205
Как проще, так и делай.
Clone() - это для тех случаев, когда через new будет либо сложно, либо не то. Например, объект был создан и настроен в коде, который ты не можешь или не хочешь менять, но при этом можешь делать его копии.

пзц, поубивал бы этих придумывальщиков "паттернов проектирования", более бесполезного учения в жизни не встречал
Аноним 23/05/20 Суб 03:28:00 1698609154
>>1698607
>можешь делать его копии
"его" — в смысле объекта, а не кода.
Аноним 23/05/20 Суб 20:10:17 1699259155
Кто-нибудь перекатывался из C++ на Java?
1. Сколько учили язык? В свободное время / во время работы?
2. С какой и на какую позицию перекатились? Сильно ли просели по зарплате?
3. Интересные ли задачи по сравнению с плюсами? Много ли своих заморочек?
4. Оно того стоит?

Работаю НЕ в НИИ, пишу на современном C++17 с пакетным менеджером, CI и всеми возможными плюшками, но чё-то пердолинга всё равно многовато. Что происходит с людьми пердолящими Qt и C++98 на заводе вообще не представляю.
Аноним 23/05/20 Суб 20:39:37 1699294156
>>1699259
>С какой и на какую позицию перекатились? Сильно ли просели по зарплате?
Лол. В среднем зп джависта на процентов 20% выше чем у крестовика, поэтому при перекате в джаву по зарплате вряд ли кто-то проседал, скорее наоборот.
>Интересные ли задачи по сравнению с плюсами?
>Оно того стоит?
На вкус и цвет, как говорится. Если ты находишь тырпрайз интересной отраслью разработки - джава для тебя. Кресты для игроделов и байтослесарей (разработкой браузеров занимается 1% из всех девов, поэтому я не беру их в расчет, например), то бишь отрасль совершенно другая, требующая совершенно других знаний. Прислушайся к своим интересам, чтоль.
Аноним 23/05/20 Суб 20:44:13 1699303157
>>1699294
> разработкой браузеров занимается 1% из всех девов
Ты так говоришь, будто это что-то почётное.
Аноним 23/05/20 Суб 20:50:28 1699325158
>>1699259
капец а я наоборот хочу
Аноним 23/05/20 Суб 20:55:15 1699334159
>>1699294
>тырпрайз интересной отраслью разработки
Кто-нибудь может пояснить кстати, что такое этот ваш тырпрайз/энтейрпрайз? Какие проекты считаются энтерпрайз? Писать вот те же браузеры это энтерпрайз или нет? Если нет, то чем написание энтерпрайз проекта отличается от написания браузера?
Аноним 23/05/20 Суб 22:17:03 1699474160
>>1698205
>Почему прототип нужно копировать? Что мешает мне создать точно такой же объект с помощью new?
Чтобы избежать дублирование кода. Don’t repeat yourself
Аноним 23/05/20 Суб 22:47:42 1699530161
>>1697666
Тебе надо match и перебор групп в матче
Аноним 23/05/20 Суб 23:55:27 1699580162
>>1699334
посмотри переводик слова enterprise и всё станет понятненько
Аноним 24/05/20 Вск 00:01:55 1699581163
>>1699334
Тырпрайз это когда пишешь сортировку массива с printf. Потому что консоль это линукс, а линукс стоит на серверах, а серверы стоят в энтерпрайз корпорациях.
Аноним 24/05/20 Вск 03:29:07 1699640164
>>1699259
Расскажи поподробнее про твое текущее место работы позязя

Что за предметная область, в чем заключается пердолинг, средний уровень крестовиков, почему именно С++17 и какие конкретно фичи из него, смотрите ли на 20 стандарт, че нить поконкретнее про стек неплохо было бы услышать

Добра
Аноним 24/05/20 Вск 12:42:18 1699800165
Зачем нужен & в перегрузке операторов?
Аноним 24/05/20 Вск 18:14:48 1700348166
Котаны, как реализовать события в С++? Допустим, у меня есть очередь и есть тред, который по сигналу должен добавлять элемент в очередь (сигнал приходит от другого треда).
Аноним 24/05/20 Вск 18:26:26 1700360167
>>1700348
upd

Забыл добавить, что хочется исключить polling, а сделать так, чтобы тред сделал свое дело, заснул и по сигналу с другого треда вставил новый элемент в очередь.
Аноним 24/05/20 Вск 18:59:36 1700376168
>>1700360
Один из вариантов это от std::condition_variable плясать. Если взять как пример кода в https://en.cppreference.com/w/cpp/thread/condition_variable
Код из функции worker_thread() добавить как метод класса очереди listen() и сделать там бесконечный цикл. Тред который хочет добавлять елементы в очередь вызывает queue.listen(callback) - и становится на паузу пока не будет изменена std::condition_variable. Тред который подает сигналы вызывает функцию notify() (в примере это main) которая меняет std::condition_variable, спящие пробуждаются, вызывается колбек и все уходит на новый цикл. Соотвественно нужно придумать способ прерывать этот цикл - очевидный это сделать так чтобы колбек возвращал булеан - нужно продолжать или нет. Но это как-то попахивает, незнаю почему. Колбек нужен чтобы скрыть эту все хуйню от клиенских тредов - они просто вызывают listen()
и потом у них дергается колбек по сигналу - они не ебутся со всей этой кондишионал парашей. Естественно вмест околбека может быть какой-то делегат, функтор любой коллабле который тебе удобен.
Аноним 24/05/20 Вск 19:26:05 1700408169
Ебаная поделка старика Билли не хочет компилировать этот код.
https://onlinegdb.com/BkHWgmOsI
Это баг msvc?
Аноним 24/05/20 Вск 23:22:52 1700747170
>>1700408
>auto f = [](){};
Современный С++ одной строчкой..
Аноним 25/05/20 Пнд 00:06:15 1700856171
15019507027740.png (40Кб, 1620x774)
1620x774
>>1700747
Да дело не в этом. Мало того что мув конструктор не работает у packaged_task, так lifetime у callable ровно до того момента пока существует хоть один shared_future, даже если он уже давно готов. Со всеми захваченными в лямбду переменными, которые он, сука, должен был освободить.
Аноним 25/05/20 Пнд 02:45:23 1701022172
Screenshot.png (91Кб, 1203x589)
1203x589
Пикрилейтед.
Что за хуйня, анон? Есть отсортированный вектор структур по определенному полю (здесь выбран int), вызывая бинарный поиск и через лямбду кастомизирую компаратор (без этого компиль не знает по какому критерию искать значение в векторе), он высирает аж 3 действия. Напоминаю, что временная сложность бинарного поиска - O(log(n)), сам логарифм по базе 2, в векторе 4 объекта.
В таком случае, log(4) = ~0.6, то бишь, округляя, максимум за 1 итерацию поиска должно было найти значение, а тут аж 3 операции! Щито? Мб я чет наговнокодил и надо по-другому? Мб не через лямбду?
Заранее спасибо.
Аноним 25/05/20 Пнд 03:06:53 1701033173
>>1701022
Ты нахуя десятичный логафирм берешь, дурик.
Аноним 25/05/20 Пнд 08:53:10 1701149174
>>1701022
>Напоминаю, что временная сложность бинарного поиска - O(log(n)), сам логарифм по базе 2, в векторе 4 объекта.
Чёт пиздец.
>В таком случае, log(4) = ~0.6,
)))
Аноним 25/05/20 Пнд 10:08:42 1701227175
eb532889379e9b8[...].jpg (50Кб, 668x1024)
668x1024
Сап, анон. Есть два стула - возврат ответа через return функции, или возврат ответа в передаваемую ссылку:

A foo1(const B& b)
{
return b++;
}

void foo2(const B& b, A& a)
{
a = b++;
}

ирл встречал оба варианта. Особого удобства тоже нет, если параметров несолько, то можно запаковать в кортеж.
Но я нуб в асинхронном и параллельном программировании, какой вариант лучше подходит?
Аноним 25/05/20 Пнд 10:59:33 1701277176
>>1701227
В паралельном наверное лучше через возврат делать - это более чистый вариант (pure function) что плюс при многопоточности, хотя мне сложно привести какой-то конкретный пример, как минимум в плюсах. Передача через ссылку - если это сделано имменно для возврата значения (тоесть это не ссылка на какой-то расшареный на несколько функций ресурс) то единственная причина это делать - попытка экономить. Но с RVO это бессмысленно, и даже вредно учитывая что аргументы у функций не бесплатны. Тоесть в случае одного аргумента это 100% возврат значения. При двух и больше уже стоит смотреть что красивей выглядит. Скорее всего паковать результат будет удобней.
Аноним 25/05/20 Пнд 11:18:20 1701309177
>>1701227
По ссылке обычно передаём то, что нужно именно изменить, т.е. например добавить в список или нарастить bounding rectangle. По значению всё остальное
Аноним 25/05/20 Пнд 11:37:04 1701342178
>>1701022
>>1701033
>>1701149
Писал ночью и не соображал что пишут. По базе 2 получается log(4) = 2, но действий-то все равно 3. А должно быть максимум 2, нет?
Аноним 25/05/20 Пнд 11:39:58 1701354179
>>1701342
O(n) это показатель того, как будет расти время, а не времени
Аноним 25/05/20 Пнд 11:52:04 1701377180
qtsplashdiffere[...].gif (3327Кб, 360x640)
360x640
Делаю splash screen в приложухе для андроида в qt. Делаю по этой инструкции http://zmc.space/posts/qt-android-splash-screen
Сплеш скрин немного сдвигается вверх во время загрузки, то есть в момент когда тема у которой бэкграунд задан как сплэш сменяется на сплэш из манифеста. Сам глюк на пикриле. В статье предлагается просто убрать лого для сплэша и оставть только у бэкграунда темы. Но меня это не устраивает, так как между сплешем и появлением интерфейса приложения будет появляться пустой экран. Мне нужно чтобы сплэш скрин был как на обычных приложениях, без сдвигов и без пустых экранов. Как фиксить?
Аноним 25/05/20 Пнд 11:57:02 1701389181
Где искать интересные opensource проекты? На гитхабе каша какая то
Аноним 25/05/20 Пнд 12:00:36 1701395182
>>1701354
Нет, анон. Big O notation - это обозначение пространственной или, в этом случае, временной сложности алгоритма. Если возьмем частный случай, в нашем случае - бинарный поиск БЕЗ повторяющихся элементов, то его worst case, равно как и best case и average case, - это O(log(n)), сам логарифм по базе 2, ибо ты каждый раз делишь сортированный массив на 2. Worst case - это максимальное количество действий, в данном случае обращений к ячейкам массива, которое произведет алгоритм. log(4) по базе 2 = 2, но действий, как видно по выводу, 3. В чем подвох? Ошибка явно в коде, математика здесь ошибиться не может.
Аноним 25/05/20 Пнд 12:03:04 1701399183
>>1701395
upd:
best case все же О(1), опечатался.
Аноним 25/05/20 Пнд 12:08:02 1701412184
Аноним 25/05/20 Пнд 12:18:35 1701438185
>>1701412
Причем здесь k? В массиве нет повторяющихся элементов так-то. И твое уравнение верно только если k очень мал по сравнению с n (в идеале, близок к 1), если k ближе к n, то это уже O(n★log(n))
Аноним 25/05/20 Пнд 12:27:30 1701461186
>>1701438
Нет. Учебник открой
Аноним 25/05/20 Пнд 12:30:07 1701464187
>>1701438
Ты не знаешь матчасти.
Например
O(k*log(n) + n + 5) = O(log(n))
Потому что O показывает как будет расти время при росте числа элементов.
Аноним 25/05/20 Пнд 12:43:14 1701487188
Screenshot20200[...].jpg (53Кб, 1072x208)
1072x208
>>1701022
Работает as intended. Наверно происходит сначала сортировка с использованием компаратора, а потом поиск.
Аноним 25/05/20 Пнд 12:47:35 1701493189
>>1701464
> O(klog(n) + n + 5) = O(log(n))
O(k
log(n) + n + 5) = O(n) так-то. Линейная функция растёт быстрее логарифма.
Аноним 25/05/20 Пнд 13:26:16 1701541190
>>1701022
Почему это вообще работает? Как он понимает, что 4 ==4, если ему надо лямбду писать для сравнения больше/меньше?
Аноним 25/05/20 Пнд 13:26:20 1701542191
>>1701493
Конечная сложность зависит от значения k. Если оно мало по сравнению с n, то это O(n), да. Если k примерно равен n, то сложность будет равна O(nlog(n)) по твоей формуле.
Аноним 25/05/20 Пнд 13:27:13 1701545192
>>1701487
А как избежать сортировки? Ведь массив по дефолту уже был отсортирован
Аноним 25/05/20 Пнд 13:33:38 1701553193
Screenshot.png (106Кб, 1300x759)
1300x759
>>1701464
>>1701461
Пикрилейтед. Перед вами массив из 10000 чисел от 1 до 10000 включительно, соответственно, без повторяющихся значений. log(10000) по базе 2 = 13.287
То бишь, самое максимальное количество операций поиска по вышеприведенным данным = 14 (потому что 13 имеет остаток, засим это округляется к бОльшему значению при наличии остатка в таких случаях).
Взяты пограничные значения, чтобы проверить максимальное кол-вл операций поиска. Все сходится, максимум = 14. Про какой k вы говорили яхз, повторяюсь, в массиве не было повторяющихся значения. ВРеменная сложность будет равнa O(k*log(n)) только если в отсортированном массиве будут k повторяющихся элементов.
Аноним 25/05/20 Пнд 14:29:09 1701652194
>>1701487
>>1701553
>>1701542
Ебать тут парад шизов. У одного бинарный поиск массив сортирует, у другого константа k зависит от n, третий на серьёзных щах считает количество действий по О-нотации.

Как выше пытались пояснить, О(n) означает что при увеличении количества входных данных например в два раза, время выполнения/потребление памяти увеличится примерно в два раза.
Так же и с O(log n). Если ты вместо 10000 элементов передашь 1000, то сравнений будет 10, а может 9, а может 11.
Аноним 25/05/20 Пнд 14:37:23 1701664195
>>1701652
Пчел, погугли про worst case, average case, worst case, ты пытаешься объяснить именно это, но не по-человечески.

Это все равно не отвечает на вопрос почему в том примере с лямбдой есть 3 операции сравнения, если МАКСИМУМ могут быть 2
Аноним 25/05/20 Пнд 14:38:01 1701667196
>>1701664
upd:
worst case, average case, best case*
Аноним 25/05/20 Пнд 14:38:26 1701669197
>>1701664
Ты какой то непробиваемый идиот.
Аноним 25/05/20 Пнд 14:46:27 1701701198
>>1701664
Потому что worst_case для бинарного поиска это что-то типа O(a + b log n)
Как видно из твоего вычислительного эксперимента, b=1. Но это все равно нихуя не важно, т.к. O(a + b log n)=O(log n).
Аноним 25/05/20 Пнд 14:57:11 1701727199
>>1701541
Бамп, аноны, объясните идиоту, если не сложно.
Аноним 25/05/20 Пнд 15:01:37 1701732200
>>1701541
1) проверить что (a < b) == false
2) проверить что (b < a) == false
???
3) profit
Аноним 25/05/20 Пнд 15:11:38 1701754201
Аноним 25/05/20 Пнд 15:15:34 1701757202
Screenshot.png (174Кб, 1470x539)
1470x539
Аноним 25/05/20 Пнд 15:17:01 1701758203
Аноним 25/05/20 Пнд 15:17:24 1701760204
>>1701701
Worst case для отсортированного массива БЕЗ повторяющихся элементов - строго O(log(n)) с логарифмом по базе 2, откуда ты высрал a и b, шизоид?
Аноним 25/05/20 Пнд 15:26:06 1701787205
>>1701760
Да проще тебе ебало набить!
Аноним 25/05/20 Пнд 15:31:25 1701803206
>>1701758
O(2n) шизик, ты? Я узнал тебя по твоим шизоидным словам и высерам
Аноним 25/05/20 Пнд 15:37:24 1701818207
Аноним 25/05/20 Пнд 15:37:47 1701819208
Программирование мне напоминает картины Дали, где костыли подпирают всё и вся.
Аноним 25/05/20 Пнд 15:38:10 1701820209
>>1701760
Господи, какие же тут дегенераты сидят пиздец просто.

Аноним 25/05/20 Пнд 15:44:37 1701834210
>>1701760
> с логарифмом по базе 2
Логарифмы по любой базе отличаются дург от друга константой-множителем. Это в школе изучают Поэтому все пишу O(log(n)), а не уточняют что логарифм двоичный, натуральный или что-то в этом духе.
Для этого логарифмы и придумали, можно с помощью таблицы логарифмов заменить трудоёмкое умножение сложением+поиском по таблице.
Аноним 25/05/20 Пнд 15:57:44 1701853211
>>1701820
Дегенераты вроде тебя? Согласен. Ведь вы только высераете бред, не имея ни пруфов, нихуя. Откуда высрано a и b, шизик? Или ты мало того, что слился, так еще и обосрался?
Аноним 25/05/20 Пнд 16:03:19 1701863212
>>1701853
>строго O(log(n)) с логарифмом по базе 2
Вот тебе пруф что ты не понимаешь о чем говоришь.
ВСЁ НАХУЙ, ВЫ ПОНИМАЕТЕ ЧТО ВСЁ? Аноним 25/05/20 Пнд 19:35:24 1702286213
Аноним 25/05/20 Пнд 20:05:15 1702334214
>>1702286
Ну на этот раз-то точно ВСЁ.
Аноним 25/05/20 Пнд 20:07:32 1702337215
>>1702286
Блядь, у меня на ноуте всего лишь 16 гб памяти и не расширить никак... Вот я соснул...
Аноним 25/05/20 Пнд 21:33:00 1702408216
>>1702286
Ну теперь c++ официально только для хакеров.
Аноним 25/05/20 Пнд 21:42:28 1702425217
Можно ли назначать виджетам события (это коллбэки в принципе) через наследование и полиморфизм? Есть гуй (мой личный), там есть класс Button. В конечном приложении назначаю событие клика так:

class MyAppButton1 : public Button
{
public:
OnMouseClick(int x, int y) { / ... / }
};

Какие подводные? Или нельзя сказать однозначно без всего контекста, нормально это или нет?
Аноним 25/05/20 Пнд 22:02:32 1702468218
Аноны, есть один метод, который принимает basic_iostream. Мне нужно создать и передать какой-то стрим, в который я могу завернуть указатель на массив char* и очень важно чтобы без копирования. Может я не нашел, но что ли нету такого в std из всего их набора стримов и буфферов? Похоже все привязано к strings но там буфер копируется. У буста есть такой, неужели до сих пор в стандарт не попал? Вроде бы в задеприкаченом strstream такое было, но не помню. Но нафиг мне депрекаты.
Аноним 25/05/20 Пнд 22:27:05 1702488219
Аноним 25/05/20 Пнд 22:28:06 1702491220
>>1702468
Ой бля анончик там такие костыли что ебануться можно. Приду домой - скину
Аноним 25/05/20 Пнд 22:30:48 1702493221
Анон, мне просто это не даёт покоя.
Ест у меня std::vector<double>, есть у меня std::transform, в котором pure функция (хз, возводит элемент вектора в степень и делит на 4), есть вектор для ответа.

Анон, я никогда не читал книги про работу компиляторов, но на мой взгляд, в релизе, ему очевидно, что можно распараллелить цикл, зная конечную архитектуру сборки. Почему тогда из коробки, само и неявно, не подключается какой-нибудь #pragma omp parallel for?
Аноним 25/05/20 Пнд 22:37:19 1702497222
>>1702493
используй параллельные алгоримты С++17. За тебя компилятор такие адовые вещи как многопоточка генерировать точно не будет
Аноним 25/05/20 Пнд 22:42:27 1702503223
>>1702491
Ну это да, должен быть приватным. Я хотел понять другое, нормально ли чисто идеологически делать отдельный класс на каждую кнопку в приложении?
Аноним 25/05/20 Пнд 22:55:38 1702514224
image.png (412Кб, 1292x1866)
1292x1866
>>1702493
>Почему тогда из коробки, само и неявно, не подключается какой-нибудь #pragma omp parallel for?
У распараллеливания достаточно большие накладные расходы, поэтому массив должен быть достаточно большим. Огульно параллелить всё подряд очень сомнительная идея, но она много кому приодила в голову, например, разработчикам компиляторов PGI
Аноним 25/05/20 Пнд 23:02:24 1702522225
>>1702503
Ну если это какая-то навороченная кнопка, то хули нет? Посмотри, как в Qt это сделано: там если QAbstractButton и от него наследуются QPushButton и QToolButton. Если тебе нужно на твой кнопке картинку с аниме добавить - наследуй и добавляй
Аноним 25/05/20 Пнд 23:06:45 1702530226
>>1702522
Собственно, делаю микроминималистический гуй под wasm, соотношу с тем, как сделано в QT и WX. Но пока что так понял, что наследование от классов фреймворка в целом плохая практика?
Аноним 25/05/20 Пнд 23:09:02 1702534227
>>1702530
Создавать новый класс имеет смысл когда тебе нужен блюпринт, с помощью которого можно создавать много одинаковых объектов. Наверняка у тебя у разных кнопок разные обработчики, так зачем делать под это отдельный класс?
Аноним 25/05/20 Пнд 23:09:56 1702535228
>>1702530
Так они и сделаны в том числе для наследования, не?
Аноним 25/05/20 Пнд 23:10:49 1702537229
>>1702497
Msvc похоже что-то сам такое делает, и возможно intel cc тоже, так как мои перформанс тесты мило грузят весь проц, хотя я явно не писал ни политику выполнения для трансформ, ни omp. И включен только c++11, так как очень боюсь вероятной миграции на специфическую архитектуру.
>>1702514
Спасибо
Аноним 25/05/20 Пнд 23:19:39 1702550230
>>1702534
Ну, если у кнопки собственный обработчик OnClick, то получается, она уже самим этим коллбэком отличается от инстанса своего суперкласса?

>>1702535
А если final-class? "Не наследуй, худо будет" - это же для чего-то тоже нужно.
Аноним 25/05/20 Пнд 23:29:10 1702558231
>>1702550
>она уже самим этим коллбэком отличается от инстанса своего суперкласса?
Если у неё другое расположение, скажем, то она тоже отличается от инстанса суперкласса. Функции это первоклассные сущности, такие же, как числа
Аноним 25/05/20 Пнд 23:29:54 1702560232
>>1702550
>А если final-class
Проследуй в жава-тред, в плюсах насколько мне известно нет final/sealed
Аноним 25/05/20 Пнд 23:31:55 1702563233
>>1702558
Но ведь OnClick - это самый первый кандидат на полиморфизм, иначе нахуй это все вообще нужно?
Аноним 25/05/20 Пнд 23:34:15 1702566234
>>1702563
А где ты будешь единообразно обрабатывать разнородные кнопки?
Аноним 25/05/20 Пнд 23:35:19 1702567235
Аноним 25/05/20 Пнд 23:36:18 1702571236
>>1702567
Век живи – век учись
Аноним 25/05/20 Пнд 23:39:26 1702573237
Аноним 25/05/20 Пнд 23:41:00 1702577238
>>1702566
А зачем вообще нужно
>единообразно обрабатывать разнородные кнопки?
??
Аноним 25/05/20 Пнд 23:45:23 1702582239
>>1702577
Ну раз ты говоришь, что хочешь использовать полиморфизм в кнопках, значит ты хочешь единообразно обрабатывать разнородные кнопки.
Аноним 25/05/20 Пнд 23:46:43 1702586240
>>1702582
Да. Плохо ли для этого на каждую кнопку создавать отдельный класс?
Аноним 25/05/20 Пнд 23:48:11 1702588241
>>1702586
Если ты собираешься обрабатывать разнородные кнопки единообразнно (например, в цикле перебирать массив переменных базового класса или писать функцию, которая принимает аргумент базового класса) то нет, имеет смысл использовать наследование. Если не собираешься, то не имеет смысла.
Аноним 25/05/20 Пнд 23:57:51 1702600242
>>1702588
Кнопки отличаются от суперкласса только ивентом OnClick. Но если они отличаются, то это уже?
Аноним 26/05/20 Втр 00:05:39 1702608243
>>1702600
У тебя есть два пути решения одной и той же проблемы
– Пердолить на каждый вид кнопки отдельный класс
– В базовом классе сделать "указатель на функцию" std::function и переназначать его для каждой кнопки
Обычно идут вторым путём, с точки зрения полиморфизма оба случая равнозначны
Аноним 26/05/20 Втр 00:16:54 1702620244
>>1702286
Так а че, shared_ptr unique_ptr проблему не решило, им нужно теперь miracle_bugfree_ptr?? Наверняка тот код был написан на c++99 да и еще с самокрутками типа самопальных auto_ptr, или вообще на голимом си со strcpy и strdup и прочим говном. Теперь давай забаним плюсы, раз долбоебы даже c unique_ptr и move semantics не могут в безопасный код.
Аноним 26/05/20 Втр 00:17:52 1702621245
>>1702566
> единообразно обрабатывать разнородные кнопки
Спасибо анон, за короткое но понятное объяснение полиморфизма
Аноним 26/05/20 Втр 00:22:29 1702626246
>>1702530
Ты логику прямо в кнопку вешаешь что ли? Лучше заведи класс MyCallbackButton, наследуй его от своей "базовой кнопки", внутри добавь std::function и два метода - setCallback(std::function) и execCallback(). Последняя приватная и проверяет, установлен ли callback. Как только у тебя произошло какое-то нужное тебе событие, пишешь execCallback() и всё
Аноним 26/05/20 Втр 00:22:30 1702627247
И как обычно хз куда лучше писать, сюда или в C
Есть массив одной структуры, в структуре указатели на память. Часть памяти статически определяется, часть рантайм, маллоки и т.д.
Хочу подчищать память универсально, одной функцией, после отработки.

Напрашивается вопрос - как сделать так, чтобы free не выдавал ошибку на статической памяти? Отдельно следить что я там разметил динамически - не хочется, так дебильно.
Аноним 26/05/20 Втр 00:24:15 1702629248
>>1702620
Двачую двачую двачую
Аноним 26/05/20 Втр 02:44:04 1702674249
>>1702627
Статически это указатель на глобальную переменную или на стеке? Чет как-то криво звучит - в структуре хранить указатель на такую переменную. Почему не саму переменную тогда сделать частью структуры.
>сюда или в с
очевидно что в С с такими странными задачами. В С++ есть всякие смарт пойнтеры поэтому не нужно париться маллоками. Если хочется статики - делай ссылку вместо указателя.

struct s
{
s(b b) : _b(b) {}
std::unique_ptr<a> _a;
b& _b;
};

std::shared_ptr<s> ss = std::make_shared<s>(b);
в результате а dynamic, b - static и ничего освобождать не надо
только непонятно зачем ебаться со статикой, жалко что ли в shared обернуть.
Аноним 26/05/20 Втр 03:35:57 1702701250
>>1702491
Двачую, бывало наследовал что-то от basic_ostream, каждый раз охуевал с неочевидности и залупности этой конструкции. Стараюсь с тех пор вообще с std стримами не связываться.
Аноним 26/05/20 Втр 05:07:59 1702713251
>>1702701
Хитровыебанность этих ебучих стримов выдает авторство страуструпа. У них два десятка параллельных спецификаций, для стримов и соответствующих им буферов, и в результате нет ровно того, что мне надо. И ведь уверен что автор либы, которому подавай это ебучий стрим, у себя внутри просто засасывает весь буфер и передает в какой-нить примитив типа write, т.е. ему можно было бы передать char* и не выебываться, особенно когда скорость важна. Но нет блять он выставил наружу модный стрим, и к нему нужно теперь десять прокладок наклеить, чтобы сраный буфер передать.
Аноним 26/05/20 Втр 07:21:02 1702736252
float arr[4] = {0.2f, 1.4f, 5.67f, 0.71f};
int size = (sizeof(arr)/sizeof(*arr)); // == 2

Почему так?:(
Аноним 26/05/20 Втр 07:41:05 1702741253
Аноним 26/05/20 Втр 07:46:56 1702743254
>>1702741
Если считать в одном куске кода
Не совсем так..
я передаю в ф-цию function(arr)


внутри fuincton(float arr[])
получается
int size = (sizeof(arr)/sizeof(*arr)); // == 2

Опять указатели шалят?
Аноним 26/05/20 Втр 08:07:03 1702750255
>>1702743
Потому что функция получает указатель, а передаешь ты ей указатель на массив из 4 символов. Потому результат разный.
Аноним 26/05/20 Втр 08:09:35 1702751256
>>1702743
Ну да, ты же проебал информацию о размере, когда передал массив в функцию. Для неё arr — это просто указатель.
На 64-битной платформе получится 2, на 32-битной — 1.

Чтобы не проебывать размер, его надо принимать в шаблоне:
template <size_t size>
void function(float (&arr)[size])

вызывать так же - function(arr)
(ну и заодно вычислять ничего не надо)
Аноним 26/05/20 Втр 08:14:32 1702752257
Спасибо, сеньоры
Аноним 26/05/20 Втр 09:48:32 1702778258
>>1702620
Тру стори. В каждом более-менее крупном проекте в котором приходилось работать была хуева туча легаси кода со своими поинтерами, строками, аллокаторами и прочими велосипедами разной степени упоротости.
Аноним 26/05/20 Втр 10:07:02 1702788259
Аноним 26/05/20 Втр 10:08:10 1702790260
>>1702788
Разумеется, вместо вектора можно подсунуть обычные указатели на начало памяти и конец
Аноним 26/05/20 Втр 13:02:43 1702896261
>>1702778
Нахуя?

Если проект реально крупный, то строки поинтеры скорее всего использовались в разных подсистемах, следовательно должны быть более-менее универсальными.
Зачем переписывать std::string например тогда?
Аноним 26/05/20 Втр 13:10:42 1702905262
Анчоусы, где можно найти список формул, таких, как производная высоты прыжка по времени, возвращающая координаты x и y или вектор движения? Может, есть какая-то библиотека, чтобы можно было задать начальное ускорение и угол прыжка и посчитать?
Аноним 26/05/20 Втр 13:21:09 1702912263
Аноним 26/05/20 Втр 13:40:37 1702941264
>>1693081 (OP)
>comment.jpg
Тогда что учить то блять?
Аноним 26/05/20 Втр 13:57:58 1702976265
>>1702941
R U S T
U
S
T

Объективно лучший язык.
Аноним 26/05/20 Втр 14:03:51 1702993266
Array & Vector это часть какого года библиотеки C++?
Аноним 26/05/20 Втр 14:10:52 1703011267
Аноним 26/05/20 Втр 14:14:46 1703024268
>>1702993
Если ты про стандарты то к тому времени как вышел первый ISO стандарт stl уже была. Но в последующих редакциях она дорабатывалась вектор из 2020 может отличатся от вектора из 1998. Хотя у меня пример нет, может по факту и отличий нет.
Аноним 26/05/20 Втр 14:44:20 1703079269
Аноним 26/05/20 Втр 15:01:14 1703107270
>>1702941
То, что в вакансиях нужно.
Аноним 26/05/20 Втр 20:27:25 1703575271
Аноним 26/05/20 Втр 21:06:54 1703630272
>>1702941
Все зависит от того зачем ты учишь.
Аноним 26/05/20 Втр 22:09:31 1703722273
image.png (39Кб, 932x570)
932x570
Продолжаю учить плюсы по вот этому сайту ravesli.com
Дошёл до итогового теста в 5 главе https://ravesli.com/glava-5-itogovyj-test/
Намотался на второе задание. Я правильно понимаю, что смотреть ответ явно не стоит, а лучше перечитывать всю главу, потому что я нихуя из неё не усвоил? (Я типа написал код, который работает как надо за исключением самого важного - при выигрыше начинать новую игру. Вот тут у меня просто из головы вылетело как сделать так чтобы при else if(X = Y) ветвление завершалось нахуй и завершался цикл в котором функция с этим ветвлением вызывается. Пробовал goto, но нельзя какого-то хуя вызывать лейбл из другой функции как оказалось. Возможно я вообще не так всё сделал и с моим текущим подходом нихуя не выйдет и надо делать совершенно по другому и с нуля)
Аноним 26/05/20 Втр 22:15:52 1703726274
>>1703722
Вызывай main после удовлетворения enVar == reVar
Аноним 26/05/20 Втр 22:20:34 1703728275
>>1703726
Пишут, что так нельзя в c++
Аноним 26/05/20 Втр 22:38:27 1703741276
Аноним 26/05/20 Втр 22:39:43 1703745277
Аноним 26/05/20 Втр 22:42:50 1703750278
>>1703745
Ну тебе уже не помочь, раз такие элементарные задания выполнить не можешь.
Подсказка: бесконечный цикл и break
Аноним 26/05/20 Втр 22:44:25 1703753279
>>1703750
Да я уже всё сделал. Правда максимально всратно и мне ебло разобьют если я такой код покажу приличным людям. Но поставленную задачу выполняет.
Аноним 26/05/20 Втр 22:45:25 1703757280
>>1703750
А вообще, все эти помойные сайтики тебя ничему не научат. Советую взять в руки хорошую книгу и учить язык по ней. А начать вообще с книги k&r по си. Там очень хорошие задачи и много интересных примеров, которые заставят поломать голову. Сама книга маленькая, всего около 300 страниц, читается за пару недель.
Аноним 26/05/20 Втр 22:54:22 1703771281
Аноним 26/05/20 Втр 23:15:08 1703810282
>>1703771
Мне на плюсах надо, я за шарп не шарю. Получилось вот такое https://ideone.com/hWH6uu . Как видно у меня всё в main лежит, а новая игра вообще через goto блять. У авторов решение конечно гораздо элегантнее
Аноним 26/05/20 Втр 23:21:16 1703819283
>>1703771
В голос с этой сисярп макаки. В простейшем коде умудрился нахуячить ошибок и наговнокодить:
1. Попыток 8, а не 7, при этом даже если 8 раз ты ответишь правильно, тебе скажут что ты проиграл.
2. Если ответишь правильно, то тебе напишут "Too big", а потом скажут, что ты выиграл.
3. Блок if не нужен.
4. Лишнее присваивание переменной guess
Аноним 26/05/20 Втр 23:25:01 1703828284
>>1703810
Потому что, как сказал этот >>1703757 господин, учиться нужно не по говносайтам. При этом любые обучающие сайты говно, при условии, что это не обучение какой-нибудь динамикопараше вида жопаскрипта, которая учится за вечер и пару бутылок водки.
Читаешь эту 300 страничную книгу, а потом берёшь книгу Страуструпа и начинаешь изучать C++.
Аноним 27/05/20 Срд 00:03:47 1703885285
>>1702896
Я не он, но опыт такой тоже был и вопрос "нахуя" нужно задавать пионерам, которых уже с нами нет давно, как водится. Если проект реально крупный, то начали его в хуй знает какие времена, когда еще народ табак курил и йогой не занимался, не говоря уже про соблюдение каких-либо best practices в программировании. Интересно было бы узнать много ли народа писало на С++11 в 2012 или С++17 в 2018. Только только начали умирать от коронавируса престарелые писатели самопальных аллокаторов, взрощенные на голых сях и С++99, но дело их еще живет в больших и старых проектах. Но не побеждает.
Аноним 27/05/20 Срд 00:07:05 1703886286
>>1702941
Да ничего, программирование скоро станет просто хобби, как музыка и искусство. UBI уже почти на подходе, будем получать небольшое пособие, и спорить в форумах, какой язык самый крутой. А реальный софт будет писать AI. Быстрый и без багов.
Аноним 27/05/20 Срд 00:12:22 1703889287
>>1702896
>std::string
Кекнул на этом, в каждой конторе вижу свои 3-4 вариаций стрингов, уже даже не смешно.
Аноним 27/05/20 Срд 00:17:47 1703892288
>>1703889
Застукать бы одного такого стрингера с поличным , и просто спросить вежливо - нахуя. Просто интересно знать. При чем неважно даже если это мегалегаси код. За такое и 10-20 лет назад нужно было убивать.
Аноним 27/05/20 Срд 00:21:41 1703895289
Аноним 27/05/20 Срд 00:46:21 1703919290
>>1703892
>>1702896
Яндекс использует свой класс string в плюсах, недавно видел в статье на хабре.
Аноним 27/05/20 Срд 01:44:19 1703931291
>>1702941
Учиться надо программировать, используя для этого средство по душе. А то наслушаются всяких пидоров и прокрастинируют потом. Толку-то с труъшной технологии, если накодил пару часов за месяц? А вот выберешь, что прет, и количеством написанного кода компенсируешь всю нетруъшность своего взросления. Алсо, актуальное на рычноке и подходящее для учебы - взаимоотталкивающиеся вещи. Так что не стоит лучшие годы губить на всякое говно, на первой работе все равно обязательно насосешься, при чем капитально. Кстати, для концептуально прокачанного путь к нормальному трудоустройству короче, просто это беспалевно делается. Какой-нибудь задрот фреймворков даже не заподозрит, что ему отказали за общую тупость, и продолжит дрочить свою охуительную область знаний. Он на своем уровне и не может воспринять эту сторону действительности. А умного паренька, который даже язык в глаза не видел, невзначай возьмут, ведь адекваты негласно понимают, что нет ничего практичнее хорошей матчасти. Рыночек формально не способен этого понять, но жизнь все фиксит. Фактор необучаемости и гавнокода, несущего нулевую пользу для проекта, перечеркивает всю подкованность по стеку.
Аноним 27/05/20 Срд 02:41:14 1703988292
>>1702896
Сложно представить себе что-то более уебанское чем std::string
Аноним 27/05/20 Срд 02:44:30 1703990293
Аноним 27/05/20 Срд 03:03:08 1703998294
>>1703988
AnsiString и, о да, строки в ДЕЛФИ, где первым символом длина строки
Аноним 27/05/20 Срд 04:09:27 1704010295
>>1703828
И после этих двух книг брать ещё одну, чтобы наверстать то, что добавили в язык за последние 20 лет?
Да это пиздец, лучше сразу что-нибудь современное читать, например вот это
https://codernet.ru/books/c_plus/beginning_c_17_from_novice_to_professional/
и не тратить время на всякие strcpy и т.п. Если в книге не упоминается string_view, например, то сразу нахой.
Аноним 27/05/20 Срд 04:31:41 1704012296
>>1703892
Чтобы стандартизировать кодировку, например. У встроенных строк как-то уж очень долго налаживается дружба с юникодом. С появления char16_t ещё 10 лет не исполнилось, а char8_t вот только подъезжает.
Ну и всякого рода оптимизации. Тысячи их.
Аноним 27/05/20 Срд 05:56:13 1704026297
Чето осознал ультрапроеб в жизни, через буквально дней 20 диплом, а после свободное плавание, решил выбрать как основной профиль с++ и дрочил его годик основательно так, хотя и до этого знал его. Стал с недавних пор смотреть рынок вакансий по дс2 и..бля ну и хуета, хуй без опыта куда возьмут, а где берут, то стек технологий какой-то ебанутый или сама компания какой-то ебанутой хуйней занимается, чета ваще пиздец, пчелы
Аноним 27/05/20 Срд 07:05:57 1704034298
image.png (785Кб, 2696x1372)
2696x1372
>>1704026
>пчелы

Продолжай чилить, айти мёртвое для вката
Аноним 27/05/20 Срд 13:29:48 1704234299
>>1704010
А ты как хотел? Или ты один из тех долбоебов, которые думают, что изучив динамикопарашу они стали программистами и знать, что там внизу им совсем не надо? После чего такие удивляются, почему это у них цикл в котором они строки складывают, жрёт пару гигабайт памяти.
Весь сахарок в 17 стандарте строится на том что было до него, поэтому для того чтобы писать хороший код ты должен изучить эти основы, только после этого уже смотреть на сахарок и радоваться, потому что понимаешь как надо было бы писать код, если бы тебе этого сахара не насыпали.
Аноним 27/05/20 Срд 13:51:33 1704256300
Аноним 27/05/20 Срд 15:50:17 1704374301
>>1704026
год-два позанимайся какой-то ебанутой хуйней с ебанутым стэком, и дальше ищи нормальную работу. Я в свое время вообще писал на каком-то ебанутом языке, формально числившись С++ разработчиком. Ради того самого ОПЫТА в резюме.
Аноним 27/05/20 Срд 16:18:54 1704396302
>>1704374
Раз уж это С++ тред, не самый раковый, но я тоже чтобы вкотиться программировал на какой-то хуите богомерзкой ради ОПЫТА
Аноним 27/05/20 Срд 16:20:46 1704400303
>>1704396
И начальник\директор тогда сказал
"Вот, молодые то идут к нам, все на javascript\python хотят программировать, чтобы потом в гугле работать, а я всю жизнь был прикладным программистом" - примерно слово в слово
Аноним 27/05/20 Срд 17:30:28 1704481304
>>1703988
Далеко ходить не надо, просто посмотри на свой пернувший в лужу пост с наездом на стринг без всякого обоснования
Аноним 27/05/20 Срд 18:26:09 1704552305
Безымянный.png (12Кб, 594x175)
594x175
Аноны, два дня потратил на то, чтобы написать игру. Теперь понимаю, какой я дебил.
Выключили электричество а вместе с ним и мой комп. После этого захожу в проект, а он может прочесть 1 файл из 3. На хедер мне похуй, вся проблема в cpp файле, который открывается через блокнот, в котором ничего не отображается. Шиндовс говорит, что какие-то байты в нем все еще есть. Как его восстановить, не хочу, чтобы 2 дня трудов пропали за зря? Может, у него шапка слетела и попытаться переписать байты с новой шапкой? (Хуй знает вообще, как он устроен)
Аноним 27/05/20 Срд 18:54:30 1704582306
Аноним 27/05/20 Срд 19:14:49 1704605307
>>1704552
Открой в хекс редакторе и посмотри, если там все одинаковыми байтами забито то все.
Аноним 27/05/20 Срд 19:23:48 1704623308
Аноним 27/05/20 Срд 19:24:18 1704624309
Аноним 27/05/20 Срд 19:31:15 1704634310
Аноним 27/05/20 Срд 20:01:07 1704662311
>>1704552
Так в этом игра и была. Ты проиграл электрикам 0:1. Пиши по новой чтобы счет сравнять.
Аноним 27/05/20 Срд 20:15:18 1704679312
Кресты очень люблю, просто пиздец как!

template <typename T, typename = typename std::enable_if<!std::is_base_of<ParentClass,typename std::decay<T>::type>::value>::type>
Аноним 27/05/20 Срд 20:30:12 1704696313
>>1704679
> template <typename T, typename = typename std::enable_if<!std::is_base_of<ParentClass,typename std::decay<T>::type>::value>::type>
Ох, быдлу не завезли c++17?
> template<class T, class = std::enable_if_t<!std::is_base_of_v<ParentClass, std::decay_t<T>>>>
Или даже более предпочтительный
> template<class T>
> void foo() {
> static_assert(std::is_base_of_v<ParentClass, std::decay_t<T>>);
...
>}
Аноним 27/05/20 Срд 20:43:27 1704717314
>>1704696
> c++17
Так то было в c++14
Аноним 27/05/20 Срд 21:42:53 1704762315
Что такое type deduction? Переводчит что то непонятное выдает
Аноним 27/05/20 Срд 21:44:42 1704766316
>>1704762
Автоматический вывод типа методом дедукции.
Аноним 27/05/20 Срд 22:11:08 1704815317
>>1702905
>производная высоты прыжка по времени
Это просто скорость называется. Может тебе ускорение нужно, тогда это 2-я. 3-я называет джерк. 4-я джолт. По-русски можно придумать типа рывок, потом толчок, потом чпок.
Аноним 27/05/20 Срд 22:55:00 1704883318
>>1704766
Элементарно, Ватсон!
Убийца std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__ostream_type& (*)(std::basic_ostream<_CharT, _Traits>::__ostream_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]
Аноним 27/05/20 Срд 23:53:43 1704934319
>>1703885
тащемта кастомные аллокаторы только щас и писать
инфраструктуру под них доднлали только в 17м стандарте
мимо безработный мамонт
Аноним 28/05/20 Чтв 00:04:51 1704941320
>>1704762
Чтобу не писать аргументы шаблона класса для некоторых аргументов конструктора. Смотри deduction guides
Аноним 28/05/20 Чтв 00:11:08 1704946321
>>1704941
>>1704766
Я понял. Просто не мог сразу на русский адекватно перевести. Имеется ввиду "угадывание" (догадки компидятора какой тип перемнной передался) типов
Аноним 28/05/20 Чтв 02:00:28 1705008322
Помогите составить шаблонную фукнцию, которая принимает std::vector<T> или std::array<T> и второй аргумент, который должен быть типа T.

У меня получилось скопипастить с SO, но там нет проверки типов. Моя весрия с дополнением не компилится:

https://onlinegdb.com/SJp5e_hiU
Аноним 28/05/20 Чтв 02:30:12 1705016323
Аноним 28/05/20 Чтв 03:37:29 1705027324
>>1704234
Основы — это основы, их в любой книге для начинающего дадут так или иначе.
Я говорю про всякую устаревшую фигню, из разряда, например, что нет смысла сначала учиться не возвращать "большие" объекты из функции по значению, а потом учиться, что теперь так можно. Или читать про какие-нибудь wstring_convert и codecvt, а потом узнавать, что они пукнули и обмякли. Или вникать в фантазии Страуструпа про то, какие безграничные возможности открывает наследование фасетов локалей, чтобы потом выяснить, что они обосрались с кодировками переменной длины.
Ну или те же функции из сишки, которые можно просто посмотреть по докам если приспичит, а специально учить их нет никакого смысла (тем более, какой-нибудь современный вижак тебя заебет варнингами при попытке ими воспользоваться).
Ещё такой момент, книга Страуструпа в основном описывает только стандарт. Про тот же wchar там ты прочитаешь только, что это тип достаточного размера чтобы вмещать неизвестно что. А в книге, на которую я дал линк, например, сразу написано, как оно реально живет на разных платформах, и что с этим делать.
Аноним 28/05/20 Чтв 04:01:18 1705031325
Annotation 2020[...].png (18Кб, 489x200)
489x200
Аноним 28/05/20 Чтв 08:08:10 1705101326
Посоветуйте каких книг или циклов статей на русском о c++17/20
Аноним 28/05/20 Чтв 08:21:36 1705108327
std::map<std::string,int> mp {{"sd",3},{"as",1},{"aaa",6}};
for(auto& [a,b] : mp){
std::cout << a << " " << b << "\n";
}
Почему не компилируется?
Пишет
> error: expected unqualified-id before '[' token for(const auto& [a,b] : mp){
Аноним 28/05/20 Чтв 08:52:18 1705113328
>>1705108
c++17 включен? У меня компилируется.
Аноним 28/05/20 Чтв 09:18:12 1705123329
Аноним 28/05/20 Чтв 10:17:30 1705152330
>>1705101
>русские книги по 17/20

наивный ) "Русское" программирование еще не вошло в эру C++11, а ты про такое ноухау
Аноним 28/05/20 Чтв 10:30:24 1705170331
>>1705152
Книг по 11/14 полно, тот же майерс. По 17 думаю должны были что то хорошее перевести
Аноним 28/05/20 Чтв 10:47:35 1705195332
>>1705031
Спасибо, но тогда компилируется для вызовов типа
f(vector<unsigned>, int), А я хочу чтобы тип был строк одинаковый.
Например, этот вариант рабоатет только для std::array, но он требует, чтобы два типа были строго одинаковые:

template<typename T, std::size_t size>
auto f(const std::array<T, size>& arr, T o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}
Аноним 28/05/20 Чтв 10:48:15 1705197333
>>1705195
quickfix
*А я хочу, чтобы тип был строго одинаковый.
Аноним 28/05/20 Чтв 10:48:21 1705198334
В мире умирает котёнок, когда кто-то пишет std::
Аноним 28/05/20 Чтв 11:35:08 1705276335
>>1705195
хм, можно ассерт добавить

template <typename T, typename U>
void f(const T& arr, U value)
{
static_assert(std::is_same<T::value_type, U>::value, "array and value must be of the same type");
...
Аноним 28/05/20 Чтв 11:41:42 1705297336
>>1705198
This. Не пользуйтесь стандартной библиотекой, пишите своё.
Аноним 28/05/20 Чтв 12:10:47 1705396337
В Qt можно как-то проверить, не течет ли память? Ну там если иерархия нарушена, вдруг где-то забыл parent или неверный указал.
Аноним 28/05/20 Чтв 12:56:02 1705485338
>>1705276
давай ещё раз.
Почему через value_type без разницы тип, а когда параметр шаблона общий - разница есть?

https://onlinegdb.com/BkcP5b6iU

snippet here:

#include <array>
#include <vector>
#include <deque>
#include <utility>
#include <cstddef>
#include <iostream>
#include <algorithm>

template<typename T, std::size_t size>
auto f(const std::array<T, size>& arr, T o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}

template<typename T, std::size_t size>
auto f2(const std::array<T, size>& arr, typename std::array<T, size>::value_type o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}

int main()
{
std::array arr = {0u, 5u};
f(arr, 5u);
// f(arr, 5); //error
f2(arr, 5u);
f2(arr, 5);
return 0;
}
Аноним 28/05/20 Чтв 12:58:45 1705494339
1590659921961.jpg (109Кб, 452x650)
452x650
1590659921982.jpg (44Кб, 341x500)
341x500
Это хорошие книги?
Аноним 28/05/20 Чтв 13:27:51 1705519340
>>1705494
Хорошие, но несколько устарели
Аноним 28/05/20 Чтв 13:42:36 1705542341
>>1705485
Ну собственно по той же причине, почему вот это не компилируется:

template <typename T>
T sum(T arg1, T arg2)
{
return arg1 + arg2;
}

sum(1, 5u);

компилятор не может автоматически определить, какой из двух типов брать за T.
А с value_type у него, видимо, никакой дилеммы нет, и он сразу понимает, что T — это то, что в контейнере.
Аноним 28/05/20 Чтв 13:58:39 1705579342
Аноним 28/05/20 Чтв 14:39:49 1705615343
>>1705579
Изначально value_type добавили, чтобы сделать функцию, которая может принимать как vector, так и array.

Хотя это можно и span-ами делать, если их завезли уже.
Аноним 28/05/20 Чтв 14:46:53 1705623344
>>1705615
> Изначально value_type добавили, чтобы сделать функцию, которая может принимать как vector, так и array.
Пиздос. Скоро динамическую типизацию завезут
Аноним 28/05/20 Чтв 16:54:03 1705838345
>>1705623
Она в крестах с самого начала, шаблоны называется
Аноним 28/05/20 Чтв 17:01:52 1705850346
Аноним 28/05/20 Чтв 17:06:57 1705869347
>>1705838
>шаблоны
>динамическое
Ну формально компайл-тайм таки статический. Другой вопрос что во время компиляции шаблоны выполняются как бы динамически. даже хотят jit в интерпретатор типов захуярить а то ЧЕ-ТО ТОРМОЗИТ
А динамикопараша регулярно переизобретается еще со времен С. Начиная с void* до СОМ и QObject.
Аноним 28/05/20 Чтв 17:54:20 1705932348
>>1705519
А какие хорошие и современные?
Аноним 28/05/20 Чтв 20:09:34 1706053349
Аноним 29/05/20 Птн 01:05:10 1706328350
15516430959070.jpg (88Кб, 700x554)
700x554
>>1706053
> кресты
> предел сложности
Найс рофлишь.
Аноним 29/05/20 Птн 01:44:59 1706350351
>>1706328
24 дня всего, за такое время даже жопаскрипт не учится
Аноним 29/05/20 Птн 02:18:22 1706356352
Аноним 29/05/20 Птн 02:23:16 1706357353
Поясните по этому видосу https://www.youtube.com/watch?v=mrq2nmKz5qI
Вопрос из комментов: Не понял синтаксиса функций begin и end. Они должны возвращать объект типа Iterator. Однако, они возвращают объект типа T*.
Аноним 29/05/20 Птн 02:32:36 1706364354
Допустим я пишу игру. У меня есть класс Placeable, хранящий координаты объекта, Damageable, хранящий прочность и защиту и обрабатывающий получение урона, Temperature, хранящий данные о температуре объекта, и так далее. Куча разных свойств. В результате, другие классы, например, Npc будет наследоваться если ни от них всех, то от большого количества. Это нормальная практика так абузить множественное наследование?
Аноним 29/05/20 Птн 03:28:39 1706378355
>>1706364

Для игор придумали Entity–component–system (ECS), не изобретай велосипед
Аноним 29/05/20 Птн 03:37:45 1706382356
Аноним 29/05/20 Птн 03:57:15 1706386357
Annotation 2020[...].png (259Кб, 1020x707)
1020x707
>>1693081 (OP)

С++ тормозная параша, надеюсь они на собеседовании не гоняют кандидата по STL и RTTI
Аноним 29/05/20 Птн 04:16:51 1706390358
>>1706386
Дай ссылку, впадлу гуглить.
Аноним 29/05/20 Птн 04:25:31 1706393359
Аноним 29/05/20 Птн 04:35:34 1706397360
>>1706357
Непонятный вопрос. У него в видео они и так возвращают объекты типа Iterator.
Аноним 29/05/20 Птн 04:38:05 1706398361
>>1706393
>Video games like Assassin's Creed or Rainbow Six

Вангую, там криворучки-аутсорсеры сидят, потому и гавнодвижок
Аноним 29/05/20 Птн 04:48:08 1706399362
>>1706397
У него в 37 и 38 строке функции типа итератор, но возвращают они указатели на первую строку и последнюю соответственно.
Аноним 29/05/20 Птн 05:06:54 1706402363
>>1706399
Iterator у него конструируется из указателя (строка 46), и вызов конструктора происходит автоматически.
Аноним 29/05/20 Птн 05:28:46 1706406364
>>1706402
Ну конструируется по указателю и что?

Я не понимаю все равно. Тут функция класса которая возвращает строку. Как переменной класса можно присвоить строку?
Аноним 29/05/20 Птн 05:36:45 1706408365
>>1706399
>последнюю
На следующую за последней. И вообще иди учебник читай.
Аноним 29/05/20 Птн 06:48:08 1706413366
>>1706406
>Тут функция класса которая возвращает строку.
Не строку, а указатель на неё.
T — это char✱
arr - это T✱
следовательно, return arr возвращает char✱✱

>Как переменной класса можно присвоить строку?
Ты про какую переменную?
Аноним 29/05/20 Птн 08:19:43 1706425367
>>1706406
Блядь, забудь слово "присвоить", понял? Итератор инстанцируется этим return'ом. Не присваивается, а создается. Потому что есть конструктор из указателя (строка 46, как сказали выше), который передан в return.
Аноним 29/05/20 Птн 08:23:52 1706430368

>>1706425
> инстанцируется
Сложное слово. Чем оно отличается от инициализации?
Аноним 29/05/20 Птн 08:57:34 1706438369
>>1706430
Инициализация значения, у числа.
инстанцилищация у класса, сделать экземпляр, объект
Аноним 29/05/20 Птн 10:40:20 1706534370
>>1705008
template<class T, template<class> class Cont>
void foo(Cont<T>, T)

Попробуй, хотя я не уверен, что не нужно указывать ещё и всякие там аллокаторы
Аноним 29/05/20 Птн 10:47:23 1706549371
assassin narkom[...].webm (4617Кб, 856x478, 00:00:08)
856x478
assassin jump.webm (5981Кб, 1280x720, 00:00:20)
1280x720
Ascension of th[...].webm (6391Кб, 854x480, 00:01:08)
854x480
ce8.png (56Кб, 621x702)
621x702
>>1706386
>No Exception Handling
>No STL containers
>No Boost includes in Engine
Ясно понятно.
Аноним 29/05/20 Птн 11:00:14 1706560372
>>1706549
>>1706398
Ебать пичот.
В гуглах/яндексах/итд по вашей логике тоже сплошные дауны?
Аноним 29/05/20 Птн 11:06:24 1706563373
Аноним 29/05/20 Птн 11:07:48 1706565374
Аноним 29/05/20 Птн 11:39:59 1706588375
>>1706549
Ну и что из этого по-твоему привело к багам на твоих видео?
Аноним 29/05/20 Птн 13:07:44 1706690376
Пиздец, в разделе и так одни ебанаты сидят, так теперь ещё и игрушкодауны приехали со своими смищными видосами
Аноним 29/05/20 Птн 13:20:03 1706709377
Аноним 29/05/20 Птн 13:20:45 1706710378
>>1706386
Геймдев просто исторически был довольно консервативный в плане всяких фич. Потому что иначе проблематично, когда не знаешь, на какую ещё мыльницу придется в будущем портировать игру, и какого уровня свежести и разъебанности на ней будет компилятор.
Аноним 29/05/20 Птн 13:45:53 1706735379
>>1706386
>STL, boost
Так за эту парашу в любой нормальной конторе всегда ссали за воротник и заслужено били по тупому ебалу.
Аноним 29/05/20 Птн 14:01:48 1706746380
Двач, а будет ли сбиваться итерирование вектора если удалять элементы вектора вот в таком вот цикле - for (auto const& value: a)?
Аноним 29/05/20 Птн 14:29:30 1706791381
Аноним 29/05/20 Птн 14:43:55 1706813382
>>1706791
С стл не нужно свой класс строки писать. Несерьёзная разработка получается.
Аноним 29/05/20 Птн 14:48:39 1706818383
Аноним 29/05/20 Птн 14:53:19 1706825384
В Qt примерах некоторые объекты создают чисто в конструкторе класса виджета:
QVBoxLayout ''vbox = new QVBoxLayout(this);
А некоторые объявляют сначала в хедере:
private:
QPushButton ''okBtn;
И потом выделяют под них память в конструкторе
okBtn = new QPushButton("OK", this);
Как лучше делать?
Аноним 29/05/20 Птн 15:07:36 1706852385
>>1706825
Тут просто явно показывается, что лейаут ты сделал и забыл, а состояние кнопарика возможно будет дёргаться из других методов (хотя по идее все коннекты можно и в конструкторе сделать).
Лучше забей и научись формошлепить в дизайнере.
Аноним 29/05/20 Птн 15:09:54 1706859386
>>1706852
Да нужно без дизайнера делать, студень я.
Аноним 29/05/20 Птн 15:41:14 1706902387
Двач, а в списке итерируясь как проверить является ли следующий элемент концом списка или нет?
В списке i + 1 не работает.
Аноним 29/05/20 Птн 16:05:00 1706916388
>>1706902
Смотря как список реализован. Типа
if (curr_node->next->next == nullptr) { / ... / }
Аноним 29/05/20 Птн 16:15:57 1706929389
Аноним 29/05/20 Птн 16:32:32 1706976390
Аноним 29/05/20 Птн 16:33:08 1706979391
>>1706902
>В списке i + 1 не работает
Лолват?
Аноним 29/05/20 Птн 16:34:05 1706983392
В смысле делай инкремент, а не плюс 1.
Аноним 29/05/20 Птн 18:57:46 1707149393
Анончики, как считаете: нужно ли делать переменные (чаще всего константы), значения которых точно больше нуля, беззнаковыми?
Например, размер экрана.
Сейчас проебался на этом на этом мальца. При создании установил положение сущности по x в -R_WIDTH использовал эту беззнаковую константу, чтобы не писать -1000 например, т.е. (как думал) за пределами экрана, а нихуя. Оно в UINT_MAX установилось.
Аноним 29/05/20 Птн 19:22:37 1707168394
>>1707149
Для оконных координат используй знаковые. А то потом заебешься работать с координатами за пределами поверхностей, вроде координат курсора.
Аноним 29/05/20 Птн 19:28:39 1707178395
Как так получилось, что в стандартной библиотеке используются названия строчными буквами, через подчеркивание, а в гугловском стайл гайде и паре проектов, в которые я посмотрел, используется кемелкейс. Это специально так сделано, чтобы отличать объекты из стандартной библиотеки от всего остального или что? Мешанина стилей же получается.
Аноним 29/05/20 Птн 19:32:57 1707187396
>>1706378
Кстати мне всегда интересно было ECS переводится как система компонентов сущности? Или это типо 3 разных элемента как MVC например модель-представление-контроллер.
Аноним 29/05/20 Птн 19:40:19 1707200397
>>1707178
Тебя ебать не должно. Гугловский стайл гайд - тупое говно.
Аноним 29/05/20 Птн 19:42:51 1707203398
>>1707200
Ну так, а какой не говно? И это не только там так, а и в Qt, например.
Аноним 29/05/20 Птн 19:43:43 1707204399
>>1707203
И QT тоже говно. Оформляй, как в STL
Аноним 29/05/20 Птн 19:47:12 1707208400
>>1706364
> У меня есть класс Placeable
Замени на vec2f pos; если это двумерная игра

> Damageable, хранящий прочность и защиту
Сделай класс\структуру Stats

> Temperature, хранящий данные о температуре объекта урона
Перенеси в Stats

> Npc будет наследоваться если ни от них всех
Сделай Object: совсем базовые возможности для объекта
Унаследуй и сделай GameObject, объекты с которыми можно взаимодействовать: двери, рычаги
Дальше NPC: тут уже много чего, атака других npc, получение урона, применение способностей

Можешь посмотреть на структуру классов в mangos (эмулятор сервера для вов, если играл в него то будет несколько проще разобраться)
Правда, думаю, будет слишком сложно сразу так разобраться в нём.
Аноним 29/05/20 Птн 19:48:39 1707210401
>>1707203
> Ну так, а какой не говно?
Твой личный или тот, который принят в твоей фирме\команде.
Можешь длянуть стайлгайд в nasa
Это вообще пиздос (в хорошем смысле), но он ориентирован на Си кажется
Аноним 29/05/20 Птн 20:15:54 1707247402
>>1707204
>>1707210
Сомнительная какая-то история. Но через подчеркивание мне в любом случае нравится больше, так что да, буду его использовать.

> но он ориентирован на Си
Да, он про С.
Алсо, в их репозитории на гитхабе https://github.com/nasa/fprime/blob/master/Os/Task.hpp всё тот же кэмэлкейс.
Аноним 29/05/20 Птн 20:29:56 1707262403
>>1707208
Интересно, посмотрю.
Аноним 29/05/20 Птн 20:30:20 1707264404
>>1706746
Для такой хуйни придумали remove_if
Аноним 29/05/20 Птн 20:34:01 1707274405
>>1707247
Объясни-ка, как по словам прыгать в снейк-кейсе? Два раза, чтобы через _ перепрыгнуть?
Аноним 29/05/20 Птн 20:41:48 1707286406
>>1707274
В смысле? Так же как и в кэмэлкейсе. e, w, b. Если ты про стрелочки с зажатым контролом, то у меня через всё слово прыгает.
Аноним 29/05/20 Птн 21:04:59 1707336407
Как лучше размещать инклюды в разных файлах чтобы они не повторялись?
Аноним 29/05/20 Птн 21:12:24 1707353408
>>1707336
Да пусть повторяются
Аноним 29/05/20 Птн 21:19:26 1707358409
>>1706386
Дайте посмотреть на православный с точки зрения геймдева вектор или мапу. Всегда было интересно.
Аноним 29/05/20 Птн 21:37:23 1707397410
>>1707286
Ну смотри. Есть какой-нибудь идентификатор "my_class". Каретка стоит перед "my". Я жму Ctrl+Right, где будет каретка?
Аноним 29/05/20 Птн 21:39:55 1707401411
>>1707336
Размещай так, чтобы в хедере было ровно то, что используется - не больше и не меньше. Но при этом старайся по максимуму использовать предварительное объявление.
Аноним 29/05/20 Птн 21:47:12 1707419412
Аноним 29/05/20 Птн 21:48:06 1707421413
>>1707401
Ну вот у меня виджеты qt разные, они наследуются от каких-то готовых классов, плюс везде используются всякие типовые классы типа виджетов размещения.
А что за предварительное объявление?
Аноним 29/05/20 Птн 21:52:08 1707426414
>>1707262
Можешь начать с https://github.com/mangoszero/ это эмулятор классики
mangosone - TBC
mangostwo - Wotlk и тд

Там же есть готовые бинари, но придётся самому базу накатить + кое-какие данные нужно достать из клиента. Вроде, не особо сложно, просто не быстро.
Либо поискать готовые сборки с базой и всеми делами, например https://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-emulator-servers/wow-emu-general-releases/613280-elysium-core-1-12-repack-including-mmaps-optional-vendors.html
Также в мангос встроен движок луа который позволяет добавлять функционал не пересобирая сервер: http://eluna.uiwow.com/
Можешь эту структуру кода спиздить и переделать под себя.
Аноним 29/05/20 Птн 21:52:33 1707427415
>>1707421
Обычно в таком случае подключается заголовок с базовым классом, а остальные штуковины предварительно объявляются (у тебя ведь только указатели, да?)
Аноним 29/05/20 Птн 21:54:07 1707430416
Если я перегружу оператор = для статичных переменных, где возвращается this, то он будет работать для переменных выделенных с помощью new? Вот например так

p1 - типа myClass
- там уже что-то лежит
myClass* p2 = new myClass
p2 = p1

То вызовется мой перегруженный оператор?
Аноним 29/05/20 Птн 21:54:27 1707431417
>>1707419
> inline CTString(void);
Как не умели в 2002 пользоваться ключевыми словами, так до сих пор не умеют
Аноним 29/05/20 Птн 22:02:22 1707443418
meh.webm (363Кб, 550x300, 00:00:11)
550x300
>>1707397
После "class". Может на винде иначе, я не знаю.
Аноним 29/05/20 Птн 22:02:56 1707446419
>>1707431
Учитывая состояние компиляторов в 2002 — вполне возможно что это вынужденная мера, лул.
Аноним 29/05/20 Птн 22:06:20 1707449420
>>1707446
>>1707431
Я слышал, что в каком-то компиляторе была такая шутка: в нём был счётчик употребления в коде ключевого слова "inline". Если счётчик превышал какое-то значение, то компилятор дальше игнорировал все инлайны.
А запись вида func( void ); пришла из Си. Там таким образом обозначалось что функция не принимает аргументов, а пустые скобки означали любое количество аргументов.
Аноним 29/05/20 Птн 22:06:35 1707450421
Аноним 29/05/20 Птн 22:08:47 1707452422
>>1707443
Да я не про это. Есть такая штуковина, называется CamelHumps (он же subword navigation). Очень полезная и удобная штука, т.к. зачастую нужно изменить что-то в середине слова и без этого приходится стрелками искать позицию, или ещё хуже - мышкой. Так вот мне интересно, как оно работает со снейк-кейсом.
Аноним 29/05/20 Птн 22:12:50 1707456423
>>1707452
Не знаю, не встречал такого.
Аноним 29/05/20 Птн 22:13:56 1707458424
>>1707452
Может быть зависит от алгоритма который встроен в редактор\иде?
Сейчас проверил в qt creator
Для my_title (курсор находится перед m), после ctrl+r переместился к t
Для myTitle аналогично
Аноним 29/05/20 Птн 22:16:04 1707460425
Аноним 29/05/20 Птн 22:51:59 1707500426
>>1707449
>Я слышал, что в каком-то компиляторе была такая шутка
Ты слышал шутку.
Не сравнивай сегодняшние компиляторы и их возможности с компиляторами 20-ти летней давности.

>А запись вида func( void ); пришла из Си
Ахуеть, спасибо зумер, я-то и не в курсе был.
Ещё раз — а ты уверен, что на всех таргетах (кроме пк были ещё nintendo gamecube, xbox, ps2) были достаточно поддерживающие плюсы компиляторы? Если что, в 2001 уже был первый релиз и очевидно что разрабатывать начали даже до 2000-х.
Я вот лично сомневаюсь, что в среднем компиляторе по больнице в то время была реализована хотя бы половина 98-го стандарта.
Аноним 29/05/20 Птн 22:52:11 1707501427
>>1707430
>вызовется мой перегруженный оператор?
нет


































>оператор= для статичных переменных
лол))
Аноним 29/05/20 Птн 23:30:22 1707536428
>>1707427
Ты имеешь в виду в хедере класса надо указывать все эти QLineedit и кнопки, там же инклюдить классы для этих объектов, а в cpp файле только подключать этот хедер?
У меня в конструкторе без объявления они создаются через new, доступа к ним не будет что ли?
Аноним 29/05/20 Птн 23:41:02 1707552429
А вот мне интересно. Пишет человек игру, использует новые фишки языка. Игра работает на линукс и виндовс. Потом он хочет перенести ее на ps. Сильно ли ему придется менять код? И где он вообще будет брать стандарты языка для данной платформы?
Аноним 30/05/20 Суб 00:13:11 1707575430
>>1707536
Если они будут взаимодействовать только через коннекты объявленные в конструкторе, то пофиг.
Аноним 30/05/20 Суб 00:19:30 1707577431
>>1707552
В 2к20+ уже все хорошо с этим, у Sony юзает LLVM (и вообще x86 процессор а не кастомную залупу) а м$ не лезет в анус и тоже быстро подхватывает последние стандарты, так что такой проблемы нет (ну, разве что последний стандарт может на пару-тройку лет запоздать до выхода нового поколения с новым девкитом, лол). Но такого, как лет 10-15 назад, чтобы у всех были свои процессоры и компиляторы для ц (не всегда даже с классами как в случае с псп) — уже нет и в помине, даже на рынке китайского андроид-скама уже один арм одной версии остался.
Аноним 30/05/20 Суб 00:20:33 1707578432
>>1707577
>LLVM
В купе с цлангом, конешно.
Аноним 30/05/20 Суб 00:27:24 1707580433
>>1707552
>Потом он хочет перенести ее на ps. Сильно ли ему придется менять код?
На первую? Тогда очень сильно. На ps4 - вижалстудия с несвежим clang.
Аноним 30/05/20 Суб 00:50:42 1707586434
>>1702788
>>1702790
Спасибо, я так и сделал, но похоже не судьба. Та либа, которой этот стрим нужен похоже елозеет по стриму туда-сюда, что вроде бы не должно быть проблемой. Но там какие-то косяки. А когда я подсунул ей класс из буста, то все работает - он тоже наследует basic_streambuf и оверрайдит все методы, и оказалось что либа-сука дергает кучу этих других методов зачем-то, которые тоже нужно самому имплементить типа underflow и seek. Короче это майндфак и того не стоит. Придется буст юзать.
Аноним 30/05/20 Суб 00:53:46 1707587435
>>1707575
Да я пока не очень представляю как они будут взаимодействовать, например кнопка "удалить" должна удалять выделенную строку из таблицы-представления, то есть в слот-обработчик нажатия надо как-то передать это значение столбца выделенной строки, чтобы я мог сформировать запрос на удаление.
Не пилил подобное на qt?
Аноним 30/05/20 Суб 00:56:21 1707588436
>>1706791
буст так-то это основа всех фичей в новых версиях С++ начиная с 11-й. Но понимаю, с бустом скучно, нет возможности пилить свои собственые примочки, которые гораздо лучше, чем стандартные. Можно свой класс тред написать.
Аноним 30/05/20 Суб 02:21:42 1707636437
>>1707587
Ну и что непонятного? Подключил кнопку к обработчику, внутри спросил у таблицы выделение, узнал строку, попросил модель удалить эту строку.
Это же basic хуйня, без неё ты в qt глубоко не продвинешься
Аноним 30/05/20 Суб 02:25:17 1707638438
>>1707586
А что именно из буста ты юзаешь? Там вроде несколько хуёвин могут такое делать
Аноним 30/05/20 Суб 02:27:22 1707639439
Алсо, знающие люди, подскажите, что там Qt Company опять выдумала для наёба людей на деньги? 5.15 всё ещё LGPL?
Аноним 30/05/20 Суб 05:19:44 1707686440
>>1707149
Не нужно. Используй беззнаковые только там, где оно необходимо (в байтоебстве каком-нибудь).
Даже сам Страуструп и другие авторы признавали, что применение беззнаковых в стандартной библиотеке (типа size_t) было проёбом, и из-за них случается много ошибок.
Кому интересно, смотрите тут https://www.youtube.com/watch?v=Puio5dly9N8 на 9:50, 41:08, и 1:02:50
Аноним 30/05/20 Суб 09:53:01 1707755441
Есть pdf таблица. Как ее распарсить?
Аноним 30/05/20 Суб 10:07:56 1707767442
>>1707149
Беззнаковые нужны только тогда, когда тебе нужно хранить большие положительные числа, самый типичный пример - хранене Id.
И оно не поможет в случае если значение ниже нуля недопустимо. Вычтешь ты из беззнакового нуля единицу, получишь arithmetic overflow или макс значение для этого беззнакового числа.
Аноним 30/05/20 Суб 12:35:07 1707859443
>>1707767
>Вычтешь ты из беззнакового нуля единицу, получишь arithmetic overflow или макс значение для этого беззнакового числа.
Можно, наоборот, добавлять единицу: ( size_t i = 0; i + 1 < width; ++i ), если нужно i < width - 1.
Аноним 30/05/20 Суб 12:41:34 1707863444
>>1707859
А можно без всей этой анальной эквилибристики
Аноним 30/05/20 Суб 12:46:14 1707866445
>>1707863
>А можно без всей этой анальной эквилибристики
Тогда придется постоянно касты делать или ворнинги отключать.
Аноним 30/05/20 Суб 13:36:14 1707896446
>>1707755
Контрол Ц контрол В в Эксель XD
Аноним 30/05/20 Суб 13:41:09 1707900447
>>1707587
>Да я пока не очень представляю как они будут взаимодействовать
Тогда выноси в хеадер все, потом будешь смотреть что нужно было что нет.
Аноним 30/05/20 Суб 13:56:49 1707914448
Зачем используют -fvisibility=hidden?
Нашел только ответ чтобы в таблицу символов не попадали ненужные символы. Это как-то заметно улучшает производительность? Вроде как api определяют заголовочные файлы, которые либа будет предоставлять, так что в плане скрытия внутренних деталей наверное это не особо имеет значение чтобы в таблицу попадали тольок те символы, которые нужны.
Аноним 30/05/20 Суб 14:15:00 1707924449
>>1707866
Часто индексы юзаешь?
Из личной практики могу вспомнить лишь UI. Для всего остального есть ranges и iterators
Аноним 30/05/20 Суб 14:30:52 1707936450
>>1707914
Вообще это в духе современного c++.
На винде оно и так всё скрыто по умолчанию, с модулями тоже будет пролазить только то, что явно экспортируешь и зависимости.

Ну а зачем - потому что бритва Оккама
Аноним 30/05/20 Суб 14:53:45 1707973451
Двач, помогите перевести вот это на wchar_t:
int number = 10;
char buffer[25];
std::sprintf(buffer, "%.2f", (float)number / 100);
Аноним 30/05/20 Суб 15:01:43 1707981452
>>1694188
У тебя ошибка то в одном вылазит, хули ты мудак то такой
Аноним 30/05/20 Суб 15:17:19 1708004453
>>1707924
>Часто индексы юзаешь?
Регулярно. У меня графоний, часто алгоритмы приходится кодить. Плюс для дебага почти всегда индекс элемента полезен.
Аноним 30/05/20 Суб 15:45:49 1708035454
>>1707981
Да нет у qobject копи-конструктора, выше писали уже ему.
Аноним 30/05/20 Суб 17:37:15 1708179455
Мне тут советовали читать майерса для плюсов. Но мне показалось что это уже для чуть шарящих людей. Я из stl знаю только вектора и некоторые функции из algorithm. Точно майерс то, что мне нужно?
Аноним 30/05/20 Суб 17:38:17 1708180456
>>1708179
Мне говорили читать effective modern c++. Но я тогда нвверное вопрос неправильно задал
Аноним 30/05/20 Суб 18:08:04 1708199457
>>1708180
читай у Мейерса "Эффективное использование С++" и "Наиболее эффективное использование С++". Потом "Эффективное использование STL"

"effective modern c++" нужно читать только когда начнешь хорошо разбираться в C++11
Аноним 30/05/20 Суб 18:10:08 1708203458
>>1708199
> читай у Мейерса "Эффективное использование С++" и "Наиболее эффективное использование С++". Потом "Эффективное использование STL"
Это же все устарело
Аноним 30/05/20 Суб 18:18:01 1708208459
>>1708203
>Это же все устарело
Че несешь? Больше 3/4 советов еще актуальны. А с учетом возможности столкнуться со старой кодовой базой то и остальные пригодятся
Аноним 30/05/20 Суб 18:19:59 1708211460
>>1703931
>наслушаются всяких пидоров и прокрастинируют
Ну так ты сам на это и подталкиваешь, дядь, возводя в абсолют труЪ программиста, который не знает ни одного языка, но зато знает Vатан, задроту фреймворка. Итого у условного вкатывальщика-студента складывается впечатление, что языки изучать - сродни пинанию хуёв, а вот матан знать это ТруЪ. Затем он задаётся вопросом: "А какой же самый правильный способ изучения матана?" - на что его мозг сразу генерит ответ - "Конечно же, по советским учебника, они же ТруЪ!". Затем этот лихой молодец скачивает задачник Демидовича и пару томов какого-нибудь Зорича и начинает хуярить. Вот долго такой протянет на ручной тяге?

P. S.На следующий день же всё бросит и продолжит свою прокастинацию
Аноним 30/05/20 Суб 18:54:37 1708288461
>>1707636
Да я пока на поверхности плаваю, да, поэтому простые/глупые вопросы такие.
Алсо сделал диалоговое окно ввода данных в таблицу, так вот в слоте не видно модель данных, она у меня чисто в конструкторе создается без объявления. Если вынести ее в объявление как поле класса в секцию public чтобы слот мог работать с моделью, это норм практика?
Или надо как-то через геттер доставать, но я не представляю как потом этот объект передавать в слот.
Аноним 30/05/20 Суб 19:02:26 1708311462
>>1708288
Нихуя не понял, что ты хочешь сделать.
Если у тебя есть окошко с таблицей, то храни там указатель на свою модель и устанавливай её в таблицу. Если хочешь через диалог вводить данные, то в своём обработчике нажатия на кнопку открытия диалога просто его запускай, а по завершению спрашивай в него данные, которые пользователь ввёл и заноси их в модель - если правильно напишешь методы, то таблица автоматом обновится
Аноним 30/05/20 Суб 19:07:01 1708316463
>>1708311
В конструкторе виджета с таблицей у меня вот так создается модель:
QTableView "view = new QTableView(this);
QSqlRelationalTableModel "model = new QSqlRelationalTableModel(this);
То есть в хедере я не указывать, что у меня в классе объекты этих классов есть, поэтому слот не может к ним обращаться.
>ошибка: 'model' was not declared in this scope
model->insertRows(0, 1);
Ну вот если я укажу модель в хедере, то слот должен получить доступ к ней, верно?
Аноним 30/05/20 Суб 19:16:42 1708329464
1420760494903.jpg (43Кб, 640x640)
640x640
>>1708316
Все, я понял, там и private будет доступно в слоте, это же метод класса. Просто в конструкторе область видимости ограничена фигурными скобками как и в любой другой функции.
Добавилась запись.
Аноним 30/05/20 Суб 19:54:54 1708394465
Бля еле пробился обратно в тред. Хром перенаправляет на какой-то несуществующий архив.

>>1707638
buffеrstrеam/basic_buffеrbuf

На buffеrstrеam мне пох, это просто удобная обертка.
Мне нужно спиздить минимум из basic_buffеrbuf.
Он наследует от std::basic_strеambuf, то есть базовая идея та же самая - передать туда указатель на char* и его длину и в конструкторе он вызывает sеtg, который устанавливает указатели на начало - еback() (что за мудацкое название для начала буфера!), текущий - gptr() и хвост - еgptr().

А потом создать istream и в конструкторе ему подсунуть этот хитрый буфер унаследованный от std::basic_strеambuf .

Бустовый basic_buffеrbuf оверрайдит несколько виртуальных методов из basic_strеambuf которые по дефолту возвращают ошибку, и если они дергаются, то нужно их оверрайдить в своем классе. Если из std::istrеam'a просто тупо прочесть один раз, то ничего переопределять не надо и sеtg достаточно. Если же либа по нему елозеет, нужно оверрайдить sееkoff, что в общем тривиально кажется, если нет подводных.

Аноним 30/05/20 Суб 20:00:37 1708411466
>>1708316
>SqlRelational
Оно тебе точно нужно?
Аноним 30/05/20 Суб 20:14:31 1708440467
>>1708211
Найс матчасть на матан подменил. Матчасть - это нарицательное для всего концептуального. Я говорю не про матан, и даже не про анализ алгоритмов, а про умение мыслить, как погромист. Можно сказать, про архитектуру, но опять же не дрочить умные практики, а а органично расти в этом плане путем написания своих велосипедов. И велосипеды надо писать на языке, который охунен сам по себе, а не который на рыночке на слуху. Так больше напишешь, меньше напрокрастинируешь, вот о чем речь.
Аноним 30/05/20 Суб 20:16:06 1708447468
>>1708394
Смотрю на код в бусте seekoff (off) который двигает указатель.
gptr() это текущая позиция, eback() - голова, egptr() - хвост.

Нафига вот так изъебываться:

n = this->egptr() - this->eback();
this->setg(this->eback(), this->eback() + off, this->eback() + n);

зачем вычислять n, как разницу между хвостом и головой и потом в setg снова прибавлять его к голове, ведь получим тот же резултат this->egptr() - this->eback() + this->eback(), пиздец. Тем более голова и хвост фиксируются один раз и больше не меняются в принципе.

По-моему можно прсто
this->setg(this->eback(), this->eback() + off, this->egptr());





Аноним 30/05/20 Суб 20:25:28 1708466469
>>1708447
>this->setg(this->eback(), this->eback() + off, this->egptr());
А this-> можно выкинуть?
Аноним 30/05/20 Суб 20:27:46 1708468470
>>1708411
Ну у меня две таблицы, связь через внешний ключ, там вместо Id отображается нормальное название.
И я кстати из-за этого не знаю, можно ли добавлять в этот столбец строку или только id(int), ведь этот столбец интовый в самой бд.

Кстати вот так можно удалить запись?
model->removeRow(view->rowAt() );
model->submitAll();
Аноним 30/05/20 Суб 20:33:20 1708488471
>>1708466
Да. Они так вызывают методы, которые в базовом классе определены. ХЗ зачем, может чисто для визуального эффекта. Кажется разные стайл копы в С++ и C# по-разному к this относятся, одни орут чтобы убрать, другие наоборот его хотят. Хуйня это все.
Аноним 30/05/20 Суб 20:39:35 1708506472
Двач, мне ошибку при дебаге в Qt Creator выбрасывает, как мне узнать что это делает? Подскажите плиз.
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::erase: __pos (which is 18446744073709551615) > this->size() (which is 2)
Аноним 30/05/20 Суб 20:43:45 1708515473
Вот еще секрет Qt о котором хуево написано:

class MyClass : QObject {
...
signals:
void someChanged();
}

void MyClass::dispatchEvent() {
...
emit someChanged(); //тригерит событие
}

Потом в QML и в QWidgets вот так вот написаное это самое событие имеет вид onSomeChanges почему для чего - хуй знает, что бы путались больше и искали почему не работает.
Аноним 30/05/20 Суб 20:45:57 1708518474
>>1708506
Вышел за пределы своей строки?
>>1708515
Это стандартные сигналы?
Аноним 30/05/20 Суб 20:54:21 1708526475
>>1708518
Как понять стандартные? любой метод в сигналы добавляешь, эмитишь из любого места внутри методов класса, в кьюмеэле и в виджетах у тебя событие вылитает через метод с приставкой on+заглавная первая буква
Аноним 30/05/20 Суб 21:05:12 1708538476
>>1708526
Я не заметил on, зато заметил последнюю букву разную, подумал что в разных местах метод по-разному назван.
Кстати для чего QML и QtQuick используются?
Аноним 30/05/20 Суб 21:08:58 1708543477
Screen Shot 202[...].png (211Кб, 1234x952)
1234x952
Аноним 30/05/20 Суб 21:59:15 1708620478
>>1708538
>Кстати для чего QML и QtQuick используются?
Это как XAML, только не через жопу. Декларативно реактивный язык описания интерфейсов. Грубо говоря у тебя приложение разбивается на бек на плюсах и фронт на QML и жопаскрипте
Аноним 30/05/20 Суб 22:03:47 1708625479
>>1708620
Т.е. в твоём бы случае ты бы сделал на крестах поставщик данных, а потом супер быстро накидал интерфейс со всеми финтифлюшками на кюмеэл.
Аноним 30/05/20 Суб 22:17:17 1708639480
>>1708466
>>1708488
Там скорее всего куча dependent кода, посему писать без this - это code smell
Аноним 30/05/20 Суб 22:19:53 1708642481
>>1708468
Ты можешь вообще что угодно показывать. В бд будет интовый ключ, а твой метод data() для столбца с этим ключом будет возвращать анимешные картинки
Аноним 30/05/20 Суб 22:21:16 1708644482
>>1708506
Очевидно, что ты отнял от uint(0)
Аноним 30/05/20 Суб 22:49:47 1708670483
>>1708642
Не подскажешь метод, который возвращает текущую выделенную строку в моей таблице, чтобы я кнопкой удалил? Что-то могу найти в документации, там какой-то еще новый класс, связанный с индексами, просто не получится получить номер что ли.
model->removeRow(view->???());
model->submitAll();
Аноним 30/05/20 Суб 22:59:25 1708676484
Аноним 30/05/20 Суб 23:10:13 1708683485
Аноним 30/05/20 Суб 23:12:01 1708685486
Запилил сейчас, чтобы шизик убирающий тег не успел это сделать раньше
Аноним 30/05/20 Суб 23:28:44 1708699487
>>1708676
QModelIndexList selection = view->selectionModel()->selectedRows(0);
if (!selection.empty()) {
QModelIndex idIndex = selection.at(0);
int del_id = idIndex.data().toInt();
model->removeRow(del_id);
model->submitAll();
Так примерно принято делать?
Аноним 30/05/20 Суб 23:33:33 1708703488
>>1708699
Чел, я не ебу. Лучше загугли, посмотри на примеры всякие. Можешь взять qbittorrent как образец хорошего кутишного кода
Аноним 30/05/20 Суб 23:51:53 1708720489
>>1708699
Я давно делал, но ты там вроде должен слать сигналы о начале и конце модификации, чтобы вью их отобразил.
Аноним 30/05/20 Суб 23:59:42 1708726490