Это копия, сохраненная 29 ноября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Прошлый тред: >>1708681 (OP)
Перекот вопроса
Дано: две проги, которые делают один и тот же Х. Первая сделана по принципу: main.cpp вызывает функцию 1, та что-то делает, вызывает функцию 2, 2 делает что-то и т.п. Вторая сделана по принципу: есть класс, в котором функции 1 и 2, main.cpp вызывает функцию из класса и далее по списку. Т.е. единственное отличие, что во второй проге я запилил класс, чтоб не передавать миллион переменных из функции в функцию. Вторая прога работает на 10-15% медленней. Это нормально? Или я испортил?
В сеть из библиотеки тоже нельзя, придётся идти в другую библиотеку.
"Полный нуб" под спойлером вам вообще ничего не говорит? "Полный" = считайте, что я умею вызывать функцию с хэллоу ворлд и сделал класс с хэллоу ворлд и больше нихуя не умею.
Примерно так:
unsigned int start_time = clock(); // начальное время
// здесь должен быть фрагмент кода, время выполнения которого нужно измерить
unsigned int end_time = clock(); // конечное время
unsigned int search_time = end_time - start_time; // искомое время
Ясно.
Говоря об оптимизациях, если компилируешь через g++, то добавь флаг -O2. Если не через него - хз, гугл в помощь.
Может, просадка из-за времени, уходящего на создание объекта класса. Попробуй замерить уже после создания.
А вообще - забей.
>Может, просадка из-за времени, уходящего на создание объекта класса
Вряд ли, т.к. у меня в функциях вычисления в цикле, и хоть маленький цикл, хоть большой, время в % приблизительно одинаково отличается.
>А вообще - забей.
Если бы я мог, хех.
Ну я так понимаю, так быть в целом и вообще не должно?
Как заебал c++!
Хочу, чтобы функция инстин... инстини... function gets instantiated с const. Знаю, почему вызывается без const - ранк ниже из-за квалификатора const.
https://onlinegdb.com/Sym527l68
сниппет:
#include <iostream>
#include <utility>
class A {
};
template<class... Params>
void foo(Params&&... params)
{
std::cout << "Foo(Params&... params)\n";
}
template<typename T, class... Params>
void foo(const T& t, Params&&... params)
{
std::cout << "foo(const T& t, Params&&... params)\n";
}
int main()
{
A a;
foo(a, "test");
return 0;
}
Как заебал c++!
Хочу, чтобы функция инстин... инстини... function gets instantiated с const. Знаю, почему вызывается без const - ранк ниже из-за квалификатора const.
https://onlinegdb.com/Sym527l68
сниппет:
#include <iostream>
#include <utility>
class A {
};
template<class... Params>
void foo(Params&&... params)
{
std::cout << "Foo(Params&... params)\n";
}
template<typename T, class... Params>
void foo(const T& t, Params&&... params)
{
std::cout << "foo(const T& t, Params&&... params)\n";
}
int main()
{
A a;
foo(a, "test");
return 0;
}
vcpkg install sfml
Мне тоже так говорили, но я вовремя понял, что не способен выучить плюсы настолько хорошо, чтобы найти на них нормальную работу, и съебался. Но я до сих пор согласен, что
> только на швитых плюсах можно пройти путь от макаки до человека
A/B - типы, a/b - экземпляры.
Код std::tuple<A,B> test(a,b) компилируется.
Я написал свой shablon<A,B> test(a,b) и он тоже компилируется.
Но std::tuple test(a,b) компилируется, а shablon test(a,b) не хочет, мол "no viable constructor or deduction guide for deduction of template arguments of".
Что мне нужно сделать, чтобы можно было не указывать тип шаблона явно и он сам выводился из списка?
Всё, разобрался. Нужно было написать этот синтаксис через: template<typename... a> shablon(a...) -> shablon<a...>;
Интересно, по какой причине оно не могло сделать это самостоятельно?
этот вопросик тысячу раз обкашлян уже.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input /= "jejshehehdhdhbdbdvddbbdvdv"/;
auto inIter = input.begin();
input = "jejshehehdhdhbdbdvddbbdvdv";
while (inIter != input.end())
{
inIter++;
}
}
Ёбаная макака
В голос. Удачный пик.
Мне тоже (очень) интересно посмотреть код.
Если у тебя класс без виртуальных методов - то должно работать не медленнее кода без класса. А если ты передавал по 10 переменных во все функции цепочкой - то возможно чтение полей класса находящихся в одних и тех же местах было бы даже быстрее, чем громадное разворачивание стека, которое хреново кешируется - если я хоть что-то в этом смыслю.
Красава, я тож знаю, но все же думаю есть места, где неплохо было бы подучиться. Я уже прочитал все книги из шапки за пару месяцев и совершенно не понимаю как местные шизики могут говорить, что выучить с++ за 21 нельзя. Понятно, что они виляют задом и начинают задвигать про опыт, умение и т. п. - что все это нельзя овладеть в такие сроки, но по сути, они занимаются подменой понятий. Реально дела обстоят так, что с++ за 21 день можно пройти вдоль и поперёк, как я, собственно, и сделал.
За 5 минут я мог бы это вручную переписать и закомпилить, так что хуйня твой тест
Никакого аутпута не будет, ведь его нет
С другой стороны алгоритмы и математика. Обе науки представляют глобальный фундамент, ветвление в которых возможно только в высших своих проявлениях. Не так ли?
Потому что изучать алгоритмы бессмысленно. Все уже написано, бери и используй.
Изучил алгоритм @ написал прогу на рандомном языке @ получил 100500 специфичных ошибок языка @ сап двач, чому оно падаит?
>>20556
Это ref-qualified member function:
https://en.cppreference.com/w/cpp/language/member_functions
>>20544
Врёшь же
>Врёшь же
nope. Я когда читал Мейерса заметки делал, вот гляди
- delete over private, because
+ нет неоднозначности
+ удаленной может быть любая функция
+ с помощью private нельзя отключить инстанцирование шаблонов, потому
что нельзя специфицировать шаблон в области видимости класса
- override применяется для указания перепределения виртуальной функции
+ обеспечивает документируемость кода
+ позволяет не ошибиться в выборе сигнатуры переопределяемой функции
Ф-я осщуествляет перекрытие если:
1) Совпадает имя
2) Совпадают параметры и их типы
3) Совместимое возвращаемое значение и спецификация исключения
4) Идентичный ссылочный квалификатор
5) Константность функции совпадает
* Ссылочные квалификаторы позволяют переопределять поведение функции в зависимости от категории
объекта (rvalue или lvalue). Используется, когда копирование излишне:
class A... vector<...> data;
vector<...>& getData() &
vector<...>&& getData() &&; // return move(data);
A a;
auto data = a.getData(); -> vector<...>& getData()
auto data = A().getData(); -> vector<..>&& getData()
>Врёшь же
nope. Я когда читал Мейерса заметки делал, вот гляди
- delete over private, because
+ нет неоднозначности
+ удаленной может быть любая функция
+ с помощью private нельзя отключить инстанцирование шаблонов, потому
что нельзя специфицировать шаблон в области видимости класса
- override применяется для указания перепределения виртуальной функции
+ обеспечивает документируемость кода
+ позволяет не ошибиться в выборе сигнатуры переопределяемой функции
Ф-я осщуествляет перекрытие если:
1) Совпадает имя
2) Совпадают параметры и их типы
3) Совместимое возвращаемое значение и спецификация исключения
4) Идентичный ссылочный квалификатор
5) Константность функции совпадает
* Ссылочные квалификаторы позволяют переопределять поведение функции в зависимости от категории
объекта (rvalue или lvalue). Используется, когда копирование излишне:
class A... vector<...> data;
vector<...>& getData() &
vector<...>&& getData() &&; // return move(data);
A a;
auto data = a.getData(); -> vector<...>& getData()
auto data = A().getData(); -> vector<..>&& getData()
просто сейчас ты пишешь для конструктора "= delete" чтобы его "отключить", а раньше просто пихали его в private раздел, но там какие-то траблы с шаблонами могут быть тогда
Джун-новичок
На алиэкспересс вроде есть камеры с управления доступом на охраняемый объект через КПП
Нельзя, там нет нормальной функциональщины и асинхронщины с сахаром. Ваше говно с void* нестабильное и нахуй никому не нужное
deduction guides
>template<typename... a> shablon(a...) -> shablon<a...>
Вот как можно обозначить эту деятельность не иначе как пердоленье? Вы же самые настоящие пердольки! (даже хуже, ведь от линуксом хоть пользоваться можно)
Надо скачать репозиторий по адресу https://github.com/
TrainingByPackt/Advanced-CPlusPlus/tree/master/Lesson1/Exercise01/project, для этого дают команду - git clone https://github.com/TrainingByPackt/Advanced-CPlusPlus/tree/
master/Lesson1/Exercise01/project
Но при ее выполнении я получаю ошибку git clone https://github.com/TrainingByPackt/Advanced-CPlusPlus/tree/
master/Lesson1/Exercise01/project
Если я зайду на пару папок выше на той странице и выберу clone with SSH -
Что я делаю не так?
Ошибка вот так выглядит
fatal: repository 'https://github.com/TrainingByPackt/Advanced-CPlusPlus/tree/master/Lesson1/Exercise01/project/' not found
Качай архивом, или проверь папку c:/users/pidor/..., или учись пользоваться гитом, или иди нахуй.
блять этo пердoля зачем ты этo делаешь. есть визуалOчка
так и есть
Может быть такое, что его другой заголовок инклудит.
std::string лежит в iostream
https://stackoverflow.com/questions/33349833/can-stdstring-be-used-without-include-string
тупой уебан
на кресты слoжнее пoпасть пoтoму чтo на них тупо вакансий меньше. на десктопные приложения спрос упал сильно с развитием веба. сейчас почти всё можно сделать через браузер + встроенные средства винды сильно улучшились. в нулевые помню набор из 10-15 программ дополнительных им которые допом. ставил на систему. а щас всё в винде или в браузере. видеконевертеры, редакторы видео, даже аналог фотошопа есть в онлайн версии.
Но тем не менее на с++ всё равно можно дохуя денег заработать если высрать что-то своё. он так больше для предпринимателей в погромировании
# include <map>
class Class { };
int main()
{
std::map<int, Class> map;
map[0] = Class();
return 0;
}
От реализации зависит, не рассчитывай на это. Одним компилятором собирается, другой может послать.
Формошлёпства не хотелось бы, интересного там мало, перспектив тоже, учиться особо нечему. Если и заниматься десктопом, то это должно быть что-то масштабное, уровня хотя бы САПР или игор, вебу пока с этим не тягаться. Ну или какой-нибудь жёсткий реалтайм, но я слабо представляю, что там.
Фу люниксе даже папок нет!
В этом и суть крестов, пилить какие-то свои проекты на которых ты лично можешь бабла поднят, а не в том чтобы работу найти за 300кк в наносек. В любом случае в С\С++ с душой, а всё остальное ни то. Нету там души, хотя когда я вкатывался то да, повёлся на форс про то что с++ язык крутых погромистов. А когда понял как там долго ебаться нужно было уже поздно, т.к. я всё таки начал уже, залез туда. В си хорошо освоился + у меня характер такой не бросать начатое так и сижу на срр
> В любом случае в С\С++ с душой, а всё остальное ни то.
Ага, я как раз поэтому так и не забил окончательно.
а в ассемблер не пытался вкатываться? что о нём думаешь? у меня мечта в асм вкатиться, но никак руки не доходят.
вообще мои предпочтения это asm, c\c++ на остальное я не смотрю.
Немного изучал, ничего сложного на нём не писал. Тупо не хватает усидчивости, чтобы делать в 10-20 команд то, что на высокоуровневых языках делается в одну строчку.
Возможно, ассемблер идеален для каких-нибудь контроллеров, но не более, но сейчас там даже чуть ли не JS можно.
> Юзал пример с их сайта с этим алгоритмом и ужасно тормозило, у челов на ютубе с питоном в 10 раз быстрее было
Ты собирал-то хоть релизную версию? Это типичная ошибка новичка - сравнивать скорость алгоритмов в дебаге
С ним лучше поймёшь, как работает железо, и во что примерно превратится код после компиляции. В теории это должно помогать писать более оптимальный код, но обычно оптимизатор оказывается намного умнее.
Нет... Только что проверил и действительно быстро работает, я знал что разница в скорости есть, но такого прироста не ожидал, спасибо.
Ну извини, по уровню твоего вопроса сложилось впечатление, что ты в первый раз открыл терминал под виндой и скопипастил туда строчку из туториала.
Объясните новодебилу что на пикче за хуйня, зачем нужны многоточек, как это работает? (то что тут шаблон я понял). В универе не учили такой хуйне, на практике не видел, но похоже на функция множественных аргументов? Поясните, пожалуйста.
Оптимизатор-хуизатор твой не человек и не может усмотреть все моменты из твоего говнокода, а ты, зная досконально работу всех команд, которыми пользуешься, сделаешь намного лучше.
никoгда
Это нужно быть сеньором-помидором, воспринимать плюсовый код как сахарочек для ассемблера и заодно сильно упираться в производительность.
Оптимизатор может и не человек, но в среднем он оптимизирует лучше, чем обычный кодер.
Забей на манипуляторы. Форматирование вывода в потоки это дрочба еще хуже самих потоков. Единственный адекватный способ изкоробки это (s)printf.
А мне оно поможет выводить строки с выравниванием по столбцам, если нельзя предсказать длину текста в каждом столбце?
Например, может быть
нркапгнрапгопрго
аап
или
рппрапопаоапопр
прпарапрпарыаго
или
пр
попнегукекгнекгнекнкененкенегнгге
Тебе в любом случае придется хуярить размер "столбца", да и ты можешь написать функцию определения этого размера и в зависимости от результата работать.
А обязательно так изъёбываться всего лишь ради нормального вывода? Мы на крестах кодим или где?
Я "изъёбываюсь" и заебись живется. Да и типа из изъеба тут лишние пара минут на создание функции... Не вижу особо трудностей. Каждому - свое.
Если компилятор диагностирует ошибку, то это то же самое что просто ill-formed.
Если не диагностирует, а оттранслирует программу, то её поведение не определено.
Понятно. Спасибо.
warning C4091: '': ignored on left of 'std::idi_nahuj' when no variable is declared
Почему код из книги "Шаблоны C++ Справочник разработчика" не компилируется? Потому что она 2003 года.
Что новое почитать, в частности где про всякое разное с произвольным количеством параметров рассказано. А то в стандартной библиотеки немного перегруженные примеры, довольно сложно иногда понять что происходит в каком-то конкретном месте, мягко говоря.
Мне не в этом конкретном случае - тут то всё ясно, я просто самый короткий пример привёл.
Например, мне нужно задать переменную пригодную для хранения произведения всех аргументов функции (может быть даже в структуре) - при этом прямо сходу первой строчкой задать произведение я не могу, потому что умножать нужно только на некоторые члены по сложным правилам.
>не компилируется?
Нужная версия стандарт не включена.
А пикче хрень какая то нарисована. Инстанц шаблона функции один и тоже тип должен возвращать, вне . А кто сказал, что T и G это один и тот же тип? Не, они допустим один в другой может сконвертироваться (int в long например), но все равно это говнокод. Не делай так.
Так всё верно же, я могу засунуть туда int+double, а могу double+int, и в обоих случаях там будет double.
А мне и нужно получить минимальный тип, умещающий сумму всех аргументов шаблона, причём написать auto я не могу - потому что это поле структуры, которое заполняется когда-то после при вызове одного из методов. Написал что-то вроде decltype(T()+(G()+...)) name и вроде работает во всех комбинациях верно.
Есть новая версия этой книги, читай ее, с тех пор все поменялось
https://www.amazon.com/C-Templates-Complete-Guide-2nd/dp/0321714121/ref=sr_1_2?dchild=1&keywords=c+++templates&qid=1592013057&sr=8-2
std::idi_nahuj(1721060);
Все равно фигня какая-то. Арифметика в компах не такая, как в абстрактной математике. Тем способом, которым ты хочешь решить задачку, ты либо округляешь число с плавающей запятой до целого (и то если влезет, что очень не факт) теряя точность, либо преобразуешь целочисленный тип к типу с плавающей запятой, опять же теряя точность, но теперь уже целочисленную. Повторяюсь, еще раз, во время выполнения функции, ее тип результата меняться не может. Можно динамическим полиморфизмом решить это (функция возвращает указатель на полиморфный объект), но все равно это херня с потенциальными подводными камнями.
Копай в сторону того, как тебе уйти от использования в одной операции целочисленного типа и типа с плавающей запятой. Это само по себе уже очень подозрительно.
P.S. В околоайтишных книгах использования типа с плавающей запятой для хранения денег приравнивается к экономическому преступления.
>ты либо округляешь число с плавающей запятой до целого
Никогда не округляю, только наоборот. Я в курсе же - всё-всё знаю про плавающую запятую.
И вообще, я просто практикуюсь и присматриваюсь к возможностям шаблонов - в действительности эта задача решалась в райнтайме с использованием нескольких переменных (можно и через твой полиморфизм было бы, да) - мне просто немного неприятно делать в райнтайме то, что можно полностью на уровне шаблонов и макросов сделать. Это как год-назад-тут-обитающий видос про гетерогенную хэш-таблицу в компайл-тайме - такой же бред в общем-то, только проще на порядки.
Вся наука борется за максимальную конкретизация типов, чтобы килограммы нельзя было складывать например с метрами и тому подобное, а ты хочешь максимально генерализованный арифметический тип.
>>21152 у тебя просто задач как бы учебная, и ты скорее играешь с этим всем, а не пишешь что-то для реальной жизни? Ну тогда норм, ок.
>В околоайтишных книгах использования типа с плавающей запятой для хранения денег приравнивается к экономическому преступления.
И как тогда надо хранить?
Хранить с фиксированной точкой. Например в одном инте целую часть, в другом инте - дробную.
В копейках либо в структуре данных, где отдельно копейки и рубли.
Помимо этого хранить как рациональное число, где отдельно числитель и знаменатель, и в числа с точкой переводить только на вывод.
А как делают со скриптовыми языками, например, питон или js? Вставлять интерпретатор в свой c++ проект? Как тот же питон передаст инфу в c++ часть? Потоки ввода-вывода? Сокеты?
Например вот так. Это TCL. Создаешь объект "интерпретатор", и потом кормишь его кодом на TCL прямо посреди си.
Уверен, примерно так же можно сделать с питоном или жс.
Ну посмотри на qt. Там реально ты пишешь условный бек на крестах + qt dsl на макросах и дополнительных ключевых словах, условный фронт на qml + js, и внутри обоих css для задания свойств виджетам. Часть этого jit компилируется на v8, часть как обычно.
Проценты начислять например каждый день. Даже байка была (а может и не байка), как какой-то хитрый банковский погромист округлял всё до цента, а доли центов воровал себе, и довольно много так наворовал.
Это не байка, это Гарри Гаррисон, серия про стальную крысу=)
Отключено Security Check: Disable Security Check (/GS-) и Data Execution Prevention (DEP): No (/NXCOMPAT:N. Нужно без этого.
Сам код
https://pastebin.com/XRPjAfSu:
thx
Никак. Само получается. Я процедурками пишу когда пишу что-то маленькое, а вот если пишу крупную программу то там сам уже продумываю классы т.к. если этого не сделаю то я потом просто запутаюсь и охуею.
Продолжай придерживаться структурного подхода из Си, только добавь к нему что у структур бывают еще методы. Это сейчас самое модное направление в плюсах, его называют "си с классами".
А никак блядь. Тикет с этой ошибкой у них в баг трекере уже год точно висит
Как прикастовать метод класса к статическому методу? Пишет что не может кастовать (classname::★) к (★). Мне всё статическим делать что ли?
Если бы ещё .все проблемы можно было решить кастом.
Надо попробовать кастонуть private к public.
Есть один проект который тестируется другим проектом.
У них общий #include.
В настройках 2-го проекта определяем например __TEST__
И в их общем #include чего-нибудь переопределяем
#ifdef __TEST__
#define ....
#else
#define ....
#endif
Это работает заебись, когда каждый из проектов заранее знает кто он, например для экспорта/импорта DLL.
Но я хочу передать __TEST__ в первый проект чтобы он перекомпилировался вместе с тестом и чтобы у них #defines делали одно и тоже. Другими словами чтобы весь solution компилился или в тест моде или продакшн моде. Такое легко сделать через makefile, а как через проекты?
Можно конечно через Configuration это сделать, например если Configuration=Debug, то в обоих проектах определить __TEST__. хз. Или сделать отдельный Configuration для unit tests?
Кто-нибудь с g моком ебался? Какая уебищная хуета, но лучше кажется ничего нет. В С++ моки это мучение.
Так а в чём отличие указателей на эти методы? Ему не похуй ли в классе оно или нет? Как мне, например, писать обработчики событий и передавать их либам, которые просто (★) принимают?
> Можно конечно через Configuration это сделать, например если Configuration=Debug, то в обоих проектах определить __TEST__. хз. Или сделать отдельный Configuration для unit tests?
Выбирай
Оба подхода кривые так как придется конфигурить два билда на билд сервере, дебаг и релиз. И в релизе снимать галку, чтобы тестовой проект не билдился. В идеале хочется собирать только релиз и его и тестировать, потому что иначе это технически другой код. Мало ли что там дефайны наделают. Косяки короче. Тестируем одно а релизим другое. Похоже хуйня эта затея, придется передумавать.
не по уставу. 2020-й на дворе. закидают ссаными тряпками. тем более проблемы не решает все равно, как я внезапно догадался.
Наверное как-то так: https://ideone.com/vriHUY
Вроде работает. Там в комментариях описан ход мысли.
Но это говно ебаное, я просто методом тыка это разобрал - нет никакой гарантии что это заработает на другой версии компилятора, с другими настройками или в других случаях.
>Как мне, например, писать обработчики событий и передавать их либам, которые просто (★) принимают?
Через лямбду с захватом?
Ну, или через функцию с глобальным переменной.
Просто если ты прикастуешь метод вышеописанным способом, то функция вызовет метод, но по указателю this там мусор будет, потому что либа ничего не знает про экземпляр класса, к которому этот метод имеет отношение.
> Через лямбду с захватом?
Лямбда тем более не кастуется к (★).
> Ну, или через функцию с глобальным переменной.
Так и сделал, но это какой-то говнокод.
std::shared_ptr<MyType> g_MyType;
И есть инстанс этого MyType на стеке.
Что если так сделать:
DerivedMyType d;
g_MyType = std::shared_ptr<MyType>(&d,
[](DerivedMyType*) {});
просто шобы дтор не вызывался. И меньше печатать.
Метод короткий, сами мы не маленькие, пишем без багов, че. Какие подводные?
>Лямбда тем более не кастуется.
В самом деле, мой косяк. Только пустая без захватов кастуется.
Странно, если в либе нет вомзожности передать вместе с твоей функцией число или другой идентификатор - чтобы можно было различать разные экземпляры твоего класса. В винде полно звёздочек в каллбеках, но помимо этого они ещё идентификатор возвращают, по которому можно не без некоторого дополнительного кода определить вызывающий экземпляр.
В смысле утонул? Так и должно быть.
> альтернатива шаблонам
Generics
> auto
var (начиная с Java 9).
Можешь привести пример, что ты хочешь кастовать? Так то статик функции похожи на pure function в моем представлении: понимают аргументы, вычисляют независимо ни от чего, возвращают значение.
А для инстанцированных объектов вроде используется std::bind, если нужно передать функцию объекта
мимо
> что ты хочешь кастовать?
Обработчики исключений WinAPI. Туда лезет только (*). Везде в гугле ахуительные примеры прям в main, естественно там никаких проблем нет с доступом к глобальным переменным из обработчика. А вот как адекватно внутри класса с этим работать не очень понятно.
Что-то я пока не вижу, чем твои мейки отличались бы от галочек в студии
Почему нельзя сделать свободную функцию и из неё вызывать статический метод?
Язык С++ если что
Если область видимости указателя когда-нибудь будет шире области видимости твоего объекта, все равно насосёшься хуёв.
Программирование это теория(5%)+практика(95%).
> Какие подводные?
Деструктор d всё равно вызывается.
В чём проблема создавать shared_ptr я не пойму? Какую проблему ты решаешь?
дай телегу
>Какую проблему ты решаешь?
Он не решает проблему, а создает. Шаред птр, не владеющий собственным ресурсом - это ли не проблема?
А зачем тогда опыт в 3-6 лет хотят? Это же знает любой первокурсник технической специальности.
А джуну как быть? Если интересует геометрия, но не хочется 3 года писать говнецо на крестах под винду только ради опыта.
А меня могут взять на такое, если у меня нет опыта работы (вообще), но есть куча всевозможных физических симуляций на гитхабе с поверхностями, кватернионами и другими вычислительными методами (в том числе многопоточными или под видеокарту)?
Ну и ещё что-то про opengl, всякие ретрейстеры на октодеревьях, которые тоже про линейную алгебру.
Для начала пусть сам Раст вырастет из пердольного поделия уровня Nim. На этом говне только сами разработчики умеют писать. Ну или линукс-пердоли, которым и собака Bash норм. Мало того что при написании системщины мгновенно утыкаешься в стену и вынужден ансейфить, так ещё и все врапперы сишных либ на ансейвах и работают хуже чем без Раста.
Это говно просто не имеет задач. Индусы/веб-макаки/дети пусть на го/шарпе пишут, а нормальным пацанам и кресты норм.
Жили были два веселых друга Сан и Мазила. Но рядом с ними жил гадкий жирдяй Мелкомягок и похищал придуманные ими языки программирования
Надеюсь они MSRust сделают со встроенной гуйней
Если я бы oбладал такими знаниями я бы в oднo хлебалo запилил бы свoю игoрь, швырнул бы её в стим и сидел на деньгах oт шкoлoты
ты чё дурак? этo же элементарная хуета. тебе там даже вoн кусoк кoда дали как нужнo делать.
я бы такoе на oбычнoм struct в си бы сделал спoкoйнo
главнoе не пoдалеть денег на рекламу. вoпрoс тoлькo в тoм чтo игра будет реальным гавнoм и вoзвраты oт игрoкoв или низкие прoдажи не oтoбьют даже денег пoтраченных на рекламу. да там пoдвoдных дoхуя, нo этo лучше чем идти на эту ебучую вакансию
Проблема с игрой в том что её очень долго и забёно писать. Потом ты её выкидаешь и люди её покупают. Но большинство разработчиков увы не выстреливают и их игры в лучше остаются на среднем уровне. То есть ты написал игру люди купили, основная волна прошла все преданные фанаты есть и денег и больше нет. Очень многие начинают тупо сосать бабло с фанатов игры выпуская длси, всякие новые ёба версии, разумеется всё это делается с максимальной ленью чтобы побыстрее бабла выскрести.
Ярки пример power revolution годная игра, аналагов ей нет. Но увы они продали 4 части в которых вообще толком нихуя не меняли даже баги не залатали. По итогу у этой игры очень часто можно встретить кучу негативных отзывов, т.к. фанаты игрушки очень сильно бугуртят с продажи одного и того же гавна.
К теме твердотельной геометрии линал с апроксимацией только 20% составляет. Также странно, почему нет требований по знаний верстки латекса и знание матлабаматлаба. Мне кажется, работа эта новая, нет ещё наработок
Зачем это нужно, если есть движки? Делай себе 3д модельки, если хочешь, можешь код на плюсах писать, не хочешь, пиши на блюпринтах.
В шапке качество книги страуструпа шакальное пиздец
гугл транслейтом что ли переводили.
>Деструктор d всё равно вызывается.
А чего ему вызываться, если reference count не изменится, объект не удаляется. Для этого и dtor у share_ptr переопределен на пустой. Сам объект d никуда не денется. А проблему я решаю с ебаным gmоck. Там такой компот, если че-нить тронишь начинаются какие-то side эффекты. Добился устойчивой работы, ну и ладно.
И при этом какой-то треш вроде _mm_crc32_u8 там есть - хотя этот crc32 вряд ли заслуживает аппаратной поддержки, не говоря уж про то, что он и так достаточно быстро работает.
Вот конкретный охуительный косяк:
если в EXPECT_CALL засунуть shared_ptr, то сам метод вызовется и вернет правильный объект, но вещи типа Times(0) не работают.
Если вместо шары засунуть объект, то все работает как надо.
А с unique_ptr вообще пиздец еботня. Иногда лечится с помощью std::move иногда нет. Короче все, надо всем на руст переползать. Так жить нельзя.
Ты же в курсе, что толкать везде умные указатели - это пиздец говнокод.
ЗАВЕЗЛИ УМНЫЕ УКАЗАТЕЛИ
@
ПРОСИРАЕШЬ РАСТУ В ПРОИЗВОДИТЕЛЬНОСТИ
@
ВОЗВРАЩАЕШЬСЯ К СЫРЫМ
@
ОШИБКИ ПАМЯТИ
@
РАСТ ГОВНО Я СКОЗАЛ
Хотя бы потому что лицензионное соглашение движка тупо запрещает создавать на его основе любые инструменты для чего либо.
Не для игор - можно - визуализации заводов, разливов дизеля с ТЭЦ и прочую такую хуйню.
Пилить редакторы какой-либо хуйни кроме сисек эльфиек в ммошечках - нельзя.
Не станешь. Примерно по такой книжке в месяц надо читать, чтобы быть повыше среднего навозного уровня.
Тебя еще александреску с его магией шаблонов ждет.
А потом тонных хтонических легаси говен уровня смешивания си с классами, крестов разных версий в одном проекте и шаблонной магии.
Там вроде всякая элементарщина на сотни страниц размазана.
По крайне мере для начала книги, не знаю как для второй половины.
Да я уже заметил читая предисловие что книга для ньюфань которые даже клавиатуры не нюхали. Но я уже после книжки Ритчи и Кернигана. Ладно буду эту книгу читать.
Что бы ты понимал, вот характерный пример:
https://github.com/CRYTEK/CRYENGINE/tree/release/Code/CryEngine
Реальный большой проект на крестах ака ТОННЫ ГОВНА ВИЛКОЙ ЧИСТИ
Это где ты такой запрет нашел?
У него все папки начинаются со слова Cry неспроста.
Ты если "с нуля", не Страуструпа читай. Возьми хоть какого-нибудь Столярова, чтобы от ассемблера попасть в Си, а потом уже в С++. Но написан Столяров этот ужасным языком, глаза вытекают от канцелярита, можно наверное оглавление посмотреть, и составить себе план на его основе, и пройти по другим книжкам.
Пройтись по этому набору, проверяя длину векторов, и сохраняя указатель (или индекс, если это массив) вектора максимальной длины. Потом после окончания цикла - по этому указателю/индексу будет нужный вектор.
прoще изучать с высoкoгo урoвня на низкий. я начал с питoна, перешёл на си, щас на с++ вхoжу. асм пoсле с++ будет. если бы я будучи ньюфаней oткрыл бы книгу пo си, я бы oхуел.
Ну ок, если ты так пошел - почему тогда ассемблер после С++?
Его же лишь немного надо задеть, сразу после Си тогда заебись - можно увидеть почти прямо "маппинг" сишного кода в ассемблер.
Отрубить оптимизацию, и еще у гцц есть ключ, с котором он не в машинный код компилирует, а в ассемблер - вообще красота будет и сразу всё понятно.
std::max_element(d.begin(), d.end(), [](auto& c, auto& b){return c.size() > b.size();});
ну пoтoму чтo там решил уж. спасибo анчoус, нo буду изучать уж как план пoстрoил книгу прoчитаю и пoйду на асм.
Самый неудачный способ изучения. Как уже выше писалось начинать надо изучать с выского уровня переходя на более низкий. Никто из не начинал знакомство с компьютером с нолика и единички. Мы все начинали водить мышкой и кликать кнопки в окнах. А не сразу садились за ассемблер. Всё начинается с простого постепенно переходя к сложному. Ребёнок с миром не начинает знакомтсво с разбора его на атомы и молекулы.
А мне кажется нормальный способ. Ассемблер же не будешь выдрачивать до совершенства со старта. Хелло ворлд там, квадратное уравнение какое-нибудь решить, массив отсортировать - и уже пошел в Си. Он (ассемблер) только и нужен, чтобы понять что за зверь такой - указатель, и что там примерно происходит когда вызываешь функцию, или когда делаешь арифметическую операцию.
>и что там примерно происходит когда вызываешь функцию, или когда делаешь арифметическую операцию.
И нихуя не узнаешь.
Потому что компилятор может заинлайнить, может завекторизировать, может наоборот развернуть цикл и вообще, лучше тебя и твоих учителей из книжек по ассемблеру времен Pentium 1 в лучшем случае, в курсе о последней мете в оптимизации на архитектурах современных корок и рязаней.
Ассемблер реально нужен в двух случаях - написать бутстрап при создании операционной системы (специальные команды вроде сисколов и всякой инициализации системных регистров вроде перехода в защищенный режим на языке высокого уровня не сделать) и ... всё.
Ну может еще AVX ИНСТРУКЦИИ ПОКАЖИ ТКНИ вручную запилить, что бы сделать код непереносимым, но БЫСТРЫМ ОЛОЛО АЖ НА КОНСТАНТУ ПЕРЕД N - но и тут есть интринсики, которые делают это лучше.
Вот, я даже папку с самой писечкой за тебя нашел что бы тебе не искать:
https://github.com/CRYTEK/CRYENGINE/tree/6c4f4df4a7a092300d630f8f89d2ebda39183c36/Code/CryEngine/CryCommon/CryMath
Ты как-то резко перескочил с задачи обучения на задачи из реальной жизни.
>Потому что компилятор может заинлайнить, может завекторизировать, может наоборот развернуть цикл
Серьезно?
Процитирую себя, раз уж ты взялся отвечать на один пост, а не включиться в дискуссию целиком:
>Отрубить оптимизацию, и еще у гцц есть ключ, с котором он не в машинный код компилирует, а в ассемблер
>>Потому что компилятор может заинлайнить, может завекторизировать, может наоборот развернуть цикл
>Серьезно?
На твоей картинке до 23 строчки, если что, стандартный пролог в котором программа себе стек подготавливает. Сам твой код скомпилировался в строчки 23-27.
Шо це за хуйня?
bool CheckNAN(const f32& f)
{
return (((unsigned)&(f)) & 0xff000000) != 0xff000000u && ((unsigned)&(f) != 0x7fc00000);
}
>если что
Ну нихера себе ты какой умный. Прям глаза мне открываешь. Сам-то я дремучий, не знал никогда ничего подобного.
Неужели отрицаешь учебную ценность написания какой-нибудь мелкой хрени на ассемблере, потом такой же на Си, и сравнения потом листингов твоих, и тех что выдает gcc с флагом -S ?
>qAudioDevice->write(samplebuffer.data(),towritedevice);
https://stackoverflow.com/questions/32049950/realtime-streaming-with-qaudiooutput-qt
Может кто объяснить на какой девайс я отдаю данные? Я думал может это на аудиовыход идёт, но не уверен.
> Двач, как юникод выводить в консоль на windows 7?
https://docs.microsoft.com/en-us/windows/console/setconsolecp
Нет, выкидывание cmd.exe поломает всё нахуй поэтому в третьем десятилетии 21 века ты будешь страдать от ДОСОВСКОЙ КОДИРОВКИ
Это не UB, это platform specific или что-то в этом роде
Игровые движки все равно затачиваются под конкретную платформу, поэтому им норм.
Скорее всего их реализация быстрее. Команда сравнения чисел с плавающей точкой может требовать больше тактов.
>Это не UB, это platform specific или что-то в этом роде
Это UB из-за нарушения strict aliasing rules предпочитаю именовать это во множественном числе.
Strict aliasing может быть отключен в параметрах компилятора или локально прагмами
Плюс, ни один реальный компилятор не сломает этот код даже без настроек.
SetConsoleOutputCP(CP_UTF8);
std::cout << "♠" << std::endl;
нет
Ну и нахуй иди.
Пруф?
А в чём заключается разница между разными платформами?
Они могут использовать разный формат числа с fp? Или чё там, регистры бывают меньше чем 4 байта? Или выяснение нан или не-нан происходит в FPU, а туда засылать/вынимать медленно?
Поясни, пожалуйста.
>Которые кроссплатформенны из за чего сосут по производительности.
Связи между посылом и выводом — нуль.
Возможно, вся эта канитель с манипулированием битами и передачей по ссылке имеет под собой одну цель — не трогать регистры с плавающей точкой.
Правда, смысл не совсем ясен, число, которое в объекте на который передают ссылку наверняка побывало в таком регистре да и ещё, возможно, было пролито в память только для передачи по ссылке.
Слушай, а может быть у них там есть самописная арифметика с плавающей точкой? Например показатель всегда одинаковый, а они только мантиссы туда-сюда херачат битовыми операциями? (и всё это каким-нибудь расширением типа SSE, чтобы сразу массивы аппаратно обрабатывались)
Хотя зачем тогда проверять NAN и как он может возникнуть - непонятно нихера.
Doom так работал. Они использовали математику с фиксированой точкой в 32битных целых. В те времена выбора не было, операции с плавающей точкой были слишком медленными.
Сейчас в этом нет смысла.
>>23897
Хуйня короче, стандартная реализация выдает похожий код и ни чуть не уступает этому костылю. http://quick-bench.com/-AgNbpub9rROFqw5wavQoipMCW0
Костыль быстрее на 0.06% по результатам нескольких тестов. Так что соси
Если в 1 случае не вызывать функцию, будет быстрее.
movl $0x7fc00000,0xc(%rsp)
movb $0x1,0xb(%rsp)
cmpb $0x0,0xb(%rsp)
setne %al
[/code]
vs
[code]
ucomiss%xmm0, %xmm0
setp%al
[/code]
Предположим, есть template<int arr[1024]>
что-то там дальше...
Когда я проинстанцировал шаблон, где именно хранится данный массив-параметр шаблона? То есть, если для каких-нибудь мелких параметров типа int-ов они (обычно) тупо сразу вставляются в код как immediate-параметры, но что происходит с более сложными объектами типа того же массива?
Что изменится, если я сделаю так?
template<int (&arr)[1024]>
что-то там дальше...
Правильно ли я понимаю, что теперь, если я буду менять массив, с помощью которого шаблон инстанцировался, то эти изменения будут оказывать влияние и на шаблонную функцию/класс (т.к. там теперь ссылка)?
Что мне следует выбрать (arr, const arr, (&arr), const (&arr) или другое), если массив известен на этапе компиляции (и не меняется) и я хочу, чтобы мне компилятор максимально поанроллил какие-нибудь циклы, завязанные на данный массив-параметр шаблона? Ну, или какие другие оптимизации сделал.
Тут кстати ассемблер по эльбрусу с подробной докой вывалили, видели?
Размах впечатляет:
http://ftp.altlinux.org/pub/people/mike/elbrus/docs/elbrus_prog/html/chapter10.html
К первому вопросу ещё добавочка:
У меня есть подозрения, что тут те самые знаменитые грабли про массивы и указатели, только в другом виде немного.
То есть, template<int arr[1024]>
эквивалентно
template<int* arr>
Это так?
что там все есть и все продумано замудрено пиздец, это тебе не risc-v в котором просто нихуя нет.
Какие-то сложносоставные команды.
На интеле сначала например and, потом cmp
а тут ебала cmpand - два в одном.
>>24058
Это же как-то называется?
А вот сам нагуглил:
>VLIW (англ. very large instruction word — «очень длинная машинная команда») — архитектура процессоров с несколькими вычислительными устройствами. Характеризуется тем, что одна инструкция процессора содержит несколько операций, которые должны выполняться параллельно
Не надо изучать плюсы методом тыка. Читай книжки, изучай как работают шаблон, вывод типов аргументов, специализации и прочее.
Мне надо написать шаблон для элементов алгебры с заданной на этапе компиляции таблицей умножения и забыть об этом как о страшном сне. Поэтому мне выгодней по времени задать вопрос.
> а тут ебала cmpand - два в одном.
> А вот сам нагуглил:
Лол нет (если я тебя правильно понял)
cmpand - это не команда, это одна операция на юните, команды выглядят вот так:
{
disp %ctpr3, $strlen; ipd 2
ldd,0,sm %dr14, [ _f32s,_lts0 $__eh_curr_region_tls@TLS_IE ], %dr35, mas=0x4
cmpedb,1,sm %dr3, 0x0, %pred0
ldd,2,sm %dr3, 0x0, %dr33
ldd,3,sm %dr14, [ _f32s,_lts2 $__curr_eh_stack_entry_tls@TLS_IE ], %dr36, mas=0x4
addd,4,sm 0x8, %dr7, %dr7
ldd,5 %dr1, %dr7, %dr34
}
В таком случае найми фрилансера делать за тебя домашку, а здесь такое не приветствуется.
Это не домашка, а попытка сделать бекенд производительнее... Да и вопрос я задал не в формате "я не понимаю, сделайте за меня", а по конкретной объективной вещи, касающейся языка. Если на каждый вопрос отвечать "смотри man/стандарт/справочник", то данная борда теряет смысл.
ЗАДАЁШЬ РЕАЛЬНО ИНТЕРЕСНЫЙ ВОПРОС
@
ТРЕД УМЕР, БОЛЬШЕ В НЕГО НИКТО НЕ ПИШЕТ
@
ТЯН ПРОСИТ ПОМОЧЬ С LABA2.CPP
@
ТРЕД МОМЕНТАЛЬНО УЛЕТАЕТ В БАМПЛИМИТ
> Array and function types may be written in a template declaration, but they are automatically replaced by pointer to object and pointer to function as appropriate.
Ну то есть будет у тебя в бинарнике лежать массив, а в типе только указатель на него.
Интересно, что там c++20 поменяет? Ведь можно будет передать literal class type - std::array например
Спасибо, анонче.
В чем проблема ебануть статик констэкспром std::array<T, N> тупо ссылаться на него?
И тип, и размер известны. Компилятор сможет на оптимизации хоть издрочиться.
Это по сути то же самое, что сейчас есть. В c++20 можно будет "по значению" array передать
Не, не. На чём щас пишется кoмплятoр С++20. На чём? АСМ? Серьёзнo скажи чтo там?
на С
А почему нет?
спасиб
А зачем в компиляторе %language_name%?
Буду благодарен, если вы объясните как.
> Не, не. На чём щас пишется кoмплятoр С++20. На чём? АСМ? Серьёзнo скажи чтo там?
"кoмплятoр С++20" такой вещи сейчас нет, язык вначале парсится/разбирается фронтендом - это практически отдельная программа (clang например) которая может быть написана хоть на JS, а потом уже в бакенд передается AST представление кода программы, а бакенд уже непосредственно строит по нему программу в кодах машины. В основном бакенды компиляторов пишут на Си, есть там вставки на ассемблере в платформозависимой части кода кудаж без них, но вообще я слышал мнение от компиляторщиков что Си уже маловато, где то и регекспы бы неплохо было заюзать и со строками по проще работать и все вот это вот.
Задания джунам дают такие, где нужно только написать/отладить код, ничего не изобретая. То есть не уровня "запили вот эту фичу" (а как именно придумай сам), а уровня "напиши вот такой-то класс/функцию" - с чётко описанным интерфейсом такого класса/функции, и с требованиями какое поведение от него требуется.
Ой бля это же пиздец, а нельзя как то сразу мидлом стать с ноля такскать или как то показав что ты инициативный чел?
Может быть и можно. Но скорее всего около года придется подрочиться джуном, просто чтобы поняли что ты дисциплинированный, не проебываешься. Ну и понять что контора вообще делает, какие особенности. Такой себе испытательный срок, но длящийся подольше.
По себе: вот я устроился в сентябре (это было много лет назад), зарплата была только на поддержание штанов. К следующему лету стали доверять принимать собственные решения, и сразу зарплату подняли вдвое. Тогда еще не было четких терминов джун/миддл, но это было примерно оно.
Ясно, ну честно говоря деньги как то и похуй вначале, лишь бы взяли просто (в чем есть большие сомнения).
Ты как вообще вкатывался с чем?
>одна инструкция процессора содержит несколько операций, которые должны выполняться параллельно
Не вижу противоречия пока.
И очень жаль.
Вообще штеуд породил такое злое говно с которым даже сам не смог справиться.
Вот эта штука должна была быть вообще главным процессором Intel, сам хуй 86 изначально пректировался как бюджетная хуйня из под коня для бомжей:
https://en.wikipedia.org/wiki/Intel_iAPX_432
Потом когда 432 не взлетел а хуйню из под коня заказал межделмаш и завертелось интел подохуел и решил срочно сынку вальнуть:
https://en.wikipedia.org/wiki/Intel_i860
Попытка 2:
https://en.wikipedia.org/wiki/Intel_i960
Попытку 3 героически зарубила амуде, в очередной раз оживив труб сзлого говна, приделав к нему 64 бита.
Жалко.
Как скажешь
Не помойка, а живая, развивающаяся архитектура, потому что успешная и работающая. Да, у какой нибудь некро-трупа вроде MIPS маны покрасивше и покороче. Но только лишь потому, что оно сдохло. У ARM сейчас точно такая же "помойка" как ты выразился, исключительно по причине того что он жив и развивается а не сдох как ваш MIPS и прочие Alpha.
Так если pointer = value_type★ логично же, что const pointer = const value_type★, а не value_type★ const. Но c++ думает иначе.
Сделать условный оператор, который будет возвращать ", " если элемент не последний, и "\n" если последний
примерно:
std::cout << x << икс_последний ? "\n" : ", "
Да какой ему там джойн, явно лабу делает. Пусть свой велик прямо инлайн пишет.
(а вообще это называется interscalate)
Я всегда intersperse называл
>boost::algorithm::join
Почему в std этой хуйни нету?
В том же самом питоне есть, и там вывод строк с разделителем делается очень легко и просто.
const -- это не какая-то хуйня, которая слева или справа присобачивается. Лично я предпочитаю писать
T const ★ const ptr = ...;
Тут получше видно, какой const что делает.
Потому что работа со строками (если это не парсинг) в сиподобных языках - зло. Да и есть std::accumulate, которым в два счёта делается с помощью лямбды.
template <class T>
void print (std::vector<T> &v)
{
____if (v.empty()) return;
____std::ostream_iterator<float> i(std::cout, ", ");
____std::cout << "[ ";
____std::copy(v.begin(), v.end(), i);
____std::cout << "\b\b ]\n";
}
=)
ostream_iterator<T> конечно же
>Почему в std этой хуйни нету?
Главный вопрос в плюсах. В питоне вон в стандартной либе есть гуй, три парсера xml, сокеты, две реализации процессов, http-сервер и дохуища остального.
Потому что её и так охуеешь имплементировать на 100МГц-64Кб вёдра.
Алсо складывается впечатление, что не хотят вводить всякие модные штуки с неявными аллокациями - все эти join, slice и т.п. Вон strdup в С приняли только после 30 лет копротивления.
> Не вижу противоречия пока.
Не ну просто я подумал ты cmpand считаешь за широкую команду типа две операции в одной.
На самом деле это одна операция и они стопкой упаковывааются в одну инструкцию (бандл) в фигурных скобках, потом вся эта гормошка в одном такте запускается. Но это не какой то супер новый подход.
Из необычного тут как бы шесть универсальных устройств каждое это такое типа ядро объединенное с другими через общий регистровый файл. Полноценным ядром мешает считать то что оно с другими синхронизировано и не может работать как тред, но так вообще во время компиляции на него можно спокойно планировать задачи каждый такт (такой мультитред внутри программы). Так же есть еще отдельный регистровый файл с однобитными булевыми значениями (и все результаты сравнения записываются тупо в предикат а не в обычный регистр, поэтому и столько команд на все случаи жизни пришлось делать) и можно любую операцию (риск-команду) внутри шк привязать к этому регистру типа если там true то эта операция исполнится а если нет то нет, чтоб переход не делать. Переход реализован в два этапа - там три конвеера, запасные есть в них можно код подгрузить заранее который возможно или точно будет вызван и когда надо перейти в него исполнить и вернуться обратно как бы в тот же конвеер откуда вызвали код или откуда переход был. Инструкцмии в конвеере можно в прямом смысле зацикливать а не просто переходом возвращаться и еще там дохрена чего.
Но понятно что эти как бы фичи это просто программная альтернатива тому что в таких процессорах как интел автоматически как то разрешается.
Так это не я был. Скорее всего ты перепутал меня с моим братишкой, мы единоутробные.
Пока попробовал только cocos2d-x. Завелось с полпинка, в целом вроде ок под виндой, но вангую траблы при конпеляции на iOS/Android ещё не успел всё настроить. Может есть более приятный стул который я не смог нагуглировать?
SDL/SFML тоже пробовал, там всё очень сыро
>★
СУКА БЛЯТЬ КАКАЯ ЖЕ ХУЙНЯ
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹⚹
bool ⚹pBool;
char ⛤q;
const void ☆☆ const p = 1 ⚛ 2;
[code]void [/code]
<pre>int </pre>
>char
[c]char [/c]
Потому что нужна не звезда (star), а asterisk.
Предлагаю это звезду взять за официальный символ указателя ИТТ. Ведь именно в указателе и вся дьявольская мощь и всё дьявольское коварство С++.
Начал читать книжку Страуструпа, он там о себе рассказывал написал что большую часть времени своей жизни он участвует в застольях с друзьяшками и поэтому вынужден заниматься спортом чтобы себя в форме держать лол.
Я почитал так что Страуструп о себе пишет, даже его авторский сайтик он такой социоактивный человек довольно. Интересно когда он успел столько всего разобрать в айти если он социоблядок с двумя детьми и женой.
маркер еблана вот такие вот вопросы задавать, а не продолжать раскуривать то, что не понятно
знал бы ты как я в своё время 2 дня пытался понять работу побитовых операций. пока не дошло что число в памяти представляется как 32-х значное двоичное число.
Сейчас то я уже понял с алгоритмической точки зрения. Сейчас буду думать как это записать. Просто интересно как у других с этим обстоят дела
а потом ещё указатели это целая эпоха была... хе-хе
все учатся по разному. Главное - результат.
Я имел в виду из фака там по ссылке книгу на планшете нереально читать
При чем тут мне. Есть либа, из нее наружу торчит extern пойнтер на глобалный класс. Ему логично быть умным. А моя задача его наебать и подсунуть ему как бы умный указатель, а на самом деле хитрый указатель, который притворяется умным. Потому что это объект на стеке. Это же охуенно, косяки обходить посредством наебок. Считаю, что если знаешь, что делаешь, то наебывать умные указатели это очень круто и черный пояс джедай лвл.
Короче почитал про синтаксис, какие-то примеры в консоли сделал, решил перейти к реальной задаче, там мне надо было делать HTTP-запросы неблокирующие, стал естественно искать библиотеку, библиотека разумеется не одна, рандомно выбрал easyhttpcpp от Sony ибо бренд знакомый, у меня их mp3 плеер с 2013 года и ни одного косяка. Короче стал прикручивать и охуел просто, там в зависимостях еще какая-то огромная библиотека ебиблиотека POCO, она вроде и собирается без ошибок (есть для VS проект), но видимо как-то не до конца; через VCPKG таки поставил ее, но там везде все делается через cMake и я так понял, что тут без шансов: так и не смог нормально прописать ей пути, чтобы она нашла эту ебучую либу. Работа с зависимостями в языке никакая. Разумеется, можно бросить, попробовать взять какую-нибудь header-only либу, но нет, я уже понял, что ваши плюсы - говно.
У меня кстати и раньше редко когда получалось собрать что-то из исходников: всегда не хватает каких-нибудь файлов включения, ты ищешь решение и вроде че-то находишь, начинается пердолинг, но итог чаще всего один и он не утешительный.
Видимо, язык хорош для разработки производительных низкоуровневых приложений с минимумом зависимостей, где критично потребление памяти, он явно не для того, чтобы быстро что-то написать и забыть.
Возьми qt, если хочешь не ебаться с мелочами, а выучить именно язык.
Идея не в хорошести именно qt, а в том, что в одной либе собрано всё что может понадобиться (в том числе и хттп), одну её поставил, и уже пишешь.
Может быть лучше внимательно доки прочитать, почему так сделано? Хотя глобальный shared_ptr это пиздец.
>перейти к реальной задаче, там мне надо было делать HTTP-запросы неблокирующие, стал естественно искать библиотеку
И чего вы все сразу лезете вот в эти HTTP/XML.
Закономерно хлебнул говна.
То есть зависимости поставить через vcpkg ты догадался, а саму либу нет? А доки к vcpkg прочитал? vcpkg integrate install и не нужно нигде никаких путей указывать
Нет, надо писать код самому. Но тут могут подсказать если возникли какие-то вопросы или ошибки.
>почитал про синтаксис
>решил перейти к реальной задаче
>делать HTTP-запросы неблокирующие
>ваши плюсы - говно
Эталонный неосилятор. Впрочем, что еще ожидать от спермобляди.
>от Sony ибо бренд знакомый, у меня их mp3 плеер с 2013 года и ни одного косяка
Лоллировал.
>То есть зависимости поставить через vcpkg ты догадался, а саму либу нет? А доки к vcpkg прочитал? vcpkg integrate install и не нужно нигде никаких путей указывать
Увы, авторы либы не считают нужным поддерживать пакет vcpkg, о чем они прямо заявляют. Ведь в вашем C++ же нет работы с зависимостями, вместо этого много разрозненных менеджеров пакетов, которыми никто не пользуется.
>>25748
>И чего вы все сразу лезете вот в эти HTTP/XML.
Потому что 99.999999% современных приложений сводятся к посылке сетевых запросов и обработке ответов, либо наоборот.
>>25801
Почему, когда у других все работает, а в твоих плюсах мрак какой-то, виноват кто угодно, но не никакущий паршивый подход к работе с зависимостями в твоем "божественном" языке? Почему, например, в Go (уверен, по твоему же мнению это стремный язык для индусов и школьников с одной извилиной) как правило сторонние пакеты подключаются одной строкой? Да и практически везде уже так.
>сторонние пакеты подключаются одной строкой?
Потому что это приводит к тому что плодится макачье говно, которое некоторые называют "экосистемой".
Стандартные либы - у тебя из коробки в С++,
Нестандартные, но хорошо проработанные и общепризнанные, легко ставятся менеджером пакетов системы вместе с зависимостями.
Нестандартные, написанные васяном левой ногой - подключай как хочешь и используй на свой страх и риск.
Считаю это наоборот плюсом.
Переменная, которая хранит в себе несколько переменных одного типа. Вот тебе база.
> Почему, например, в Go
нет аудио и гуя? В джаваскрипте вот есть низкоуровневое апи для работы с аудио, и 2D графика есть, 3D вот вот появится, про гуй просто молчу это самое базовое что там есть. Почему в твое Goвно этого всего не завезли, мм?
Ну короче там звёздочки после чар и перед скобкой.
double d = 0;
char c = '0';
if (!(std::cin >> d)) {
std::cin.clear();
std::cin >> c;
}
std::cout << "d " << d << " c " << c << "\n";
c = '0'; d = 0;
std::ofstream ofile("f");
ofile << 'a';
ofile.close();
std::ifstream ifile("f");
if (!(ifile >> d)) {
ifile.clear();
ifile >> c;
}
std::cout << "d " << d << " c " << c << "\n";
ifile.close();
>Почему, например, в Go (уверен, по твоему же мнению это стремный язык для индусов и школьников с одной извилиной) как правило сторонние пакеты подключаются одной строкой?
Это где подразумевается что гитхаб вечен и незыблем?
То есть если МС решит закрыть или ребрендировать/переименовать гитхаб, у гоблядей с захардкожеными репами в исходах начнется конец гомирка в режиме чернобыльской АЭС?
Интересно, что в остальных языках с менеджерами пакетов достаточно поменять адрес центрального репозитория в конфиге, если подобное случится. И только в го у тысяч хомячков будет гореть жопа от безысходности, ведь ссылка на гитхаб хардкодится почти в каждом файле.
По ситуации.
Нигде. На этапе компиляции sizeof об этом знает и усё
CONFIG += opencv
PATH = C:\Android\x64\mingw\lib
LIBS += $$PATH\libopencv_core430.dll.a
LIBS += $$PATH\libopencv_highgui430.dll.a
LIBS += $$PATH\libopencv_tracking430.dll.a
undefined reference to 'cv::VideoCapture::VideoCapture(int, int)'
Я разобрался. Я пытался передать указатель на вектор и при попытке обратится по индексу выходила ошибка. Я не знал что если написать vector<int>& a и vector<int>⛧ a это разные вещи
Кстати оцените.
https://pastebin.com/Edet7kVe
Стоит ли добавлять возможность написать произвольный компаратор, добавить шаблоны? Или и так сойдет в образовательных целях?
Вопрос из интереса. Сортировка из стандарта имеет ограничение на размер контейнера? Если нет, то как это сделали?
Не думаю, что в какой-либо стандартный контейнер можно засунуть больше чем 2^64-1 элементов (максималка size_t для 64битной компиляции, для 32хбитной соотвн-но 2^32-1).
Я в некоторых местах писал unsigned int. Хотел поменять на unsigned long long. Он же 64 бита
Я может где-то при перегрузке оператора обосрался и он переписывает текущие значения?
Разобрался, спасибо. Иногда бывает полезно тупо высказаться и спросить, а когда сообщение уже отправил - вдруг понимаешь, в чем проблема.
Аноняне, возник вопрос. Могу ли я научиться С++ до олимпиады на достаточно серьезном уровне, если буду заниматься им упорно и читать много литературы. (Не секундная мотивация, занимался до этого немного другим и тут узнал что это наиболее скоростной язык из возможных, хоть и сложный).
Если что олимпиада в начале осени
Если размер вектора size_type, то его и надо использовать.
Просто для декларативности.
64-битный тип посоёт на 32-битниках.
> unsigned int
Говнокод. Ты либо пишешь uint32_t, если тебе нужно именно четыре байта, либо size_t, если это просто индекс из стандартной библиотеки.
Напоминаю, size_t - это архитектурная ошибка стандартной библиотеки
Я вкатился в олимпиады на С в 13 лет за две недели без литературы (но с небольшим клубом таких же задротов). Правда потом еще два года не понимал тех кто писал на С++ и зачем он нужен, если все равно точно так же ебёшь байты и указатели.
Тащемта для вката литература таки нужна, но не по цпп, а по алгоритмам и структурам данных. А для решения задач достаточно умелого владения операторами if и while.
Для олимпиады язык учится за день. На олимпиадах обычно дрочат алгоритмы, от языка максимум нужны функции и ввод-вывод.
> Напоминаю, size_t - это архитектурная ошибка стандартной библиотеки
Почему ошибка? Из за отсутствия определенного в стандарте размера?
Где была ошибка?
В целом нихуя не понятно без кода. Вообще, в таких замерах может быть много нюансов: кэширование, выравнивание, контекст свитчине твой случай и т.д.
> А зачем этому типу знаковость? Размер отрицательным быть не может
(size_t(0) - 1) — это не -1
В прошлом треде скидывали ссылку и таймкоды вопросов на интервью с комитетом, посмотри
Ну, зачастую они используются для одной цели, хоть и работают совершенно по-разному.
Двачую адеквата.
Когда джуны или стажеры приходят к нам, они начинают выебываться подобной хуйней. Стоишь и думаешь "Ты че, дyрaк блять?"
GCC юзать будешь, хуя пососешь.
Поделом тем дебилам, которые вычитают индексы и оффсеты.
Да. Ебанная куча SIMD библиотек на все случаи жизни сделана не для долбоебов с двача.
Как нету, когда есть, ты что там делать собрался?
Просто пишешь код, а компилятор его оптимизирует в том числе и для SSE.
>Просто пишешь код, а компилятор его оптимизирует в том числе и для SSE.
Угу, только он как тот еж, пока не пнешь его всеми возможными прагмами и нон-портабл макросами про "тут SIMD пидор, По буквам - В Ы Р О В Н Е Н О, А Л И Ж Н 8, К О Н С Т"
Дрочи не языки, а матчасть и понимание. Язык это инструмент, его не нужно выдрачивать ради него самого, а только в той мере, в которой он нужен тебе для решения задачи.
Когда я еще учился в шкалке, я думал, что выучу С++ и стану прогромистом, и по итогу, на 1 курсе универа я уже прочитал почти всю литературу в шапке про stl, метапрограммирование на шб и про др. ахуительные практики, сейчас благополучно всё забыл,думаю лучше бы qt изучил, хоть польза была бы какая-то
This. Проще и быстрее интринсиками бахнуть, чем ждать что-то от компилятора.
Выравненность добавили в коробку в семнадцатых плюсах вроде
> читай у Мейерса "Эффективное использование С++" и "Наиболее эффективное использование С++". Потом "Эффективное использование STL"
> "effective modern c++" нужно читать только когда начнешь хорошо разбираться в C++11
Это то что мне нужно, если я не знаю разницы между void f(int★ x) и void f(int& x)?
Берут как на удаленочку, так и в офис в нск.
А нахера тогда вообще класс? Можно все методы сделать функциями, опционально обернуть в namespace.
> Это то что мне нужно, если я не знаю разницы между void f(int★ x) и void f(int& x)?
Достаточно знать, что первое не надо использовать в коде c++
Я не знаю этого
Хз, взяли в тостеры в этот отдел без опыта. Не считая полгода формошлепства на жсе. У них прям пиздец горит, новые проекты запускают, можешь попробовать отклик кинуть.
Охуеть, именно эту вакансию неделю назад зачем-то добавил в избранные, ещё подумал: "блин, клёво у них походу", но я уже и так работаю..
>инсайдерская
дашь телегу?
Всмысле?
C++ для чайников, без шуток. Я даже помню там как раз об этом был пример. Джефф Кент автор.
Ок. Спасибо. А что после него?
ты тоже самое в кутекреаторе можешь делать?
>std::cout << str << "\n";
строка отображает мусор в конце? При этом строке было выделено ровно столько байтов, сколько она содержит полезной информации. От куда лишнее дерьмо в конце?
п.с. Я знаю про символ конца строки, но я не понимаю почему строка содержит больше, чем ей выделено.
char *str = new [3];
str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
std::cout << str << "\n";
> abc1g!
Эх, блядь, почему я пишу в банке на sql. Попробовал бы на эту вакансию вкатиться.
Подумой как работает оператор вывода сишной строки в поток. Можешь даже свой написать. Поймешь.
Чел, хуйню пишешь. В си нет операторов ввода-вывода. Это первое. Второе, с такими советами можешь сразу идти на хуй.
Компилятор автоматом доставит нуль в конец. Так что тут проблем в другом.
>п.с. Я знаю про символ конца строки, но я не понимаю почему строка содержит больше, чем ей выделено.
Не содержит, функция печати печатает символы по очереди, пока не дойдёт до \0, она уже давно вышла за пределы строки и пошла куда-то дальше по памяти.
Пол стал вакансии в моём ДС-3 есть вакансии для студентов связанные с подобной деятельностью. Стоит пытаться вкатится, если знания линала, ангема и вычей так себе?
> Компилятор автоматом доставит нуль в конец.
И по какому индексу компилятор должен, по твоим словам, вставить нуль?
Выводится все, до нуль терминатора.
Т.к. у тебя нультерминатора нет - выводится мусор хранящийся в памяти за твоей выделенной, пока там не найдется нуль терминатор. Ехал UB через UB.
> т.к. в изначальном посте код на плюсах
И? Нахуй ты это высрал вообще?
>Я не тот анон
>это не я говорю тебе это не я сру в штаны
У меня первая была "borland c++ 5.0 за 21 день".
В общем, не стесняйся и первую книгу спокойно бери "для чайников", "за 21 день" и тому подобные. Вот такую осилишь, потом уже берись за Страуструпа.
Блядь, какой же ты тупой.
Ты выделил 3 символа в строке - столько памяти тебе доступно для модифицирования.
cout(и printf тоже, к твоему сведению) выводит строку до первого '\0' символа, ничего не зная о ее размере.
Вызови для своей строки сишный же strlen и завали ебало.
Да иди ты на хуй, омежка озлобленная. Поссал тебе на голову, чмо.
>>27930
Да знаю я про это. Я не мог логически сопоставить тезис: выделение памяти для хранения. Ведь, если существует понятие такое, логически, оно подразумевает - выделять и хранить столько, сколько было указано компилятору. Но я уже понял, что это такая особенность работы оператора вывода.
Нет, это ты никак не въедешь, а не оператор ввода-вывода работает не так.
Почитай, как хранится в памяти строка, что такое указатель и как происходит работа с массивами, а потом уже огрызайся.
Эм, учебник по информатике?.. Это же байты, самая основная вещь в компьютере.
У них разная сложность для разных операций. Например, лист лучше юзать для добавления в начало или конец или последовательного прохода итератором, а если нужны частые обращения по произволтным индексам, но размер изменяется редко, лучше брать вектор.
Чтобы не изобретать велосипед.
Брукшир "информатика и ВТ"
Иногда нужно, чтобы итераторы не инвалидировались. Потребовалось 1 раз за всю мою карьеру, но этот 1 раз был.
Есть какие-нибудь проблемы именно по части содержания?
Норм, но мало тем затрагивается. Лучше сразу с Липпмана & Лажойе(англ версии) начинай, чтобы несколько раз одно и тоже не перечитывать.
Только в полнолуние
Перекот https://2ch.hk/pr/res/1728315.html (М)
Перекот https://2ch.hk/pr/res/1728315.html (М)
Перекот https://2ch.hk/pr/res/1728315.html (М)
Перекот https://2ch.hk/pr/res/1728315.html (М)
Да.
Это копия, сохраненная 29 ноября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.