Это копия, сохраненная 5 августа 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2225172 (OP)
Недавние аблюдения:
Под Windows в консоле вывод в stderr более чем в 10 раз медленнее, чем в stdout, если перенаправить поток вывода в файл. Но это не точно.
Функция ExitThread может вас удивить и обескуражить. Если вы создавали на стеке объект, а в конце вызвали ExitThread, то деструктор объекта не вызывается. Т.е. если вы были уверены что деструктор сработает, когда объект теряет область видимости, то в случае ExitThread этого не произойдёт.
Охуенно, да?
>stderr
Вероятно он флашит после каждой записи.
>Если вы создавали на стеке объект, а в конце вызвали ExitThread, то деструктор объекта не вызывается.
Если выдернуть компьютер из розетки, то деструктор тоже не вызывается.
Никогда
printf/puts никто не запрещал, а
> std::cout << "хуйпизда" << std:endl
это самое всратое, уродливое и дебильное, что только можно было придумать. Кстати тоже из той же серии "запихни с ноги в классы то, что по здравому смыслу функция".
Когда юзаешь метод из класса без создания объекта этого класса это как-то иначе называется. Статический метод, что-ли.
То, что ты не создавал этот объект сам, не делает его не-объектом. Это обычный объект, у которого ты вызываешь нестатический метод operator<<()
Строки и векторА же, увы и ах. Впрочем, процедурные кресты вроде бы ещё законны. Золотая середина.
Одна история охуительнее другой. Вот тут-то объект зачем? Я просто функцию дёргаю. Мне не надо 100500 разных выводов в один и тот же stdout.
Ты не просто функцию дёргаешь.
У всего ввода-вывода одинаковый интерфейс стримов, с которыми можно работать вне зависимости от того, куда реально происходит вывод, а уже внутри объекта конкретный дескриптор. Этот объект потом можно передать в другие функции, которым без разницы, куда выводятся данные, в консоль, файл или вообще по сети отрправляются, они будут юзать объект с одним и тем же интерфейсом.
Смысл что-то объяснять борщехлёбам? Они до последнего будут стоять на своём во имя Даннинга-Крюгера
Ну не все же сраться C/C++ vs Rust vs Go
Соглы
Ты на printf свой анус-то не раскрывай. Это гениальная функция, которая смотрится гармонично абсолютно везде. И ассебмлерный код с её использование всяко красивее кода, генерируемого <<.
За puts такого не скажу - уж больно она проста и примитивна. Нет в ней изюминки.
Самое плохое, что есть в С++, это пидросы, типа тебя. Которые придумали себе мифологию и дрочат на неё. А по сути - используют С++ как интепретатор, реализуя максимально неоптимальный код. А зачастую и не знающие базовых алгоритмов. При том, что язык С++ всё же охуенный. Но в умелых руках.
Нет, такие как ты - которые используют инструмент через жопу (ибо даже инструкцию прочесть не осилили), а потом у них это нинужна, это лишнее, это говно и тд
В printf происходит ненужное копирование, а ещё нужно указывать типы переменных - это пережиток из C. В https://fmt.dev, который уже скоро будет std::format всё реализовано куда лучше. std::cout с отключенной синхронизацией с сишным вводом-выводом быстрее printf в среднем в полтора раза. И сейчас бы оценивать красоту ассемблерного кода, лул
> это нинужна, это лишнее, это говно
Просто когда не жуёшь это говно за зарплату ежедневно, то нет биаса в эту сторону и можешь трезво видеть откровенную хуету.
Ну давай признаем, в крестах "по умолчанию" во многих местах чудовищно избыточный синтаксис. Машина могла бы понять всё абсолютно то же самое без такого количества мусорного кода. Объекты вбиваются с ноги просто как религия какая-то, где в них никакого смысла.
this
а вот это
> std::endl
вообще воплощение анекдота про хеллоу-ворлд на крестах. Просто блядь два символа "\n" в класс запихнуть это уже даже не шиза, это рак мозга под наркотиками.
В пердоликсе заменил эндл на "\n" - схавало. printf в винде "\n" и так хавает корректно, прекрасно помню. Что там менять-то нужно?
И про переносимость крестов лучше не надо, всё равно любой мало-мальски код для переносимости надо обмазывать миллионом ифов. Разумеется, пока пишешь под голую соснольку. С гуём проще две софтины написать под две платформы или застрелиться.
На куче других языков получают больше или сравнимо. Впрочем, те языки тоже говно. Кресты прикольные, пока пишешь по сути на ссы-с-удобствами
> почему индустрия языков и компиляторов застряла в 70-90х годах
> За наш век не появилось ничего нового, ни одной новой философии и течения. Все пердит и свистит на наработках древних.
Потому что этот фундамент идеален и продуман на сто лет вперёд. Проблема в говнореализациях. Каждый раз, когда пилят новое, что-то упрощают или не учитывают, потом это начинает вызывать проблемы, для решения которых впиливают ad hoc костыли, а потом поздно что-то переделывать из-за легаси.
>Где?
Задумайся. Оно составляет строку, которую нужно вывести, из строки формата и вараргов в рантайме, а потом уже копирует её в буфер
>Чем ты заменишь snprintf?
sprintf и snprintf заменю на format_to и format_to_n
>>297893
>>std::endl
>вообще воплощение анекдота про хеллоу-ворлд на крестах. Просто блядь два символа "\n" в класс запихнуть это уже даже не шиза, это рак мозга под наркотиками.
std::endl просто неудачно назван. Почитай документацию, там как раз рекомендуется использовать '\n' вместо std::endl почти во всех случаях. Потому что std::endl (о ужас) ещё и флашит буфер.
>>297952
Никому это не нужно, блин. Common lisp как был в 90е самым продвинутым языком, так и по сей день и остался.
>Оно составляет строку, которую нужно вывести, из строки формата и вараргов в рантайме, а потом уже копирует её в буфер
Я не уверен в этом. Надо смотреть реализацию. Не вижу ни одной причины, зачем нужно дополнительное копирование.
>sprintf и snprintf заменю на format_to и format_to_n
Хмм.
C++20 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++20 replaced the prior version of the C++ standard, called C++17. The standard was technically finalized by WG21 at the meeting in Prague in February 2020, approved on 4 September 2020, and published in December 2020.
Неговно есть, но там тормозной интерпретатор. Потому что зачем сложный компилятор писать, если и так для практических задач современные компы будут эту хуету ворочать с приемлемой скоростью?
Не будут.
>Я не уверен в этом. Надо смотреть реализацию. Не вижу ни одной причины, зачем нужно дополнительное копирование.
Да, возможно я ошибаюсь. Надо смотреть
>>sprintf и snprintf заменю на format_to и format_to_n
>Хмм.
Отсюда, пока https://fmt.dev/
Рубин хотя бы. Близкая к идеальной реализация ООП для людей, няшный синтаксис, настоящий VHLL. Но тормозной как пиздец. А прикинь оно нормально компилироваться будет и на нём, допустим, можно будет писать полноценно игоры. Кто после этого будет ебаться с крестами?
>Под Windows в консоле вывод в stderr более чем в 10 раз медленнее, чем в stdout, если перенаправить поток вывода в файл. Но это не точно.
ну это и естественно, потому что буфер должен быть скинут в первом случае, потому что вообще то это поток ошибок
понимаешь?
все логично
самое плохое в с++ это то что это эзотерический вымирающий язык на котором не найти работы
Факт. База.
Да.
Если тебе надо, чтобы в конце файла был перевод строки, то нужен, иначе не нужен. Флаш здесь не при чём.
Какой ты скучный
Приколы какие-то, быстро находится всё
Нет, просто очередной нескучный синтаксис вроде 7["mamku ebal"]
Так компилятор же сможет тогда по рукам ударить, если попытается значение его поменять
Всё равно всё схлопнется до указателей. Хоть char argv пиши, всё равно это внутри массив из массивов char. Это всё украшательства и хеллоуворлдщина.
Да и не только он.
За вот этот "ООП ради ООП" я бы вешал за яйца. Это худшее явление в кодинге за всю историю.
Никогда не делай классы там, где тебе нужны обычные плоские процедуры. Вообще их никогда не делай там, где алгоритм вот прям очевидно их не "просит" - гуй, логика игр, какие-то сильно структурированные данные однотипные... Можно конечно запилить класс просто как коллекцию своих наработок, но это откровенное украшательство и перфекционизм.
Если мне нужно будет ФП то я пойду и напишу говнокод на тайпскрипте. Дай хотя бы несколько объективныхминусов того, чтобы писать всё в виде классов.
Ну да, можно ещё всё в мейне высирать, городить неймспейсы
или если уж совсем жить скучно
#define r(R) R"()"
/[/#include //<stdio.h>
#include<math.h>/!![crc=0f527cd2]/
float I,bu,k,i,F,u,U,K,O;char o[5200];int
#define R(U) (sizeof('U')==1||sizeof(U"1"[0])==1)
h=0,t=-1,m=80,n=26,d,g,p=0,q=0,v=0,y=112,x=40; float
N(float/x/_){g=1<<30;d=-~d1103515245&--g;return d_
/g;}void//w(int//_){if(t<0){for(g=0;g<5200;o[g++ ]=
0);for(;g;o[g+79]=10)g-=80;for(t=37;g<62;o[80+g++]=32) ;
}if(m&&o[h80+m-1]==10){for(g=0;g<79;o[t80+g++]=0){}o[t
++80+g]=10;t%=64;n+=2;I=N(70)+5;if(n>30&&(I-x)(I-x)+n
n>1600&&R()){O=0;F=(x=0x1!=sizeof(' '))?k=1+N(2),i=12-k+N(
8),N(4):(k=17+N(5),i=0,r()[0]?O=.1: 0);for(u=U=-.05;u<32;
U=k+i+i.5sin((u+=.05)+F))for( K=0 ;K< U;K+=.1)if((bu=K
sin(u/5),g=I+cos( u/5) K)>=0&&g < 79 )o[g+(int)(t+44+
bu(.5-(bu>0?3O: O) ) )%64 80 ] =32;x=02// /2
-1;n=O+x?n=I+(x?0 :N (k)- k /2),g=(t+42 )%
64,m=-~g%64,x?g=m =-~ m%64:0 ,n>5?o[g80 +
n-3]=o[m80+n-3]= 0: 0 ,n <75?o[g80+n
+2]=o[m80+n+2]=0 :0:0; x=I;}h=-~h%64
;m=0;}putchar((g=o [h 80+m++])?g:_);
if(g){w(_);}}void W (const char_
){for(;_;w(_++));} int main(int a
,char_){while(a--)d +=_[a ]-(char)0;W( \
"#include<stdio.h>typed" "e" "f\40int\40O;v"
"oid o(O _){putchar(_);}O" "\40main(){O" ""
"_[512],p=_,d,b,q;for(b=0;b" "++<512;p=_+q)_[q" \
"=(p-_+1)9%512]=(O)p;") ; for(;(g= getchar())-EOF;p=
q){q=p;for(v=512;p-q-g&&q-p- g; v--)q=-~q9%512
;W("o(");if(p>q)w(y),w(45);w( 40);w(y^=20
);w(075);for(a=0;a<v;a++)w(42); for(W("(O"
);a--;w(42)){}w(41);w(y^024);w( 41);if(p<=q)w(
45),w(y^20);W(");");}for(a=7;a-6 ;W(a<6?"{;}":""
))for(a =0;a <6 && !o[h80+m +a];a++){}W("r"
"etu" /J / "rn+0;}\n" );return
/ "#*/0 ;}
Ну давай, съешь ещё этих мягких указателей
Ну да, можно ещё всё в мейне высирать, городить неймспейсы
или если уж совсем жить скучно
#define r(R) R"()"
/[/#include //<stdio.h>
#include<math.h>/!![crc=0f527cd2]/
float I,bu,k,i,F,u,U,K,O;char o[5200];int
#define R(U) (sizeof('U')==1||sizeof(U"1"[0])==1)
h=0,t=-1,m=80,n=26,d,g,p=0,q=0,v=0,y=112,x=40; float
N(float/x/_){g=1<<30;d=-~d1103515245&--g;return d_
/g;}void//w(int//_){if(t<0){for(g=0;g<5200;o[g++ ]=
0);for(;g;o[g+79]=10)g-=80;for(t=37;g<62;o[80+g++]=32) ;
}if(m&&o[h80+m-1]==10){for(g=0;g<79;o[t80+g++]=0){}o[t
++80+g]=10;t%=64;n+=2;I=N(70)+5;if(n>30&&(I-x)(I-x)+n
n>1600&&R()){O=0;F=(x=0x1!=sizeof(' '))?k=1+N(2),i=12-k+N(
8),N(4):(k=17+N(5),i=0,r()[0]?O=.1: 0);for(u=U=-.05;u<32;
U=k+i+i.5sin((u+=.05)+F))for( K=0 ;K< U;K+=.1)if((bu=K
sin(u/5),g=I+cos( u/5) K)>=0&&g < 79 )o[g+(int)(t+44+
bu(.5-(bu>0?3O: O) ) )%64 80 ] =32;x=02// /2
-1;n=O+x?n=I+(x?0 :N (k)- k /2),g=(t+42 )%
64,m=-~g%64,x?g=m =-~ m%64:0 ,n>5?o[g80 +
n-3]=o[m80+n-3]= 0: 0 ,n <75?o[g80+n
+2]=o[m80+n+2]=0 :0:0; x=I;}h=-~h%64
;m=0;}putchar((g=o [h 80+m++])?g:_);
if(g){w(_);}}void W (const char_
){for(;_;w(_++));} int main(int a
,char_){while(a--)d +=_[a ]-(char)0;W( \
"#include<stdio.h>typed" "e" "f\40int\40O;v"
"oid o(O _){putchar(_);}O" "\40main(){O" ""
"_[512],p=_,d,b,q;for(b=0;b" "++<512;p=_+q)_[q" \
"=(p-_+1)9%512]=(O)p;") ; for(;(g= getchar())-EOF;p=
q){q=p;for(v=512;p-q-g&&q-p- g; v--)q=-~q9%512
;W("o(");if(p>q)w(y),w(45);w( 40);w(y^=20
);w(075);for(a=0;a<v;a++)w(42); for(W("(O"
);a--;w(42)){}w(41);w(y^024);w( 41);if(p<=q)w(
45),w(y^20);W(");");}for(a=7;a-6 ;W(a<6?"{;}":""
))for(a =0;a <6 && !o[h80+m +a];a++){}W("r"
"etu" /J / "rn+0;}\n" );return
/ "#*/0 ;}
Ну давай, съешь ещё этих мягких указателей
Да в пизду, за этой помойкой я ещё косяки не правил.
Вангую IOCCC
Мегабайты мусорного кода - объявления и инициализации занимают больше места, чем сам алгоритм. Усложнение себе же очевидных простых вещей. Сильно больше печатать, хуже читаемость. У си-подобных синтаксис и так не айс, а этим ты его ухудшишь ещё сильнее. По скорости разницы нет, классы как таковые "ничего не жрут".
У меня в ноде тоже тоже мегабайты мусорного кода, но кабан мне за это неплохо так платит и не жалуется. И это явно не повод отказываться от основной концепции языка и хуярить НЁХ с тоннами не связанных между собой функций, auto и прочим пиздецом.
В этом примере - да.
В declaration отделённой от definition - top level const не имеет эффекта
Обычно дергается инфа с датчиков. Потом на основе них высчитывается примерная нагрузка на систему. Под винду, под линукс так. Под мобильные платформы проще, так как там есть готовые апи для вычисления энергопотребления. Если речь идет о некоей промышленной установке, то возможно забрать инфу напрямую с ибп либо спец контроллера прямо на кабеле, тогда будет не приблизительная оценка, а точная.
фп в крестах нужен был для метапрограммирования в 98 стандарте, потому что иначе и не сделать было, ну а метапрограммирование нужно было для кодогенерации собственно, хотя все равно на практике чаще всего использовали препроцессирование, комбинировали встроенный препроцессор с внешней кодогенерацией на скриптовых языках
в новых стандартах фп для метапрограммирования не нужен, потому что в язык добавлены средства для императивного программирования (циклы, условные конструкции, константы) в компайл-тайм
так же говорят что правильное программирование с использованием stl предполагает функциональный подход, но это не совсем так, речь скорее идет о принципе функциональной композиции, но с оговорками, проще говорить что правильное программирование на stl - это использование композиционного подхода, хотя опять же в новых стандартах добавили лямбды и прочие штуки, которые сделали ненужным bind и все семейство родственных ему функций, с учетом того что лямбды в крестах всего лишь синтаксический сахар, это сделало современное программирование на stl опять же императивным во многом
по итогу фп в современном с++ не нужен
фп это удел энтузиастов что хотят развлекаться ретро-программированием на крестах стандарта 98 года, занимаясь метапрограммированием на компайл тайм либо используя приемы фукнциональной композиции используя stl
хотя и конце 90х начале нулевых почти никто из практикующих программистов этим не занимался, кроме нескольких придурков вроде меня
сумбурно написал, но мне похуй
кто знает тот и так знает
а кто не знает тот считает это бредом
Я объявляю класс A и класс B. У них есть такие методы: A::Example(B bvar); и B::Example(A avar); Когда A объявлен до объявления B, то ошибка что B ещё не объявлен, когда сначала B объявляю, то ругается уже что A не объявлен.
Что с этим можно сделать?
А как такое провернуть со структурами?
Когда я пишу например struct vec; а потом описываю его позже, то ругается на переопределение
Ты скачал один файл cereal.hpp или всю папку include? Я только что скачал папку, положил рядом исходник, собрал через g++ -Iinclude sample.cpp -o sample, всё работает.
В крестах структура это тот же класс, не должно быть проблем.
И кстати вот в такие методы надо передавать указатели или ссылки, т.к. при форвард декларации не известен размер объекта, в отличие от указателя на него.
string& если нужно изменять передаваемую строку
const string& если надо работать со строкой которую функция или метод не должен менять
string если нужна копия строки в функции или методе
string&& если нужно передать собственно владение (но по сути это частный случай, способ оптимизации)
это не рассматривая темплейтов функций или методов и не рассматривая универсальных ссылок
"как лучше" зависит от того что тебе собственно надо.. нет универсального ответа "как лучше", зависит от ситуации
ах, да, еще ведь есть альтернативы
возможно тебе нужно работать не со строками, а с потоками ввода-вывода, зачастую в коде встречаю эту проблему, когда с точки зрения красивого дизайна лучше передать буфер, а не строку
ну или, к примеру, в новом стандарте теперь есть замечательный std::string_view, его тоже не стоит игнорировать, прекрасное дополнение в библиотеку языка
а, вот еще вспомнил
зачастую строкой туда-сюда гоняют то что по сути в коде является отдельной сущьностью, и в принципе, раз кресты ооп язык должны бы быть завернуты в класс
простейший пример - когда некий строковый идентификатор чего-либо в коде гоняют обычной строкой, когда вообще то нужно создать было класс идентификатора
на самом деле интересный вопрос, на который, к примеру лично я не смогу слету ответить, тут нужны более опытные люди
можно предположить, что момент уничтожения временного объекта определяется реализацией конкретного компилятора, и стандартом неопределен
хотя для конкретного компилятора всегда можно проверить, написав небольшой проверочный код, добавив в тестовый класс логирование в деструктор, ну либо брекпойнт
Вроде бы ссылка продлевает время жизни, но я решил на всякий случай уточнить. Если я не ошибаюсь, то объект удалится когда функция завершится.
С таким подходом имхо выгоднее гей-проститутом работать, чем кодить. Ну или всякий кринж на камеру творить типа поедания говна.
Ты просто не в курсе что за бугром творится на рынке айти. С++ разрабы получают в среднем в полтора раза выше веб-макак. Спрос бешеный, а вот предложение не очень, ибо большинство нормисов имеют IQ < 100 и пытаются вкатиться в веб-говно толпами, что и порождает увеличение зарплат вне "горячих" секторов. Америка, почти вся западная Европа, Израиль - там очень востребованы байтослесари из-за огромного количетва компаний, которым нужны разрабы встроенных систем, разный там хайлоуд в финтехе, автономные машины и т.п.
мимо анон из забугра, получающий 150 тыс. $ в год за "мертвый" язык, не будучи даже синьором
Пишу софт для автономных машин. Помимо всяких мелочей, основной проект на данный момент - кастомная RTOS, написанная полностью на плюсах, в данный момент насчитывающая 2 миллиона LoC ясень пень пишу её не в одиночку
О, анонас, ты мне и нужен.
Как вкатывался, что изучал, как докатился до такого?
Я пока что студент старших курсов и мне интересна системная разработка, а в частности языки и компиляторы. Но если быть реалистом, то по такому направлению без PhD работу найти почти невозможно, поэтому придется заниматься чем-то другим я и не против. Во что из системной разработки можно вкатиться, чтобы найти работу и хотя бы хуй без соли не доедать? Какую литературу почитать(Кирпичи Танненбаума и Праты уже прочитал)?
Разберись с указателями. При вставке в мапу сам указатель копируется по значению, а вот то на что они (уже оба указывают) остаётся одно.
https://stackoverflow.com/a/12248783
В обычную не могут, в unordered может случиться рехэш и итераторы инвалидируются (указатели тоже).
Там же все написано. Правда ответ не совсем верный, 3 и 4 не скомпилируются с флагами по умолчанию, и в 4 будет копиэлизия, вызовется только обычный конструктор.
Так, ну допустим я немного раскурился. А в чём разница создавать инстанс на куче или стеке кроме того что во втором случае не нужно его явно удалять?
Если хочешь денег быстро - учи JS и Vue/React или Java, или C# и .NET.
Вакансий на С++ меньше, но они есть и никуда не пропадут. В Америке, Западной Европе работы больше, чем в СНГ - но там нужен английский.
Вообще, смотри хедхантер и сравнивай вакансии по регионам.
>>матеша
Матеша лишней не будет.
>>вышка
На айтишных специальностях(Прикладная информатика, информатика и вычислительные сети и тд.) учат плюсы с первого семестра в течение двух лет.
За эти два года студенты проходят весь базовый курс по плюсам. Это синтаксис, алгоритмы(могут быть на паскале, но не суть), ООП, STL. Далеко в ядро не залезают, но для джуна инфы достаточно. Например лекции в МФТИ : https://youtube.com/playlist?list=PLmSYEYYGhnBu1fFtnzKx-pycYbJnb0rOl
Качество преподавания и усвоение тем зависит от университета и студентов. В региональных вузах, где проходной балл низкий - результат обучения не очень хороший. В топ вузах(МФТИ, МГУ, СПБГУ и тд ) дела обстоят по другому.
Пишу по своей группе. Почти все списывали лабы.
Кто списывал - ничего не изучили. Кто учил - к последнему курсу всё позабыли.
Причины этому: в первом случае - отсутствие обучения, во втором нагрузка учебного плана(помимо плюсов было много других предметов, например матан, история, информатика, базы данных, веб программирование и тд.)
В итоге их всех в группе, плюсами интересуюсь только я, а нас 20 человек. Один из группы работает на JS и Vue. Из всего потока всего несколько человек работает в IT, их можно по пальцам пересчитать.
Но вуз не будет лишним. Особенно при поиске работы за границей. Только вопрос себе задай, надо ли тебе на это обменять 4 года, со всеми вытекающими.
Как тебе пояса с курсеры?
Во время прохождения белого пояса, у меня возникла мысль, что некоторым задачам надо побольше вводных данных и объяснения.
Например первая задача с квадратным уравнением. Там всё отлично, есть дополнительное объяснения в виде алгоритма.
В дальнейших задачах я такого больше не видел. Я остановился на задаче про очередь в векторах. Кстати, в решение этой задачи используются методы, про которые в видео не говорили. Например поиск определенного значения в векторе.
Я так понял, что пояса именно для тех, кто уже более менее разбирается в плюсах.
Кстати, с такой же плохой постановкой задач, как в поясе, заметил и на курсе по плюсам от Яндекса на степике.
Яндекс следит за курсами и обновляет их?
Фифти-фифти что говорится. На скорости х1.75 пойдёт. Большую часть задач я откровенно говоря скипал ибо много сложнее вещи решал в js`е. Про то, что прямо надо разбираться в плюсах - я бы не сказал. Всё очень даже недурно объясняется. Но я дропнул, не хочу заканчивать. Не люблю все эти курсы, видосики, я намного лучше информацию усваиваю когда читаю текст. Да и за те 10 минут которые идёт один видос я порой несколько тредов стака успеваю прошерстить.
>свои сигналы
Вот так. (пик 1)
>event
пик 2 Чтобы переопределять действия при ивентах в классах-наследниках
>eventFilter
пик 3 Чтобы переопределять действия при ивентах в других объектах действиями из класса с фильтром
Документация к Qt классная, читай её, а не книжки
https://doc.qt.io/qt-5/signalsandslots.html
https://doc.qt.io/qt-5/qobject.html
Спасибо, но уже нашел, по запросам "qt контейнеры" выдавало контейнеры для данных, а не компонентов.
Стек маленький, порядка 2мб для x64 и может переполниться довольно быстро (хотя зависит от конкретной OS и настроек компилятора). Ещё у каждого потока свой локальный стек. По сути куча это основная память программы управляемая программистом, а стек - вспомогательная автоматическая.
По задачам.
array имеет константный размер, vector изменяемый. От этого и отталкивайся.
Спасибо, мистер адекват
Выделение памяти через new медленное - среде выполнения надо найти подходящий по размерам блок памяти (которая фрагментирована). На стеке - считай мгновенно - надо увеличить адрес вершины стека на размер объекта. В итоге, если твои данные крупных размеров и с долгим сроком жизни, то new. Для всякой локальной мелочи - стек.
Этого не достаточно, чтобы принять решение. Если array так ограничен, а vector универсален, напрашивается вывод, что надо всегда юзать vector и не задумываться.
array это обёртка (сахар) вокруг сишного массива: T array[Size], чтобы его можно было использовать как и другие std контейнеры.
Чем сишный массив лучше? Например тем, что он выделяется на стеке, в то время, как vector требует хотя бы одного вызова new.
>Например тем, что он выделяется на стеке
Только если он объявлен в теле функции и без static.
Ещё vector должен хранить в себе переменную capacity размером size_t (для x64 8 байт), в то время как для array она static. Если массив маленький, то получается неплохая экономия.
Так внутренний буфер array в любом случае не требует вызова new.
Всего лишь 4 часа? Хуя ты быстрый, небось сеньор-помидор. Я один раз несколько дней возился.
Да блять, я почти всё это время искал блять как подключить header-only либы.
>не интересно
кстати по этой же причине терпеть не могу когда для языка есть один централизованный, анально привязанный пакетный менеджер. Плюсы + их инфраструктура это реально лучшее что есть на данный момент в этой грязной кабанчико-пориджевой индустрии
>один централизованный пакетный менеджер
npm/yarn
Извините
>Плюсы это реально лучшее что есть на данный момент
Двачую
Stream insertion and extraction operators are often declared as non-member friends:
во-первых там про классы шла речь
во-вторых можно(а может даже нужно) сделать геттеры и все
в-третьих операторы это другое, там костыль через костыле
битовый сдвиг для вывода в iostream'ы, обожаю, лучше только деление для объединения времени и файлов
иногда выражения по типу ClassName() принимаются за вызов/объявление функции. {} эту проблему решает т.к это явный запрос на вызов конструктора
инициализация через равно аналогична вызову конструктора
ClassName a = {1,2,3}
это
ClassName a{1,2,3}
Спасибо. А для скалярных переменных разница между допустим int a = 5 и int a{5} есть? Ну и вообще аффектит ли это как-будь производительность или ещё что-нибудь?
нет, влияет только на то что int a{1} это детектор, по типу
auto main()->int
насчет производительности : в таких случаях иди на godbolt и проверяй
в чем проблема? Вот сеттеры это да, в большинстве случаев ересь
Ебал в рот ваши мантры про " инпуксуляция это скрытие", пишу так что бы было удобно пользоваться кодом
>расползутся по всему коду
а мог бы и полоснуть отречением от експешонов и следовательно от raii
Это правильно, любой файл, который юзает определения из инклудов, должен включать все эти инклуды, даже если ты в данный момент уверен на 100%, что нужнвй инклуд косвенно включится. Иначе, если это когда-нибудь изменится, начнётся анальная ебля с определением, куда и что включать. Лучше об этом не задумываться и всегда включать всё нужное.
ну да
Кресты прогнулись под другие языки. Никакой самобытности, скоро и сборку мусора запилят.
Это не сахарок, они совсем иначе работают.
Так умные указатели добавили ещё когда мы в школу ходили.
я же сказал - иди доклады смотри. Я в них еще не погружался т.к на данном этапе нулевая поддержка
>Я в них еще не погружался
>нулевая поддержка
Ну вот, а уже советуешь. Приходи через 2-3 стандарта.
я их советую потому что докладики посмотрел. Что ты такой приставучий....
Да больно ты мне нужен. Я пока тут с тобой общался 2 новых hpp создал и мне норм.
>Я микросхему в руках держал!
Я тоже и что?
>так что же это?
Дивные создания из миров получше нашего.
Омг в дефолтной документации по кутям не нашёл сигналы и слоты?
Ну кутя действительно весч. Этакий дельфи под линукс с нормальным компилятором.
Вектор удобнее, аррай быстрее.
Кстати, это неебовое преимущество крестов перед VHLL. У тебя хотя бы есть опция взять примитивное быстрое решение, там, где его хватает. В рубях и пиздоне по сути только "вектора".
То есть ты хочешь сказать, что события тоже самое что и слоты и сигналы? А зачем мне тогда нужны события если я также могу соединить сигналами и слотами. Я думал события это такое глобальное действие, которое рассылается всем кто его ждет, и не надо указывать какому объекту отправить событие. а sendpos() только конкретному объекту отправляет сигнал-событие. А как сделать так что бы вся программа знала что что то произошло? Отсылать событие главному окну? а она пусть отсылает событие своим детям?
P.S. Проблема, в еще в том что на русском нормальных статьей нет, а с переводчиком плохо понятно
О! Нифига! Решили поменять механизм трансляции, которому полвека? Надо идти курить мануалы.
Также я не пойму, почему что ты, что анон выше, используете слово сигналы, хотя я в своем вопросе даже не написал ни разу о сигналах.
Для вката нужно понимать OS Internals и иметь навыки программирования на С/С++ по большому счету.
Но скажу сразу - в пределах СНГ ловить нечего, рынок мёртвый, лучше быть веб-макакой. Если хочешь, чтобы за байтослесарство хорошо платили, строго нужен перекат в США/Канаду/страну западной Европы/Израиль/Сингапур.
Наоборот пишут те, у кого от динамикодрисни началось разжижение мозга.
Да не, прямо глоток воздуха для меня, быстро выгоревшего в макакинге.
Ты всё смешал в кучу.
C:
int arr[] = {1 ,3 ,3, 7}; - стэк
int *arr = malloc(4); - куча
С++:
std::array<T, 4> - и сам объект и закулисный T arr[4] выделяются в стэке
std::vector<T> vec(4); - в куче, так как в вектор можно совать элементы и он в рантайме будет делать realloc каждый раз, когда будет заканчиваться память для новых элементов
Плюсую. Дактайповая параша, особенно в крупных проектах, это просто пиздец.
С RAII надо потом думать о владении и перемещении, когда в динамикодрисне с GC можно хуйнуть new и забыть а на ОЗУ похуй, она ж бесконечная.
>а на ОЗУ похуй, она ж бесконечная.
this. Помню как у меня в яндекс дзене на протяжении 2ух месяцев память неумолимо утекала и спустя минут 15 в этой хуйне мои 32гб уже задыхались по полной.
А что плохого в модулях?
По сути, они же предназначены для того, чтобы исключить костыль
#ifndef XUY
#define XUY
...
#endif
Которого нет в стандарте.
Это в пределах одного .срр. В соседнем один хрен придется всё заново включать, парсить и конпелироватб.
Прекомпилед хедеры это расширение и костыль который в цпп20 легализован через import <zalupa>
Оставлено только из-за обратной совместимости, #pragma once не все компиляторы поддерживают.
Появится еще один костыль, export module, #pragma once, #ifndef #define.
Так-то думать фактически не надо. Unique_ptr и shared_ptr с рефкаунтом когда надо, всё обёрнуто. Единственный момент когда надо думать - это cyclic reference, и знать что надо юзать weak_ptr дабы избавиться от него.
Итог - сборка мусора by design с фактически нулевым оверхедом.
>И в чём я неправ?
>Чем сишный массив лучше? Например тем, что он выделяется на стеке, в то время, как vector требует хотя бы одного вызова new.
Сишный массив, равно как и std::array<T, size> в плюсах, выделяются на стэке. Зачем ты сравнил сишный массив с плюсовым вектором, когда в плюсах есть прямой аналог сишного массива в лице std::array, яхз.
Спасибо за ответ, анонче. А не мог бы ты рассказать о самлм процессе переката? Понятно, что нужно учить языки, но не будешь же зеленым перекатываться? Все равно придется пару лет на отчизну поработать?
Я не он, но один из вариантов - работать в крупной галере с иностранным заказчиком (допустим epam, luxoft). Другой - пробиться в офис международной брендовой конторы (Intel, samsung. siemens и т.д.). Ещё вариант зааплаиться в контору, где уже есть русские, а в идеале твои знакомые (обычно это восточная европа, а потом перекат на запад). Самый простой вариант - уезжать по студенческой визе и там по месту искать работу на перспективу.
Общей рекомендации нет - надо траить все варианты.
Удачи во всех начинаниях и продолжениях, анон. Дорогу осилит идущий, всё в твоих руках.
Насчёт надмозга - да, в разработки такого уровня требуются люди с экстраординарным мышлением, типичным разрабам там не место. А вот по поводу докторской степени - не всегда истина, и не про все отрасли. Например, на данный момент в серьёзном ML без докторской степени делать нечего, а вот во многие другие отрасли, включая эмбеддед, в большинстве своём требуются опыт и мозги.
Спасибо, анон.
Не совсем понятно, что ты хочешь сделать, но попробуй посмотреть в сторону std::bind/std::function
Ну и чё?
Всем плох. Потоки как канализация, ты тупо сливаешь данные в унитаз в надежде что они потом где-нибудь как-нибудь всплывут. Дерьмо как оно есть. А вот printf то что надо, тебе надо напечатать, оно и печатает.
Нет, на то она и мув
В общем писал сериализацию и встала задача изменить часть бинарного файла. Есть хедер и его нужно переписывать иногда.
Всё что мне нужно это встать в начале файла, затереть условно 16 байт и не трогать всё, что лежит дальше.
По-разному пытался, такое чувство, что seek'и не работают. Попробовал открывать binary | in вообще файл не создаёт.
Я уже даже думал со временным файлом какой-то костыль делать.
Скорее всего потому что я еблан, но мб что-то подскажите?
Там микроошибка на 28 строчке - должен быть argv[1], но на результат это не влияет.
быстрофикс
Это нормально что я вкатыш ~1 месяц и понимаю только отдельные слова из этого? Как вникнуть в то, о чём этот пчёл пишет? Посоветуйте статей каких-нибудь что ли?
https://pastebin.com/Bgb87AQ0
Ещё можно так сделать, причем если оффсет будет больше размера текущего файла, то он увеличится, совершив конкатенацию тех байтов, которые были за пределами предыдущего размера. Если это недопустимо в твоем случае, то просто добавь проверки величины перед тем, как передавать оффсет в функцию.
Тебе паспорт показать, дедуль? Вопрос был по сути треда, будь добр ответь, не доёбывай.
Для TCP гарантируется (физически они могут прийти непоследовательно, но системный слой выдаст в правильном порядке), для UDP нет.
Оно не то чтобы с ним живёт, оно на нем и реализуется, это ведь тип организации движков.
Объясни нахуя тебе перегрузка для rvalue вектора.
Зависит от железа, зачастую ресурсы очень сильно ограничены, что приходится рисовать интерфейс попиксельно, если повезет, то в какой-нибудь из библиотек будут уже реализованы простые фигуры.
Можно использовать любой язык (с ограничениями), но только если найдешь для него компилятор, а так наиболее популярны C, C++, но имхо C++ там не нужен.
Ну а по конкретней можно про инструменты? Какие либы? Вот в тачках стоят какие то демшанские планшеты или фотики типо кэнона, как там вообще все устроено? На чем все это пишется и подо что
Какие инструменты? Берешь компилятор для мк и пак либ, которые с ним идут, посмотри, как код для всяких стмок или ардуинок пишется, иногда есть возможность отладки через компьютер, но не всегда, бывают ситуации, когда у тебя отладчиком является светодиод или осциллограф.
В си-треде сидят одни шизики, а здесь все.
А он как то нарушает принцип строгой типизации? Нужон просто чтоб код не захламлять кучей мусора, потому что хоть в сколько то большом проекте довольно скоро все превращается в хуй::говно::жопа::моча::итд
>А он как то нарушает принцип строгой типизации?
Выглядит именно так, что челику западло разбираться что оно там и чем является и он всё на волю самой проги/компилятора/императора отдаёт.
>Нужон просто чтоб код не захламлять кучей мусора
В чём проблема использовать using хуй = std::жопа<std::моча<...>>?
Ты можешь писать как хочешь, с авто это просто короче и нагляднее, чем городить кучу всякой херни. Никак строгой типизации это не противоречит, я хз что ты тут сказать пытаешься. Вообще подобное есть не только в плюсах, а еще и в других строго типизированных языках. Воспринимай это как просто сахарочек для удобства
Да я то ничего и не пропагандирую. Просто пытаюсь понять, сахарок это или есть в этом какой-то сакральный смысл.
>В чём проблема использовать using хуй = std::жопа<std::моча<...>>?
Сынок, вот хуярил бы ты метапрограммирование, тогда бы понял зачем auto в плюсах.
Домашнее задание - высри имплементацию struct.unpack как в пиздоне, чтобы функция возвращала tuple произвольного размера с произвольными типами с парсингом форматной строки в компайл-тайме, посмотрю на тебя. Если в плюсах что-то есть, значит так надо. Этот язык создавался гениями.
могут к примеру внутрь линукс запехать, и доступ к экранчику сделать через fbdev, а дальше уже прикрутят более высокоуровневую либу типа qtopia, либо сами сделают что-то похожее, ну а в конце прикладной программист уже будет делать экошки, кнопочки и прочее используя этот инструмент
самая жесть когда железка совсем новая и есть только доступ к видеопамяти, когда сначала нужно будет сделать что-то типа fbdev, в общем кадровый видеобуфер с двойной буферизаци, и уже после этого делать библиотеку gui
но во встраиваемых системах зоопарк, десятки решений, хотя принцип у всех похожий
Он путает строгую типищацию со статической.
Потому что есть анонимные сущности, например лямбды или анонимные классы, о типах которых знает только компилятор. Ещё в шаблонах надо как-то выводить тип конечного выражения.
https://en.cppreference.com/w/cpp/io/basic_ofstream/close
>This function is called by the destructor of basic_ofstream when the stream object goes out of scope and is not usually invoked directly.
Я же пишу - там, в тех случаях, где изменять ничего не требуется.
Бамп вопросу
Покажи свой код
Вот оно что, спасибо!
Вот есть у меня
base.h
class Base { virtual bool foo(int) = 0; }
impl.h
class Impl: public Base { bool foo(int); }
impl.c
bool Impl::foo(int x) { return x == 42; }
А почему линковщик ругается что не найдено Base::foo(int)
Разве не в этом весь смысл =0?
Из за этого непойми где приходится писать чушь типа Base::foo(i) { return false; }
Подскажите как правильно
Ну и да, используется это все в духе Base* ptr= get_Impl(); ptr->foo(42);
Сам Base ни в каком другом виде никогда не используется
Да в смысле? Это же вообще копейки. Ну я и сам из себя норм, умный, старательный.
Джунька 1к, мидло 1.5к, сенька 3к и выше. Вкатыш без опыта 600-700 может быть и стоит, но многие даже такими деньгами рисковать не станут.
Опыт это конечно хорошо, но что уметь то можешь? Что за петы?
Опыт на C вообще никак не засчитывается. 1.5 года это считай джун, максимум сотыга.
Она приватная, потомок ее не видит и не переопределяет своим объявлением. Если бы использовал override тебе бы сразу выдало что хрень пишешь.
Дальше мой телепатический навык не работает (
Не тупи. Я же не буду сюда все 100 строк копипастить.
Да, с отчизной наибольшие проблемы.
В РФ на плюсы активно нанимает яндекс, но там предметная область бекенда, а не роботов, автономных машин и компиляторов.
Еще есть касперский, хуавей, самсунг, мцст. Наверное сначала нужно туда пытаться попасть. Но в хуавее и самсунге все забито на несколько лет вперед разнообразными олимпиадниками из мфти, поэтому если ты один из них, то остается касперский и мцст. Хотя в мцст тоже очередь из мфтишников есть.
А так в целом раз уж ты родился здесь, то смысла от переката за бугор много не будет.
Будешь получать свои 150 килобаксов в США и платить там конскую сумму за ипотеку. В итоге уровень жизни будет гораздо меньше, чем у местной веб маньки.
>В РФ на плюсы активно нанимает яндекс
не пизди, это не так
они собеседуют, но за последние 2 года не взяли ни одного кодера с++ вообще то
AppBase.h
class AppBase { ... }
template<T, какаято магия, AppBase>
class RegisterApp { T app; ... }
App.cpp
#include "AppBase.h"
class MyApp : AppBase { ... }
RegisterApp<MyApp> reg; либо какая то магия
Engine.cpp
extern RegisterApp<какая то магия> reg;
main() { reg.app.foo();}
Ну и когда-то netbeans был неплох. Но сейчас C/C++ поддержку на нём не развивают. Плюс жрать стал как не в себя. Сам перекатился в VS.
Вытащить из рандомной структуры список всех полей вида "type | var_name | address".
Т.е я не знаю сколько полей и какие они.
Если у тебя задача распарсить какой-то протокол с данными, то есть либы наподобие http://kaitai.io/
Там ты конечно должен структуру сам ручками расписать, методом тыка.
Ну, если ты так говоришь... Кресты же у нас чисто про вертикальное мышление и Ctrl-C и Ctrl-V код. Есть Qt и больше нам ничего не надо, так ведь?
Использование HTML+CSS, когда есть Qt/Gtk избыточно и это лишняя нагрузка, переносимость/кастомизация у них большая, тащить с собой webkit на 30мб загружать в ОЗУ пару мегабайт, такое себе, что ты от этого получишь?
RmlUI, там конечно отличается но идея такая. Попробуй, еще захочешь.
>своего энтузиазма
Какого? Взять готовую библиотеку и написать никому ненужный и всеми ненавистный еще один локальный HTTP сервер, это по-твоему удовлетворение энтузиазма?
>неприятия мейнстрима
Писать GUI на вебе - это мейнстрим уже пару лет, когда стали появляться различные редакторы кода на электронах.
>Какого?
Взять готовую библиотеку и написать никому ненужный гуи для своей никому не нужной терминальной приложухи в данном случае.
>неприятия мейнстрима
Не, электрон это даунская хуйня, тут и так всё ясно.
Горизонтальное масштабирование! Кластеризация! Ко-ко-ко!
Бляяя, почему нихуя не работает!!! Это язык плохой переписываем на хуйня-нейм!
Спс за инфу
а память все дешевеет и дешевеет, вот удивительно, да?
чел, сейчас у каждой домохозяйки как минимум 8гб рам, куда ты свои сэкономленные 30 мб пихать собрался на десктопе?
Не шарю, не знаю.
>чел, сейчас у каждой домохозяйки как минимум 8гб рам, куда ты свои сэкономленные 30 мб пихать собрался на десктопе?
Чел, назови 3 адекватные причины использовать вебкит при написании кода на C++.
у меня только одна, удобнее
Это просто вопрос чести и профессионализма, зачем делать тяп ляп, и вообще брать низкоуровневый язык с ручным управлением памятью, если тратить ее бездумно, а не только минимально на то, что надо? Это же, типа, основы computer science.
Я вот хотел сделать браузер для двача, чтобы был крохотный как старая аська и висел в фоне не жрал ресурсы, там же нужно мизер ресурсов на тексты, так хуй там, капча требует подгузки целиком браузера с яваскриптом.
у майкрософт когда то давно была такая интересная технология:
движок их браузера был по сути компонентом activex, поэтому ты мог просто создать приложение, и активировать в нем этот компонент, и таким образом у тебя был уже в приложении свой мини-браузер
далее на любом языке, который мог в com, ты уже мог создавать активные странички в этом компоненте, отрисовывая там кнопочки, фреймы, таблички и все такое прочее
у майрософт еще была на основе этого такая заготовка которая позволяла для скриптовых сценариев очень быстро рисовать гуй - ты там в скрипте на vbscript или jscript (ну и на других скриптовых языках типа active perl, active python, etc) мог быстренько сделать менюшки, кнопочки и все такое
майкрософт, по сути пионеры такого подхода были
потом подход к построению гуи при помощи html+css он в принципе более идеологически правильный, так как разделяет презентацию и представление (чего, к примеру не было в формочках дельфи)
На каком моменте в кьюти повляются формы на хтмл? Я что то пропустил?
Бля охуенная же идея, но снова всё проебали.
Как и wsl 1.0 в пользу унылой виртуалки.
Хотя там как раз понятно, что деды которые сделали мелкомягким ядро nt, давно ушли или померли от геморроя. И изначальный план - подсистема окружения с равноправными процессами - реализовать не осилили. А ведь линуксовые процессы уже были видны в диспетчере задач, им можно было устанавливать приоритеты и привязку к ядрам..
Любой адекватный вкатун сразу после прочтения Страуструпа начинает код писать, а не хуйнёй страдать.
Практика всегда должна идти впереди теории. Если ты читаешь 300 страниц и пишешь 20 строк кода - ты явно не прав. Если ты пишешь 300 строк кода и при этом прочитываешь 20 страниц стака/референса - то уже спустя малое время ты будешь из себя что-нибудь представлять.
там лекции максимум полтора часа
никто тебе не запрещает в остальное время код писать
или ты как себе это представляешь, я сижу целый день видосики смотрю и код не пишу?
>полтора часа
Охуеть, чем смотреть каких-то чуваков в свитерах и с синяками под глазами за это время можно примитивненький рейтрейсинг написать.
написал уже?
очень интересно во сколько строк смог уместиться и как ты это за полтора часа написал
>ты читаешь 300 страниц и пишешь 20 строк кода
Надо так.
Я в детстве прочитал десяток книг по программированию когда у меня даже не было компьютера. Каждую главу вдумчиво.
Какие есть api на 10ке чтобы получить температуру процессора?
Я знаю что есть wmi, а можно ли к api биоса обратиться напрямую?
нет, домашние эксперименты.
ну так что есть какие способы из винды обратиться к api bios чтобы узнать температуру проца?
мерси. тогда пойду погуглю.
а в линуксе то есть возможность в api boisа обратиться напрямую?
ну подключить какой-нибудь заголовок типа <biosapi.h> и чтобы там была функция типа getCPUTemp();?
Погугли lm-sensors, должно быть что-то можно использовать. Лезть в бивис тебе нахуй не упало.
мерси, возьмём на заметку.
>И где эта технология сейчас?
думаю даже в win11 ты все еще сможешь сделать gui-менюшку на html используя скрипт vbscript, майкрософт обычно держит свою обратную совместимость до последнего
ну смотри, ведь wsl это был преемник sfu (сервисы майкрософт для юникс), а sfu был преемником posix windows nt
а ядро nt было интересно сделано - предполагалось что поверх него будут сделаны различные подсистемы, главная конечно же это была windows, но при этом сделали еще и posix слой, и вроде бы еще запиливали другие более специализированные системы, для ранних смарт-устройств например
в общем, майкрософт, повторюсь, как ни странно зачастую являются пионерами, бегут впереди рынка
ну тогда тебе придется научиться писать драйвера.. обычно всякие утилитки для мониторинга под винду идут этим путем..
Всё очень плохо. Любой шаг влево-вправо - и приходится переписывать на жабу.
1) Это единственный нормальный вуз (есть еще МГТУ и МГУ как минимум)
2) Они реально такие жесткие. Они все там физики, которые идут в машин лергиниг, если денег хотят. Че вы то ссытесь, чмохи?
3) Да даже если они реально ТАК знают математику, то это не гарантирует, что они хорошие программисты. Мб Rnd или анатилики да, но прям прогеры - хз. Думаю что процент хороший прогеров оттуда не сильно выше чем у других топовых втузов
4) Был у меня знакомый физтеховец мощный. Прям стандарная история: топ школа -> физтех -> свой стартап в тех зрении. Так вот он утверждал что на мобилке нереально в риал тайме распознавать лица. Ну йопта. Не говорю, что он тупой - чел реально мощный. Но, как грится, также ошибаются как и все.
Так что я совершенно не разделяю хуйни типа "ой там физтеховцы одни в очереди стоят, ик пук". Конечно, если ты заканчивал ЗалупкинГУ и тебе после рабочего дня интереснее пивас пососать, вместо того, чтобы почитать чего-нибудь по алгосам\линалу\терверу\любой другой математике, то да. Соре
А если чел реально увлечен работой и имеет хорошую базу (или хотя бы поднимает ее в свободное время), то не нужно депрессовать
Пысы. у меня знакомый из второсортного вуза в самсуге работает. Не скажу, что он мимокрок, но и не топ перформер. В свое время не смог с usb либками разобраться
Для начала я бы хотел просто запустить программу которая бы просто вывела один раз значение температуры цпу в консоль один раз и всё. я ещё заняться не могу этим недавно с одного компа на другой перешёл, пока данные по сети тащил с одного на другой, пока обратно, пока винду искал/драйвера пока на старом всё переделал я его же отдал другому человеку. ну ты понел как это геморно
Ну топ конторы, они же RnD занимаются, считай околонаучной деятельностью. Допустим тот же самсунг занимается параллельными вычислениями на кластерах GPU. Для этого нужны исследователи, которые родят концепт. Это выпускники МФТИ. В добавок к этим челикам нужны инженеры, которые переложат концепт в код. Это твой дружаня из второсортного вуза.
Ну, извини меня, rnd штат совсем небольшой. Тут я часто слышу тему, что даже инженером не устроишься в такие конторы.
Ну а насчет того, что в рнд беркт одних физкеков тоже хз. Опчть же я не говорю, что рнд самсунга держится на МАИ, но думаю что и не только физтех
RnD вещи делают люди с учеными степенями, либо стремящиеся их получить - аспиранты, кадидаты и доктора наук.
И там больше роляет чем ты занимался, кто ты по жизни и кто твой научник. Ну и так сложилось, что наукой в инженерных вузах у нас не занимаются от слова совсем, поэтому в RnD кроме физтехов ты вряд ли кого-нибудь встретишь (может только парочку челов из МГУ и ВШЭ).
>>305234
Раз уж тут обсуждение рнд и физтехов, то внесу ясность, как физтех, прошедший 3 крупных рнд + успешную институтскую лабу с компьютерным зрением.
1. Физтехи есть, но немного. Где они все - хз. В основном работают не по специальности типа банковскими аналитиками или кодерами.
2. В компании, где был прямо максимальный рисеч, было много людей вообще не из московских вузов (удивительно много сибиряков)
3. Мода нанимать "не ниже кандидата" прошла году в 2015, когда стало понятно, что рисеч тоже может приносить бабло, а людей не хватает.
4. На физтехов при этом многие смотрели с восторгом, хотя мы особо не выделялись из общей толпы. хотя я все-таки смог придумать клевый успешный алгоритм для своего направления. Наверно сейчас хэдквотер во всю его себе на девайсы адаптирует
Вот есть
https://github.com/signal11/hidapi
библиотека, но там нет не lib, не dll, не а, ничего нет.
Что мне подключать? Как? у меня голова уже болит просто пиздец.
помогите пожалуйста я не смог найти ни одного адекватного гайда
https://doc.qt.io/qt-6/cmake-get-started.html
Если тебе без CMake нужно, то у меня по такому пути они находятся: C:\Qt\6.2.2\msvc2019_64\bin
>библиотека, но там нет не lib, не dll, не а, ничего нет.
Это исходный код библиотеки, в ридми есть описание того, как ее собрать.
Это наоборот работает, если ты имел доступ к гостайнам ты несколько лет невыездной. Хотя какой смысл в эпоху интернета хз.
Ну типо ты работал на агрессию, и вообще может быть шпион и хакер. Они даже после работы в касперском боятся брать. Но не говорят этого потому что на них можно подать в суд.
В целом нет, но при оформлении рабочих виз могут быть доп проверки
я не понимаю как ее собрать, тут даже Readme фаилы не в txt
Добро пожаловать
Cmake - база, на которой вся индустрия сидит и да, придется жрать говно вместе со всеми
но вобще достаточно cmake ..
Всем похуй, но на допуски смотрят когда думают, выдавать тебе визу или нет. Если второй-третий лвл был, то могут и отказать. На первый похуй обычно.
Ты уровни допуска перепутал. 3й наоборот самый поверхностный. Как на практикес визами работает. Лично я не в курсе. Мне кажется, что больше от предприятия зависит, на котором работал. Потому что 3й уровень допуска на военной кафедре вузика и работа непосредственно на министерство обороны с третьим уровнем допуска все-таки разные вещи.
События предназначены для хэндлинга внутренней жизни объекта, сигналы и слоты для общения объектов друг с другом. Иногда события пересылаются дочерним объектам конечно же, но в целом они не должны протекать наружу.
Эвенты - часть приватной реализации, сигналы - публичный интерфейс класса.
А потом кто-то придумал что было бы прикольно менять поведение класса композицией вместо наследования и вмешиваться в жизнь объекта пробиваясь шаловливыми ручонками к его эвентам. Так появился эвентфильтр. Эвентфильтр - это хак, вернув true вместо false можно сломать отрисовку объекта или его респонсивность нужным тебе образом. Это очень полезный и удобный хак, так что совершенно невозможно отказать себе в удовольствии им пользоваться.
Не могу представить себе ситуацию когда тебе нужны какие-то ещё эвенты кроме уже реализованных, да ещё и публичные. Обрисуй идею.
Я хотел сделать drug and drop квадратиков как в windows phone, типо там будут квадратики и их можно будет перемещать по сетке, так вот я хотел с помощью события передавать другим квадратикам что я нажал на квадратик и собираюсь его перетащить. А когда другие объекты ловят евент о том что я сделал drag одного из квадратиков, то они уменьшались в размере бы, что бы можно было понять какой квадратик ты взял, а какие нет. Я просто на тот момент думал что евент, это что то глобальное, что можно послать в общий эфир и все услышат, но как оказалось это не так, это частный случай сигнала.
Да В Qt Creator на главной должны быть если ставил с ними
ну или тута https://code.qt.io/cgit/qt/qtbase.git/tree/examples/widgets/draganddrop/puzzle?h=5.15.2
git://code.qt.io/qt/qtbase.git
https://doc.qt.io/qt-5/qtwidgets-draganddrop-puzzle-example.html
Кто новый ноут покупал недавно что вы там брали?
Был третий (ДСП) без факта ознакомления, всем похеру было.
Стационарник с 16gb ram. Спокойно верчу одновременно пару виртуалок, 3 студии и хром с огромным количеством вкладок.
Съеби в порашу, зарепортил.
Дома станция на тредриппере стоит. Но я очень часто в постоянных переездах/перелётах так что беру с собой простенький ультрабук и не так давно новый хуйоми планшет взял. Когда как то с одним, то с другим. 95% работы делаю через ssh преспокойно. Если нужно какую-нибудь модельку быстро обучить - тупо арендую кластера. Брать ноут как основу == тупость.
Что-то твои свидетельства сильно расходсятся с тем, что аноны пишут в англоязычных интернетах - веб-макаки (бекендовые, по крайней мере) и востребованнее, и богаче.
Скиньте что-нибудь почитать плез на эту тему
нууууууууууу и да и нет. Представь что у тебя есть много устройств, например, робот с большим количеством сенсоров и систем типа СТЗ, локализации и тд.
Вот драйвер каждого сенсора или камеры может срать сообщениями.
Представил
Так вот ддс это модель, при которой существуют публикаторы и подписчики на определенный топик. Например, топик называется 'camera_data'. В него публикует данные драйвер камеры. А, например, модуль object detection на этот топик подписан и эти данные оттуда забирает.
так вот я мельком видел инфу, что вся такая архитектура сделана не на сокетах а как-то иначе. Как - я хуй его. Как я понял, ты , анон, сам не очень шаришь в этом. Однако взываю к анонам, которые понимают что происходит, чтобы чуть объяснили, а то я чет не совсем понимаю реализацию этого говнища
Ты же сам ответил на свой вопрос на чем, кроме сокетов, такое можно сделать, драйвера для устройств, взаимодействие через условный USB порт или через что-то еще.
То, что ты описал, является сервером.
Чёт это всё пахнет хуем. Возьми socket.io или его аналоговнет и не выёбывайся.
>>307163
В дополнение, подобное можно реализовать на каком-нибудь, более узком для такой задачи, микроконтроллере, чтобы не занимать целую машину для подобной задачи, к тому же более удобное подключение множества устройств через пины, как и в целом более гибкая структура может получиться, потому что не будет ограничений от ОС.
Ну, или просто поднять сервер.
А разве это полностью заменит visual studio? Есть ли анализ участков кода на использование процессорного времени в вашей схесе есть? Мне иногда vs code + clang кидали странные ошибки, которые я потом только в visual stduio находил. Мне студия кидала heap corruption, а vs и clang просто "Вызвано исключение" и всё. А я голову ломал почему оно вызвано.
Он жирный шо пиздец. Разница между Clion и vs небольшая. Переходить с vs на clion особого желания нет. Я вообще не уверен, что clion получше vs будет
Нет. Точнее я не очень хорошо описал
Но прикол в том, что в такой архитектуре нет сервера. Там идеология такая, что выход одного компонента не должен выводить из строя другие
Это скорее шина, по которой гоняется словарь, где коючи - топик, а значение - очередь сообщений
С микроконтроллером соглы, но это не только в микроконтроллерах применяется. А везде, где нужен риалтайм. В примерах применения часто фигурируют финансовые системы
Так у тебя устройства по сетке общаются или физически к одному хосту прицеплены? Если к одному хосту и на лялексе, то могут и через shared memory общаться или пайпы. Зачем тебе сокеты то?
Бумеры изобрели брокер сообщений.
>Там идеология такая, что выход одного компонента не должен выводить из строя другие
https://ru.wikipedia.org/wiki/Одноранговая_сеть
В любом случае, получается клиент-серверная архитектура, только децентрализованная.
Ну тогда иди нахуй. Серьёзно, я предложил тебе набор крестоджентельмена, что тебе ещё сказать?
Ты какую-то мысль хотел донести или просто не смог мимо пройти и не спиздануть ничего?
да, мысль в том, что обоссаным студентикам не пристало определять, что не нужно, а что нужно. По-этому, пожалуйста, не определяй.
По многим понятно, но на что можно заменить те же директивы условий, когда например при одной битности нужно определить тип как 32 бита, а при другой как 64 бита и другие такие штуки
И вроде как тоже препроцессор удаляет токены типа комментариев и тому подобное, как совсем без него-то?
Нет, хабр помойка потому что давно не тот.
Ну т.е. я так понял, что только include поменять на модули вместо define value использовать enum, а вместо define fn() использовать inline, а остальное также?
Замены проверок препроцессора они не подвезли? Тогда никак.
учитывая скорость развития крестов лет через 50 вполне реально
{
short sin_family; // Protocol type
u_short sin_port; // Port number of socket
struct in_addr sin_addr; // IP address
char sin_zero[8]; // Unused
};
что означает 5 строчка?
Если ты про sin_zero, так это для того, чтобы можно было кастовать эту структуру в другие структуры, например sockaddr. А вообще мог бы загуглить
это типо ручной align as или я не понял?
Я бы предложил тебе не изобретать сериализацию, а взять готовую. Мы используем protobuf
А просто связка CRTP + std::typeid не пойдёт? Посмотрел про protobuf, он всё-таки больше подходит для больших данных, у меня канал данных небольшой, около 512-1024 байт. Да и скорость очень важна.
в протоколах обмена обычно делают заголовок фиксированной длины, в этом заголовке описывается что будет лежать в динамической части
просто посмотри в интернете как проектируют протоколы обмена, если уж так хочется свое сделать
Ну тут я не знаю, я пользователь этого api, внутрь не заглядывал, для меня это чёрный ящик с простынями кода. Не забудь о версионировании и изменении структур в будущем
зачастую оставляют чутка место если в будущем планируется модифицировать протокол, не теряя обратной совместимости
>когда например при одной битности нужно определить тип как 32 бита, а при другой как 64 бита и другие такие штуки
КОНСТЭКСПР
О
Н
С
Т
Э
К
С
П
Р
https://godbolt.org/z/vWG7sn3sr
Даёшь зависимые типы в плюсы!
А, забыл. Для любителей шквариться шаблонами и сфинаями, можно https://godbolt.org/z/szMWeTM8o
Путь С++: почему всё должно работать просто, если может работать причудливо?
Я показал это лишь как пример того, как можно заменить препроцессорное определение средствами языка. Но именно для этого случая я бы, в зависимости от конкретной ситуации:
1) Обмазался бы ифдефами
2) Создал бы две структуры (FooBar32 и FooBar64)
3) Сделал бы два различных .cpp файла и выбирал бы нужный системой сборки
Ты графоманией занимаешься вместо разработки.
Дело в том что float здесь 8 байт. Я читаю из бинарного файла число с плавающей точкой 4 байта. Как мне преобразовать 4 байта в 8?
Что за язык? Почему float и double 8 байт? Зачем тогда в нем такое различие, на float и double, если у них одинаковые размеры?
Мне кажется их не существует.
> Что за язык?
Control
> Почему float и double 8 байт? Зачем тогда в нем такое различие, на float и double, если у них одинаковые размеры?
Я не знаю. Даже в мануале написано, что между ними никакой разницы.
>Control
Первый раз слышу, как и поисковики.
Определись, в каких форматах у тебя представлены вещественные числа в языке и в каком формате они в файле. После чего преобразуй float из файла, в свой (язычный) float.
https://ru.wikipedia.org/wiki/Число_одинарной_точности
https://ru.wikipedia.org/wiki/Число_двойной_точности
>tcp/ip, tor, i2p
>обобщить все, кроме использвания какой то функции send
Как ты собрался реализовывать абстракцию между несовместимыми конечными адресами?
Не понял намека
Вот пример, как я бы реализовал, но на Си.
https://ideone.com/1vCdB8
А вот, что тебе почитать.
https://ru.wikipedia.org/wiki/Абстракция
Ну ты же сделал, то о чем я и говорил выше. Есть одна функция, которая уже из себя вызывает нужные для конкретного протокола. А я спрашивал можно ли сделать это элегантнее и с минимумом дублирования кода.
Они могут быть похожи. Некий тор и i2p кажется можно вообще как прокси юзать, тогда интерфейс будет вообще одинаковым, а можно ручками api дергать.
>Некий тор и i2p кажется можно вообще как прокси юзать
Если они у тебя установлены в системе, да. Тогда вообще никаких проблем с дублированием не будет, просто создай какую-нибудь функцию, типа connect_to_local_socks(port) и указывай порт для каждого локального прокси в зависимости от тора или айтупи. Дублирования нет.
С вебархива тоже выпилили, прям грусть-тоска.
Почему из-за политики я должен страдать?
1. Правильно ли я понимаю, что этот функционал стоит реализовать в виде драйвера?
2. Каким образом я могу отследить событие установки приложения (или его обращения в реестр)?
Ты решил по тредам походить и сделать таким образом курсовую? Это же ты в Си треде спрашивал про тему.
>>2309343 →
>1. Правильно ли я понимаю, что этот функционал стоит реализовать в виде драйвера?
Хуки.
>2. Каким образом я могу отследить событие установки приложения (или его обращения в реестр)?
Хуки.
Кути. Всё красиво, перечисление компонентов
>Ты решил по тредам походить и сделать таким образом курсовую?
А это запрещено? Я стараюсь самостоятельно разбираться и тут задавать конкретные вопросы там, где у меня проблемы.
Про хуки сейчас прочитаю, спасибо. Кстати, нашёл ещё такую вещь как RegistryCallback для драйверов, вроде то что нужно.
> 1. Правильно ли я понимаю, что этот функционал стоит реализовать в виде драйвера?
Да, весь реестр ты не хуканешь.
> 2. Каким образом я могу отследить событие установки приложения (или его обращения в реестр)?
Отслеживать записи от определенных приложений (у тебя будет PID в каждом коллбэке). Но глобально задача не решается. Т.е. можно логировать все, что сделает msiexec, допустим. А если софтина не юзает msiexec, и экзешник не называется setup.exe ? Только какие-то эвристики придумывать, типа создания ключения в HKCU\Software или HKLM\Software
Писал виртуализацию реестра, так что можешь задавать вопросы
Тебе нужны хуки на вызов функций и dll. Драйвер только усложнит эту задачу, тут пользовательских администраторских прав более чем достаточно.
>А если софтина не юзает msiexec, и экзешник не называется setup.exe
Там изначально идея была в другом, чтобы удалить все созданные программой ключи, которые она создала, даже после установки. Определение является ли программа установщиком тут не нужно, просто чистка от мусора (неиспользуемых) ключей реестра.
client >> req;
if(!client){
break;}
, что заебывает. Как это можно красиво обернуть во что то?
нет такого понятия, как "неиспользуемый ключ реестра". Если ты хочешь что-то почистить - надо записать то, что ты хочешь почистить, как, например, делает Ashampoo Uninstaller.
Просто рандомно хуярить ключи на основе каких-то эвристик - так работают все эти хуевые бесплатные чистильщики реестра, а потом после чистки винду переставляешь.
Ты не понял, да? Смысл в том, что многие программы под окнами, не удаляют созданные ключи в реестре после своей деинсталяции. Логгер записывает все созданные, удаляемой программой, ключи в базу данных, чтобы после деинсталяции удалить их самостоятельно.
>нет такого понятия, как "неиспользуемый ключ реестра".
В итоге, получаем неиспользуемые ключи реестра.
> Ты не понял, да? Смысл в том, что многие программы под окнами, не удаляют созданные ключи в реестре после своей деинсталяции. Логгер записывает все созданные, удаляемой программой, ключи в базу данных, чтобы после деинсталяции удалить их самостоятельно.
Чел, я тебе об этом и пишу - тебе надо тогда сканировать процесс установки, чтобы знать, какие ключи не удалились. Ровно так, как делает Ashampoo uninstaller.
Сканирование идет всех процессов, включая уже установленные, чтобы удалить еще и созданные на этапе работы ключи, таким образом определять, кто есть установщик не придется.
Нет
Типа навесить хук на любое обращение в реестр, и если обращение идёт в software на создание ключа, то логировать его?
Потом хуком перехватывать деинсталляцию приложений?
>Типа навесить хук на любое обращение в реестр
Не любое, а только создание ключей\параметров.
>и если обращение идёт в software на создание ключа, то логировать его
Логгируй все.
>Потом хуком перехватывать деинсталляцию приложений?
Такого хука нет, программа может быть вообще portable версии, но фактически удалить ее можно будет и ты никак это не отследишь без огромной аналитической работы.
Думаю, меня никто не побьет если я буду предполагать что у программы в реестре зареган unistall. В таком случае, как я могу определить момент деинсталляции? Может в реестре менять UnistallString на путь к моему деинсталлятора, который сначала удаляет мусорные ключи и затем вызывает оригинальный деинсталлятор?
Возможно сработает винду не видел уже несколько лет в живую, только сначала придется вызывать оригинальный деинсталятор, а потом твой, потому что оригинальный деинсталятор тоже может создавать ключи активности программы.
Звучит логично. Спасибо, аноны, буду думать в этом направлении…
Выспался, вспомнил, что в гугле меня не забанили пока что и нашёл открытую раздачу. Если кому-то нужно, то вот ссыль. Сам сайт какой-то вонючий, нужна регистрация, но после неё качать можно сразу.
s3. itor. be/viewtopic.php?t=77232
Короче похуйч исключение кину жа и все
И дальше будет только хуже(
https://godbolt.org/z/f69dTMa7o
а если вынести Inner из Outer наружу, то нормально компилится. Или ещё если явно прописать Outer(Inner const &inner = {-1}) { ... } то тоже компилится.
Можно как-то без этого заставить компилиться?
Эм, ок, сорри, не подумал так сделать, вроде работает. Хотя блин странно, это баг что ли какой-то, он причём и в кланге, и в гцц есть
Понятия не имею, про что ты вообще, обожаю такие короткие бессодержательные ответы
В этом случае есть что ли какая-то существуенная разница между
struct S1 { int x{-1}; };
и
struct S2 { int x; S2() noexcept : x{-1} {} };
и
struct S3 { int x{-1}; S3() noexcept {} }
?
Или тут >>310129 с точки зрения языка есть фундаментальная разница между тем, что Inner находится внутри Outer или снаружи?
Есть одна библиотека для обработки сигналов, liquid-dsp. Официально она не поддерживается под Win, но есть зборочка в рамках другого проекта, и я хочу взять оттуда dll, def и lib. https://github.com/cjcliffe/CubicSDR/tree/master/external/liquid-dsp/msvc/32
В Qt я собираю msvc2019. Пропробовал сделать самое простое:
#include <liquid.h>
(...)
qDebug() << liquid_libversion_number();
Оно билдится без ошибок, но крашится в рантайме сразу же: The program has unexpectedly finished.
Я забыл что-то важное? Библиотеку линковщику указал, ошибок линковки нет. DLLку рядом с бинарником положил. Разрядность проекта и библиотеки проверил (32).
В линуксе поставленный из репозитория .so подгрузился вообще без проблем и сделал то, что от него требовалось.
>The program has unexpectedly finished.
Собери отладочный билд и запусти под отладчиком, такое сообщение вообще не информативное.
Тебе компилятор написал, что {} в твоём контексте это <brace-enclosed initializer list>. Открываешь гугл и смотришь что такое initializer list и какой у него приоритет при перегрузке. Как тебе раньше ответили - это база.
Ну ты троллишь или как.
https://en.cppreference.com/w/cpp/language/list_initialization#Explanation
Inner в изначальном примере с ошибкой компиляции (без явно определённого конструктора) - это агрегатный тип, поэтому его должно быть можно инициализировать через braced-init-list. Можно хоть все конструкторы выпилить, но его всё равно можно будет инициализировать (24 строка). И std::initializer_list тут вообще ни при чём.
https://godbolt.org/z/PxEqY1Mxa
Почему на 14 строке я могу спокойно написать:
Outer(Inner const &inner = {42}) { ... }
но не могу так:
Outer(Inner const &inner = {}) { ... }
?
Ну да, не баг, БАЗА, ОСНОВЫ ЯЗЫКА, и ничего что другой компилятор вообще абсолютно другую ошибку выдаст, без упоминания инишалайзер листа.
>Почему на 14 строке я могу спокойно написать:
В ссылке, которую ты скинул, есть объяснение.
>Ну да, не баг, БАЗА, ОСНОВЫ ЯЗЫКА
Где тут баг?
>и ничего что другой компилятор вообще абсолютно другую ошибку выдаст
Какую?
чтоб не ебаться с инсталятором конпеляю сам, запускаю, ухожу на три часа, возвращаюсь и всё готово, могу плагины сконпелять какие хочу, могу раздебажить насколько угодно внутрь, поглядеть какие куски кода выполняются и какие переменные и шо куда, рекомендую.
>чтоб не ебаться с инсталятором конпеляю сам, запускаю, ухожу на три часа
Сначала хотел посмеяться, а потом вспомнил гуи инсталяторы, так действительно лучше.
А зачем их вывозить? Чебурнет ещё не вводили и они могут работать на барена удалённо.
Тут ужечточился экспорт-контроль, точнее слежение за ним. То есть список технологий, который можно передавать заграницу, ограничен.
Мы в хуавее еще до этой заварухи сильно изучали этот список, и выяснили, что ИИ это прямо на грани. И даже некоторые проекты типа manifold learning пришлось не запускать от греха подальше.
этот заполнятель эксель табличек уже сьебал из рассеюшки и уже обустраивается на новом месте
ничего, сейчас крыса придет в себя и отпишется через месяц-другой
Имеется в виду, что вы хантите челиков из российских компаний, они сливают вам технологии и вы их передаёте далее как свои "разработки"?
Твой код, российского инженера, из Москвы за границу летит по проводу к китайцам. Вот в этот момент происходит экспорт. И вот какой конкретно код и для чего он написан определяет законность пересечения этой границы.
>Почему A? Почему не B?
Потому что код говно, которое даже кодеру не ясно, что ты хотел сделать.
>Почему не ambiguous overload error?
Где оно тут должно быть?
хз, не разбираюсь в таких тонкостях, но замечу, что, во-первых, если ты в инициализации b заменишь внешние фигурные скобки на круглые, то ошибка, которую ты ожидаешь, внезапно появится
во-вторых, если ты оставишь двойные фигурные скобки, но уберёшь из B конструктор, который принимает A, то увидишь ошибку, что типа no known conversion '<brace-enclosed initializer list>' to 'const B&'
Все там есть (для тех же кортекс М), просто без MMU использование может быстро привести к сильной фрагментации памяти. Дурной тон, конечно использовать, но если очень хочется - можно, нужно только о кастомных аллокаторах позаботиться.
Все там есть (для тех же кортекс М), просто без MMU использование может быстро привести к сильной фрагментации памяти. Дурной тон, конечно использовать, но если очень хочется - можно, нужно только о кастомных аллокаторах позаботиться.
Есть класс sf::Keyboard и в нём есть enum Key, в котором перечислены все клавиши.
Я хочу создать класс EventManager, и "скопировать" этот enum себе в класс, т.е что бы EventManager::W равнялось sf::Keyboard::W. Как вариант нашёл добавить typedef в свой класс:
typedef sf::Keyboard::Key Key, и теперь элементы enum будут доступны так: EventManager::Key::W. Есть ли вариант добавить этот enum, что бы он был виден в скопе самого класса? И насколько "легален" вариант который я нашёл с typedef'ом?
Какой язык, такие блюда.
Съебал в связи с последними событиями или раньше? Съебал в другой офис nvidia?
На момент последней коммуникации в четверг - Офис остается для всех желающих в нем работать. Все остальные желающие сьебать - имеют право сьебать в любой офис NV.
Собстно, у меня из команды сьебывают почти все, 1 человек остается в РФ только. Так что, как получу ворквизу - попрощаюсь с РФ навсегда.
Как быстро визу дают? В какую страну уезжаешь? Вас чартерами вывозят или самоходом?
> тот же вопрос анонам из яндекса, мейла и хуавея
А нахер хуавею валить? Россия и Китай братья навек! Там даже мыслей об этом нет.
Интел тоже весь остается. Пока вроде даже не рассматривается релокация.
>А нахер хуавею валить
Не компания, а сотрудники. В мейле сотрудники массово выезжают зарубеж (как минимум на время), опасаясь закрытия границ. Работать продолжат на удаленке
В хуавее даже из Москвы удаленку не одобряют, бро.
уебывай, говно
не пропадешь там, ведь у тебя охуенный скилл заполнения эксель табличек и написания батфайликов
https://github.com/microsoft/Detours
Когда мой эксель и батники оплачиваются в несколько раз лучше, чем твой С++ - это лишь повод задуматься о собственной карьере, а не завидовать мне.
Я просто нажал Build в 22 студии (правда тулзы от 19 стоят тоже, солюшен на 22 не грейдил) - и все собралось.
Анон, пытался собрать на двух разных машинах, и там и там ошибка одинаковая. Что я делаю не так?
насколько я понял с тех пор как они выкатились в опенсорс они стали полностью бесплатными. Анон выше, судя по скрину, билдил под x64, у меня и под x86 ошибка вылетает.
Попробуй через vcpkg собрать и установить.
https://github.com/Microsoft/Detours/blob/master/samples/README.TXT
все именно так
сейчас попробую. Кстати, может мне надо какие-то дополнительные средства сборки накатить? Я когда vs ставил, оставил по дефолту все что качается для разработки на крестах
Хз, студию видел последний раз лет 5 назад.
я тебе добро делаю, сжимаю твои булки, это тебе пригодиться ближайшее время
кипр, венгрия-румыния? там вроде поменьше хейта
Почему иногда я получаю срабатывание условия? Мне казалось, что std::memory_order_seq_cst должен был решить эту проблему?
Что происходит, если у тебя сначала только тред с функцией s() полностью отработает?
Точно, хуя я дурачок. А можно как-нибудь этот пример починить, чтобы при смене memory_order'а проблема появлялась?
http://cpp.sh/4jz7l периодически может выдать проблемы при любом опрядочивании, ниже sequential consistency. Даже на x86 с его Total Store Order. У меня "BAD" появилось 1 раз на 3 запуска.
А он и не против
Может лучше маслицем смазать? Арахисовым.
спасибо анон, это заработало
Функции RegCreateKeyExAW и RegSetValueExAW принимают дескриптор ветки, и расположение до ключа, и имя значения, если это RegSetValueExAW. Получить строковое представление дескриптора можно через swicth-case.
>хорошей ли идеей будет логировать дескриптор hkey и адрес подключа
Какой адрес ты собрался логгировать?
Все, что тебе нужно есть тут https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-functions
> Какой адрес ты собрался логгировать?
Я про аргумент lpSubKey
Короче говоря, вопрос был в том, можно ли парой hkey-lpSubKey однозначно определить ключ в реестре, чтоб потом читать эти пары из лога и совершать операции (удаления например)
Кажется я понял, что если буду использовать не Ex-версию функции, то она будет возвращать мне дескриптор созданного ключа. Если так, то наверное достаточно логировать его
Да.
>Кажется я понял, что если буду использовать не Ex-версию функции, то она будет возвращать мне дескриптор созданного ключа. Если так, то наверное достаточно логировать его
Я просто надеюсь, что ты знаешь, как работают указатели и дескрипторы...
читай про public protected и private наследовании.
>курсы
>для людей с опытом
>массивов и циклов
>перейти к практике чего-то достаточно узкоспециализированного
Тут много хуйни пишут, но такую хуйню первый раз вижу.
Хуй знает чего ты хочешь
Можешь на Ютубе выступления посмотреть back to basics на тему которая интересует
> Make
> CMake
> Meson
> Ninja
> SCons
> Jam
Что использовать то, ёбана
320x240, 0:04
Вот этого не слушай.
cmake --build
Фактически собирает не симейк, но какая разница, что он там вызывает для сборки.
то, с чем у тебя интеграция в IDE. т.е. Симейк или Мсбилд.
https://0bin.net/paste/lHjkzWLo#j1zFHuowdCdbmAR18N2if2mpkXsN-1UIfix9e6qRKAO
А вот мой:
https://0bin.net/paste/o7bbTRui#a2alHg+OkD2adbl5Q6br6vDKSMxNL9tpQ-8zlY3+1FC
Прикол в том,что у меня почему-то в строку вместо букв записываются '\0' . Почему так? Новый проект создавал,в онлайн компилятор вставлял,везде одно и то же.
То есть если у меня есть async_connect1, on_connect->f1(), то же самое с f2, где f1 и f2 долгие функции. Если начнет выполнятся f1, то f2 уже не сможет и будет ждать или как?
Ёбаный рот этого Си Плас Плас.
Опять присвоение вместо равенства,которое не обрабатывается как исключение
Спасибо
> Опять присвоение вместо равенства,которое не обрабатывается как исключение
А почему оно должно обрабатываться как исключение? Это вполне себе нормальное выражение, которое имеет определённое значение.
В коде сравнение идет символов, а не строк.
Используй варнинги (ВСЕ), линтеры, clang-tidy, статические анализаторы, динамические анализаторы и всё остальное. Хреново, но щито поделать.
Вот как раз хотел спросить,а в чем смысл? Зачем нужно присвоение в условиях и циклах while?
Иногда короче писать сразу в for, нежели ниже
Ну а если строго, то в языке просто есть expressions, statements и еще вроде что то. В стандарте написано, что на таком то месте в for может стоять такой тип. С точки зрения языка нет разницы там i++ или что то другое. Я так сходу и не приведу пример когда это прям гораздо удобнее
это не про возможность присвоение в условиях
просто operator= возвращает какое-то значение, которое в твоём случае можно неявно привести к bool, поэтому ты можешь присваивание написать внутри if, например
про использование этого на практике, в коде на си особенно часто встречается что-то вроде
if ((error = getResource(&out)) != 0)
{
// обработать ошибку
}
ну или так ещё можно
while ((ch = getChar()) != EOF) { }
ещё, если бы оператор присваивания ничего не возвращал, нельзя было бы написать
x = y = z;
это то же самое, что
x = (y = z);
то есть переменным x и y присваивается значение z, потому что равно правоассоциативно
>то есть переменным x и y присваивается значение z, потому что равно правоассоциативно
вернее этот код эквивалентен
y = z;
x = y;
проебался
потому что из оператора = возвращается ссылка на то, к чему присваивается какое-то значение ("y = z" вернёт ссылку на y)
>для i2p нужкн конфиг с настройками, а где этот конфиг хранить не понятно
Там же где их хранят все нормальные люди, "$HOME/.config/app", "/etc/app", "%APPDATA%/app", "Program FIles/app" и т. д..
>Как у дедов файлик и перезагружать приложение после каждого изменения чет такое))
Зачем перезагружать?
А, как не деды делают?
>А создать глобальный конфиг на всю программу тоже не понятно как.
Что такое глобальный конфиг?
Бамп
пишешь свой custom allocator, все остальное не тру
>Есть проект пизженный с гитхаба.
>Че делать?
Использовать систему сборки, которая там есть, а если нет, то читать ридми.
Молиться, что не придётся эти файлы искать и копировать вручную.
Хрень гуглится какая-то в основном.
> шелупонь типо массивов
Статисеское и динамическое выделение памяти под массив - это уже достаточно специализированно?
boost прилинкуй к нему и зависимые исходные файлы добавь в сборку.
Легче целиком собрать, чем такой хуйней заниматься.
Я собрать сначала cmake'ом ту либу, а потом o файлы нужные передать компилятору? Ты же об этом или нет?
.so, .a, .dll, .lib - библиотеки.
https://ru.wikipedia.org/wiki/Библиотека_(программирование)
Ты собрался работать с криптографией и сетью, но даже не знаешь, что такое библиотеки? Может быть стоит бросить эту идею?
Спасибо
> Ты собрался работать с криптографией и сетью, но даже не знаешь, что такое библиотеки? Может быть стоит бросить эту идею?
Нет. Я просто до этого использовал vcpkg либо header-only библиотеки
Правильно, а нахуя мне читать шапку.
Функция возвращает unsigned char⚹. Безопасно ли привести тип к (char⚹) и использовать этот указатель на строку?
Если заканчивается нулем, то да.
Тогда еще вопрос. Это ебнуться можно ручками все это устанавливать, прописывать. Нет ли пакетного менеджера, чтобы я прописал install boost/openssl и у меня все работало?
>Нет ли пакетного менеджера, чтобы я прописал install boost/openssl и у меня все работало?
Под окнами вроде нет, под линуксом любой дистр и из репов dev (если они есть, иначе обычные) версии тянешь.
> Под окнами вроде нет
Есть. Ебанулись бы погромисты сами разыскивать зависимости, и ещё более ебанулись бы их искать обычные рядовые пользователи.
Есть различные пакетные менеджеры, например, vcpkg, conan и т.д.
>>316307
Я просто собрал https://i2pd.readthedocs.io/en/latest/devs/building/unix/ по этой хуйне, нашел client.so, а затем свою прогу уже с ней собрал. Но там не только main компилировался. Еще какие то cppшники, которые тоже используют client.so, но в main`не ничего не вызывается
sambridgecreatesession() возвращает мне SamSession, у которого UDPEndpoint. Это что еще такое? Почему вдруг udp, а не tcp?
Спасибо, понял
У меня просто все ломается. Я хотел подключиться к i2p устройству, получить tcp socket и дальше работать с ним как с обычным, а тут хуйня какая то
И как там выбрать? Мне бы что-нибудь простое в использовании, но чтобы можно было запускать хотя бы 1к одновременных тасков.
Вам даны три неизвестных числа, обозначенных aaa, bbb, ccc, а также все попарные сравнения этих чисел друг с другом. Напишите программу, которая выведет эти числа в порядке возрастания (неубывания).
Формат входных данных
Вводятся три строки. В первой записан результат сравнения между собой чисел aaa и bbb. Во второй строке — результат сравнения aaa и ccc. В третьей строке — результат сравнения bbb и ccc. Результат сравнения выражается соответствующим знаком — символом "«<", "»>" или "===".
Формат выходных данных
Выведите символы aaa, bbb, ccc без разделителей в порядке возрастания (неубывания) соответствующих чисел, каждое следующее число должно быть не меньше предыдущего. Если возможных вариантов ответа несколько, выведите их все в лексикографическом порядке (порядок, использующийся для сравнения строк в словаре).
Я не понимаю как решить без огромного дерева ифов,буду благодарна за любую подсказку
> Я не понимаю как решить без огромного дерева ифов,буду благодарна за любую подсказку
Сколько в дереве листьев будет?
Иначе говоря, где roadmap'ы эти ваши взять?
/usr/bin/ld: /tmp/main-92fde9.o: undefined reference to symbol 'qt_version_tag@@Qt_5.15'
/usr/bin/ld: /home/.../Qt/5.15.2/gcc_64/lib/libQt5Core.so.5: error adding symbols: DSO missing from command line
Попытался прописать DEFINES += QT_NO_VERSION_TAGGING, но не помолго
https://0bin.net/paste/EhNZyicJ#rvo91OXdaTkwlDF0QcxjYlYJ3S1AWcVIMc5vVtfIh-A
Примерный алгоритм, но на Си ебал рот на крестах писать, насчет
>Если возможных вариантов ответа несколько, выведите их все в лексикографическом порядке (порядок, использующийся для сравнения строк в словаре).
нихуя не понятно, если
>должно быть не меньше предыдущего
Не тестировал, могут быть баги, а может вообще работает не правильно.
Прог скомпилиась, но при запуске
/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found , хотя сам файл лежит там
Разные версии, программа не может найти библиотеку или еще что-то, попробуй собрать с -Wl,-rpath,path-to-lib, где path-to-lib - это путь до директории с библиотеками, с которыми ты собираешь, возможно проблема в том, что версия Qt установленная в системе и версия Qt, которую ты использовал для сборки не совместимы.
Тогда сделай так.
https://forum.qt.io/topic/120129/usr-lib-x86_64-linux-gnu-libqt5core-so-5-version-qt_5-15-not-found
Научись гуглить ошибки.
Не сработало то что ты кинул. Я это находид. Кажется, что версии разные
Уже лучше. Прога вроде начинает работать, а потом валится с undefined symbol: _ZdlPvm, version Qt_5
Правда теперь у меня нет идей в чем проблема, кроме как проверить, что компиляторы совпадают
А они должны совпадать с Qt/5.12.12/gcc_64? Или достаточно чтобы qt и я собирали одним и тем же?
Проверь флаги компиляции, возможно в них какие-то конфликты происходят, например, в библиотеке один функционал имеется, которого нет в компилируемом с ней проекте, или наоборот.
qt5-base, qt-default и их -dev версии поставил из репозитория?
Как вообще на производных дебиана можно заниматься разработкой чего-либо?
Но к другим языкам так не тянет почему-то
>>317161
>Ознакомиться с зарплатами и рынком труда.
Я на хедхантере находил вакансии джуном без опыта за 20-40т. Ну и сениор 3 года опыта за 200к. Наверное, в вебе вакансий больше и вкуснее, но там и конкуренции больше ведь, да и не так интересно.
>Понять что ты на C++ делать собрался.
Игоры же, анимации в игровых движках пилить, приложухи для ведроидов клепать.
Исправь, что не так
>Но к другим языкам так не тянет почему-то
C++ - худший язык, на уровне жабы, что тебя в нем тянет, камень на шее?
По условию у тебя есть результат сравнения каждого вводимого элемента с каждым. Соответственно можно для каждого получить ранг - количество элементов меньше его. Допустим вводится: a > b (ранг а = 0 + 1, ранг b = 0), b > c (ранг b = 0 + 1, c = 0), a > c (ранг a = 1 + 1, c = 0). Далее сортируешь элементы по возрастанию ранга и лексикографически, если ранги совпадают.
Решение предполагает, что порядок действительно существует и нет ситуации, типа a = b, b > c, c = a.
Андроид это в основном Kotlin или Java. Мобильного софта с большими нагрузками не так много, где бы вот прям надо было на C++ пилить.
Игры да, пока что на C++, но немалая часть это Unity + C# или Unreal с блюпринтами или биндами к другим языкам.
200к в современных реалиях это <2k USD, а 20к это что-то уровня пенсии.
Ты еблан?
Слит.
В крестах самое большое сборище токсичных пидорасов, ненавидящих друг друга и всех остальных.
Всем индивидуальный подход нужен при вкате. Читай/смотри все материалы для начинающих подряд, пока не найдёшь такой, который понятен именно тебе.
https://github.com/sosachbot/cppthreadhat#для-нюфань
> крестах самое большое сборище токсичных пидорасов, ненавидящих друг друга и всех остальных.
Почему именно в крестах? Как так сложилось?
>>317439
>смотри все материалы
Так-то hello world по учебнику Праты я уже написал, но есть ощущение, будто нужно было какое-то введение в кодинг прочитать, я про это и спросил тред, а аноны так и накинулись
Нет таких введений в кодинг, сразу практику нарабатывай.
>Так-то hello world по учебнику Праты я уже написал, но есть ощущение, будто нужно было какое-то введение в кодинг прочитать, я про это и спросил тред, а аноны так и накинулись
C++ слишком огромный, чтобы его изучать по-методичке, в любом случае, на любом этапе своих знаний, ты столкнешься с тем, что задача требует большего, потому что язык говно, в которое пытаются засунуть всё и все, потому что понять логику чужого кода, на C++ невозможно, ты можешь знать все о программировании, но всегда найдется долбоеб, который придумал новый вариант решения примитивной задачи, в котором еще и какой-нибудь новый стандарт используется "для упрощения кода". Что такое программирование лучше начинать с другого языка, более примитивного и ясного для человека, а не имя_библиотеки::основные_функции::расширение::дополнения::пошел_нахуй().
> лучше начинать с другого языка, более примитивного и ясного для человека
Получить разжижение мозга, привыкнуть, что все задачи решаются а одну волшебную строчку, и при первых реальных сложностях слиться.
>язык говно
В чем это проявляется, помимо менеджмента памяти?
>понять логику чужого кода, на C++ невозможно
Из-за того, что язык дает большую свободу? Действительно с этим все настолько плохо? Часто встречал такое по своему опыту, анон?
>лучше начинать с другого языка, более примитивного и ясного для человека
Как я понял, начинать советуют везде с C, т.к. он более приближен к аппаратной части, почему бы тогда сразу не начать с плюсов? Если не С, какие еще варианты есть?
>В чем это проявляется, помимо менеджмента памяти?
Это не проблема, проблема в том, что из языка делают псевдо-универсальный инструмент типа Си, но с кучей не самых удобных для использования оберток, реализаций, конструкций.
Если кратко и более ясно, то стандарт C++, развивают по принципу, люди используют что-то из сторонних библиотек (или пишут что-то свое), а значит нам нужно добавить эту функциональность в стандартную библиотеку, вместо того, чтобы добавить удобный пакетный менеджер для языка, а от языка оставить только удобное представление логики и основных реализаций. В итоге, получается монолитное чудовище, которое невозможно знать всё и постоянно необходимо смотреть документацию для стандарта.
>Из-за того, что язык дает большую свободу? Действительно с этим все настолько плохо? Часто встречал такое по своему опыту, анон?
Посмотри на Go и на C++, на Go, можно просто и понятно выразить то, что программист хотел сделать.
2 разных языка, с разными задачами, но учитывая, что C++ позиционирует себя, как универсальный системный язык, это сравнение имеет место.
>Как я понял, начинать советуют везде с C, т.к. он более приближен к аппаратной части, почему бы тогда сразу не начать с плюсов? Если не С, какие еще варианты есть?
Go, но после него, ты не захочешь писать на C++. C и C++ не имеют никакой связи, у C++ есть небольшая обратная совместимость, но не более. Программирование на C, дает тебе понимание, как работает система и код, который ты пишешь, внутри.
>но с кучей не самых удобных для использования оберток, реализаций, конструкций
Например? Вроде же наоборот плюсы идут в сторону упрощения жизни: концепты вместо сфинае, constexpr вместо метапрограмм, PMR вместо C++11 аллокаторов.
>Вроде же наоборот плюсы идут в сторону упрощения жизни: концепты вместо сфинае, constexpr вместо метапрограмм, PMR вместо C++11 аллокаторов.
Даже в твоем уточнении видно, что C++ слишком перегруженный и выглядит, как вечный тестовый язык, в который добавляют что-то, если не нравится удаляют, но удаление заключается в создании новой версии.
Такой пример подойдет?
Так оно не вместо, а вместе.
c-array и std::array, union и std::variant, enum и class enum, struct и class, typedef и using, pragma once и ifdef, c-cast и std::cast<>, printf и iostream, FILE и fstream.
Сюда ещё добавляем бесконечно плодящиеся since CXX, until CXX. Если бы они крупными патчами накатывали как c++-98 --> c++2011, то было бы норм. Но когда у тебя каждый год синтаксис лямбд меняется то ты сидишь и реально не вдупляешь как писать надо, а как не надо.
> c-array и std::array
Всегда юзать std::array, потому что он не норовит декеиться к указателю, у него есть удобные методы и он буквально всем лучше, кроме того, что шаблонный параметр размера компилятором не выводится никак при определении массива?
> union и std::variant
В моей голове тут по духу разница такая же, как и между raw и умными указателями. Ты можешь юзать обычный юнион, но тебе тогда нужно либо держать в голове, объект какого типа там внутри него находится, либо хранить тип, который сейчас внутри юниона, и писать адхок проверки.
Единственное тут ещё неоднозначный сильно момент с деструктором variant, его по-разному можно реализовать. https://youtu.be/va9I2qivBOA Да и сам variant от одной реализации к другой по производительности разнится вроде бы
Про синтаксис лямбд, не знаю... Ну там вроде сделали, что можно пустые круглые скобки скипать, раскрывать пачку параметров внутри [], юзать шаблонные параметры вместо auto... Но тут вроде же нет breaking changes никаких, просто добавили удобств
А в остальном просто, наверное, пишешь, как больше нравится, хз. Ну, и не знаю, в чём проблема, например, даже не знать обо всём этом наследии си, в частности вот о существовании каких-нибудь си-стайл кастов, и всегда просто юзать named касты.
Не знаю короче, я с плюсами не особо давно познакомился, но не вижу ничего плохого, что тут много всякого есть. Тебя не заставляют это всё использовать, можно хоть в стиле си писать, наоборот, тупо по-минимуму притрагиваться к плюсовым фичам.
Ну так типичный проект состоит из мешанины вот этого всего. И "можно не знать" обычно не прокатывает. С кодом на С линковаться надо, дорабатывать написанный код надо, последний стандарт принесут пориджи, ибо другого они просто не знают. Крупные конторы пытаются с этим бороться, составляя целые документы что можно, а что нельзя.
И параллельно более грамотный подход в питоне. Отдельно версия 2 и отдельно версия 3.
>Про синтаксис лямбд
Ломается совместимость с предыдущей версией компилятора. Раз в два года. А нормальный с++ проект пишется года 4, не менее.
C++ позиционирует себя как системный язык. А Go - с гц.
В C++ мешанина всякого, то что неудобно - добавляют в стд.
А в Go - комплексные часть стд тк нет перегрузки операторов. (в спп тоже правда..)
Си даёт полный контроль и понимание как работает система. А асм даёт ещё больше контроля и понимания.
>>317492
И нет тут перегруженности. Метапрограмма не часть языка, sfinae тоже выходит само из шаблонов. Аллокаторы как полиморфные и нет - все же там, где нужен контроль, приходится иметь больше инструментов, друг другу они не мешают.
Конечно плюсы древние и долго вбирали в себя всякое, но вбирали не тк людям делать нехуй и это "тестовый язык", а потому что людям надо и используется в реальном коде. Не надо говорить что они хуже кастрированных Го и Си.
>>317548
>C++ позиционирует себя как системный язык.
В системном языке, не нужно ООП.
>Си даёт полный контроль и понимание как работает система.
Задача Си - переносимая запись и чтение памяти, контроля над системой нет, даже системные вызовы в нем, реализованы через асм вставки.
>И нет тут перегруженности.
Есть.
>Аллокаторы как полиморфные и нет - все же там, где нужен контроль, приходится иметь больше инструментов, друг другу они не мешают.
Для контроля они не нужны. Мешают.
>Конечно плюсы древние и долго вбирали в себя всякое
Си древнее, но его стандарт гораздо меньше, при этом реализовать на нем можно все тоже самое.
>что людям надо и используется в реальном коде.
Что надо людям, реализуется с помощью самих людей, а не бесконечным расширением стандарта.
>В системном языке, не нужно ООП.
> >Аллокаторы как полиморфные и нет - все же там, где нужен контроль, приходится иметь больше инструментов, друг другу они не мешают.
>Для контроля они не нужны. Мешают.
Мне не нужно - значит никому не нужно.
> CMake
this
ну для какого то своего проектика без зависимостей можешь что угодно использовать
build2 конечно же!
У тебя с запятыми беда. Уже не первый пост такой
>Мне не нужно - значит никому не нужно.
Назови действительные причины, зачем это, а не навязанные языком или твоими личными проблемами.
Везде читаю как все носятся с переходом с 98 на 11 стандарт, я так понимаю с того времени каки-то охуеть измнений не было и если я почитаю того же страуструпа за 14 год, то потеряю не очень много?
И почему он с того времени больше ничего не написал?
Там другое. Я еблан просто, не так понял. У меня прога сразу завершалась, надо было run на треде вызвать, а я не мог найти этот run
>Почему именно в крестах? Как так сложилось?
мало работы потому что
высокая конкуренция
ты либо пишешь ядро ос в майкрософт за 300ккккк в секунду либо отдыхаешь на помоечке
нет средних вакансий
И правда, видимо я на амазоне что-то не так тыкнул, хотя вроде по году публикации смотрел его книги.
Так а что по вопросу? Стоит читать книгу из моего поста как первую или A Tour of C++ лучше?
Скорее всего придется использовать всё, включая кастомные сборщики на баше и автомейки, добро пожаловать в кресты.
Оно жирное. Лямбда быстрая и маленькая, а std function большой и скорее всего медленный в сравнении с лямбдой
Так только для stateless лямбд можно
Мне захватывать нужно. Так бы я на указателях все сделал (как и ты)
Sfinae с enable_if и callable. Или концепты
> Why does a lambda have a size of 1 byte?
Ебать, целая статья. Больше графоманили только про std::launder и inline variables.
Почему до сих пор люди стартуют проекты на этом. Я думал С++ это легаси только. Что их к этому подталкивает?
А почему нет? Имхо, плюсы зачастую очень удобен, когда хочется получить больше контроля за программой. В другом языке вероятнее всего вместо красивой и аккуратной лямбды будет хуйня с оверхедом в 64 байта на функцию. Или как в питоне, где объекты имеет размет не суммы состовляющих как в c(за исключением паддинга), а какой то неебический
Да, сори, чушь написал.. ошибся подумав что там сказано о возможности переопределять лямбду с получением ub.
Посмотри тред. C++кодеры кроме "этанужна" никаких аргументов не имеют. Получается язык говно.
Альтернатив нету только в каком-нибудь кернеле и в диком хайлоаде\реалтайме, где ты сидишь с профайлером и считаешь миссы кэша.
Во всех остальных случаях С++ нахуй не сдался. Мы все хотим вообще весь наш код, кроме драйвера перевезти на С# или Go, но увы, пока нету капасити в команде
>Альтернатив нету только в каком-нибудь кернеле и в диком хайлоаде\реалтайме, где ты сидишь с профайлером и считаешь миссы кэша.
В таких задачах, как раз есть альтернативы, но плюсам там делать нечего.
>Мы все хотим вообще весь наш код, кроме драйвера перевезти на С# или Go
Голанг не может в десктопы, у шарпа с переносимостью хуево.
Это кому?
Электрон приветы передает.
А вообще - в нашем конкретном случае с этим проблем не будет, специфика софта.
У меня есть пикрил код, он работает в годболте, но когда пробую скомпилить локально у меня выдаёт код ошибки -1073741571 (винда, судя по ответам в интернете стак оверфлоу), я не понимаю, вроде mingw gcc 11.2 компилятором компилю тоже -O2, но стек переполняется, почему бля.. Как понять что не так без залезания в асемблер я слишком тупенький для этого
А под линуксом (wsl) всё норм работает... Блять ладно в пизду, походу нельзя на хвостовую рекурсию в плюсах полагаться
>Голанг не может в десктопы, у шарпа с переносимостью хуево.
Так может у них вообще десктопа нет? Тогда зачем им С++, когда можно на говноланг или шарп все переписать? Писать код на шарпе в разы проще и приятнее, чем на плюсах.
Интересно, с какого языка пикрел перешел
Шланг еще. А если у тебя СИМЕЙК и код без корявой хуйни - то и студия компилять будет
А может и не будет, если там Посекс.
Сборка проекта это сценарий, записанный в специальные файлы. В Linux есть свой собственный формат Makefile и утилита make, которая эти файлы исполняет. То есть она в процессе выполнения вызывает компилятор, линковщик и системные утилиты Linux (всё вместе - tool chain). В Windows нет ни make ни этих утилит, поэтому нужно ставить mingw или cygwin, чтобы они появились.
Это работает и в обратную сторону - студийный проект .vcxproj это такой же Makefile, но написанный в терминах windows и в формате XML (а ещё есть формат для студийного nmake).
Так как это полная ебанина, то дополнительно придумали CMake, который использует промежуточный формат сценариев - CMakeLists. Он конвертируется самой утилитой в Makefile или vcxproj и потом уже собирается tool chain'ом, который есть в OS.
Так не, я немного о другом. Пусть у меня есть просто файлы без зависимостей всяких. И вот как я понял я не могу будучи на линуксе получить на выходе exe, если не использую то что написал выше.
Не, ты можешь собрать, если напишешь makefile или через консольку последовательно команды введёшь. Проблема будет, если в коде есть вызовы системного API (WinApi или POSIX).
Я чет не нагуглил как с gcc под винду скомпилить. Да, имею ввиду случай, когда я ручками указываю все cpp и получаю исполняемый файл без всяких cmake и прочего. И в случае, когда я явно не использую api специфичное
А, я понял, ты хочешь под лялексом сделать exe и потом его запускать на win. Тогда тебе нужен не штатный gcc из linux, а кросс-компилятор (придётся поставить на линукс mingw-w64 и использовать компилятор из него).
Зачем тащить оверхед для разных ос? Почему именно ос есть же другие архитектуры, почему для них не надо тащить? Будет компилятор размером 20гб удобно.
В итоге получится компилятор огромных размеров. А ещё есть проблемы с лицензиями, интеллектуальной собственностью и банально конкуренцией. Microsoft и Apple не хотят раскрывать свои исходники и делают только под себя.
К теме про 100500 компиляторов от разных вендоров и под разные платформы.
бамп
Так почему оно во всех других языках есть?
C#, Java, Rust, Go, в остальных просто лень проверять.
Потому поточный вывод неудобный? Что легче: написать форматную строку, а после неё просто расставить все объекты, или ебаться с переключением состояний обоссаного cout'а?
>Потому поточный вывод неудобный?
Да.
>Что легче: написать форматную строку, а после неё просто расставить все объекты
Используй printf, в чем проблема?
> в чем проблема
В том, что я не могу имплементировать вывод произвольного объекта.
> Какие ты состояния переключать собрался
Всякие hex, oct, dec, fill, setw, не ебу как это называется, но суть понятна.
>В том, что я не могу имплементировать вывод произвольного объекта.
Клэнговский парсер + обработка перед компиляцией.
Хуенговский. Готовые решения есть, почему долбоёбы их в стандарт до сих пор не завезли?
Бесконечное расширение стандарта, снова. Просто используй другой язык или используй нестандартные расширения.
> Бесконечное расширение стандарта, снова.
Крестам слишком поздно сходить с этого пути. Им остаётся только идти по нему дальше.
А в шапке именно первую для новичка советуют. Прошло правда 5 лет уже судя по надписи в начале фака, но на тот момент вроде уже тур был написан. Я думаю его бы там упомянули наверное будь он лучше.
Короче что читать если я хочу знать с++, опыта почти нет, немного на пайтоне писал, но ничего серьезного, просто хуйню типа разложения числа на простые множители и немного пайгейм ковырял. Есть небольшое представления о классах, объектах, функциях и подобном
Просто есть такое желание, вообще я админ, но хочется просто для себя немного си++ поучить
питон поучи, епт. Прекрасный язык для админа, решает 100% всех задач в этой области.
Будешь знать питухон, попрогай на чем-нибудь комплируемом вроде C#, Java, Kotlin, Scala (рекомендую скалу из-за прикосновения к fp)
Потом попрогай на чем-то лоулевел с gc вроде раста или go
Потом помацай сишку
А вот теперь, если тебе вдруг захочется посидеть в мейнстримных проектах, завязанных на производительность, то вкатывайся и страдай в плюсы. Есть даже маленькая вероятность, что через 10 лет он будет представлять из себя нечто вменяемое на уровне языков нового поколения, которые появились на почве боли и страдания из-за C++
мимо-сеньер-помидор-с-широким-кругозором
> решает 100% всех задач в этой области
Я как раз в другую область хотел заглянуть. В серьезный язык, в разработку софта, даже выбрал программу опенсорс, которой пользуюсь часто и которая на с++, чтобы попозже копаться в ней
> питон поучи
> попрогай на чем-нибудь комплируемом вроде C#, Java, Kotlin, Scala
> Потом попрогай на чем-то лоулевел с gc вроде раста или go
> Потом помацай сишку
Какой-то до охуения долгий путь, я думал как раз после плюсов если будет желания учить что-то другое, тем более говорят в плюсах всё есть, все парадигмы, и вся прочая хуйня, поэтому в другие языки будет легко переходить потом если знаешь с++
>тем более говорят в плюсах всё есть, все парадигмы
лолнет. Там есть формально есть разные парадигмы, но они в урезанном виде. Возьмем, к примеру, haskell и c++. И там, и там есть функциональная парадигма, но есть нюанс. Кроме того решает еще качество реализации парадигмы и выставленные акценты. К примеру, асинхронное программирование в плюсах неплохое, а вот iostreams - параша ебаная. Причем даже если дизайн и тулинг неплохой в плюсах, это не означает, что нет такого же хорошего, но немного другого или что нет еще лучше. Чем больше пробуешь разного, тем лучше видишь ущербность и отсталость плюсов. Впрочем, в других языках тоже видишь ущербность. А также более толерантно начинаешь относиться к недостаткам, т.к. становится похуй на очередную N+1 реализацию одних и тех же принципов
>если дизайн и тулинг неплохой в плюсах
если дизайн и тулинг отдельных моментов языка неплохой в плюсах
Я хочу написать функцию select для всех таблиц в бд и не использовать литералы в названии полей, но проблему с датой и переводом ее UnixTimeStamp решают через select с "UNIX_TIMESTAMP(имя поля)", что опять приводит к необходимости вбивать ебучие названия полей в код. Как можно решить эту проблему без литералов и как-то перекодировать то, что хранится в дате, в UnixTimeStamp?
Не использовать литералы для перечисления названий полей при написании select'а, то есть
У раста нет gc, не сравнивай его пожалуйста с GO. То что они одновременно на слуху не делает их под один класс задач.
>В серьезный язык, в разработку софта, даже выбрал программу опенсорс
Куча оперсорса написано на Си, питоне и тд. Зачем нагружать голову крестами?
>поэтому в другие языки будет легко переходить потом если знаешь с++
Да. Потому что понимаешь сколько в C++ говна и радуешься, что в других языках от этого уходят или ушли.
Потому что говноеды.
>Какой-то до охуения долгий путь, я думал как раз после плюсов если будет желания учить что-то другое,
Так учить С++ еще дольше чем этот путь. И ты его не сможешь выучить, если только у тебя нет дара от природы хранить миллиард устаревших фактов.
> Куча оперсорса написано на Си
> Зачем нагружать голову крестами?
Может потому что в крестах есть много улучшений Си, и ты в принципе можешь писать в процедурном стиле, но это будет намного приятнее?
>Куча оперсорса написано на Си, питоне и тд. Зачем нагружать голову крестами?
Есть ровно 3 (три) валидных причины писать на C в 2022 году.
1. FFI\extern "C" интерфейсы для других языков
2. Под твой некроконтроллер нет C++ компилятора.
3. Адовое сишное легаси, которое перевезти на С++ маловозможно (бизнес причины как минимум)
Всё, других причин писать на C в 2022 году нету.
>потому что в крестах есть много улучшений Си,
Какие?
>и ты в принципе можешь писать в процедурном стиле
Проблема не в стиле, а в том какой пиздец из себя представляют кресты.
>но это будет намного приятнее?
Нет.
> Какие?
Из того, что в голову приходит сразу:
1. auto
2. Ссылки вместо б-гомерзких указателей (при передаче в фунцкию имеется в виду)
3. Исключения вместо передачи флажков через 10 циклов
4. Дженерики
5. Нормальные, по сравнению с C, строки
>Какие?
Самое простое RAII без очищения ресурсов на каждый чих уже настолько улучшает код и избавляет от утечек, по сравнению с чистым С, что этого одного достаточно
>1. auto
void *
>2. Ссылки вместо б-гомерзких указателей (при передаче в фунцкию имеется в виду)
Не ясно, что ты передаешь в функцию.
>3. Исключения вместо передачи флажков через 10 циклов
Отключены.
>4. Дженерики
_Generic
>5. Нормальные, по сравнению с C, строки
Обертка над сишными строками.
> void *
> _Generic
Я тебя понял.
> Не ясно, что ты передаешь в функцию.
Ссылку на объект передаю в функцию.
> Обертка над сишными строками.
И? Эта обёртка даст столько удобства, сколько ни один программист на Си в жизни не видел.
>Ссылку на объект передаю в функцию.
В чем преимущество перед указателем, кроме экономии 1 символа? Почему все объекты обладающие размером больше размера указателя не преобразуются в ссылки\указатели автоматически?
>И? Эта обёртка даст столько удобства, сколько ни один программист на Си в жизни не видел.
Никакого.
Тебе там скорее всего не покажут такое https://godbolt.org/z/hzWbGjG4j
Так что учись пока мы живы.
>void *
Значение знаешь? нетипизированный указатель
И почему это считается дурным тоном в >2000х годах.
Хотя бы потому что любой осмысленный кусок памяти в твоем компьютере имеет тот или иной формат, а лишая себя знаний о том что там хранится ты подвергаешь себя и других программистов разбирающих этот код возможности ошибиться на этот счет.
Самое смешное происходит тогда, когда через годы ты понимаешь что так писать не обязательно. И ты себя при этом ни в чем не ограничишь.
>Хотя бы потому что любой осмысленный кусок памяти в твоем компьютере имеет тот или иной формат, а лишая себя знаний о том что там хранится ты подвергаешь себя и других программистов разбирающих этот код возможности ошибиться на этот счет.
Тип void , в Си можно преобразовать в указатель на любой тип, иначе тебе бы пришлось писать function((type )param) или отключать варнинги.
Блеванул, спасибо
>>319646
>У раста нет gc, не сравнивай его пожалуйста с GO. То что они одновременно на слуху не делает их под один класс задач.
Базара нет, в расте нет рантаймового GC, с другой стороны направление языков похожее - "мы против ручного управления памятью, но мы не хотим превращать наш язык в очередного IR мастодонта, так что давайте придумаем какой-нибудь инструмент, чтобы памятью поменьше управлять". В Go запилили mark&sweep, в rust обычный reference counting + обязательный статический анализ на расшаривание мутабельных переменных. Собственно в плюсах без refcount тоже никто не пишет, а это так-то одна из форм GC
>>319681
>Лик вообразили?
Компилируемый язык без IR, без тяжелого рантайма, с gc. Если смотреть с точки зрения сферы применения, то он гораздо ближе к с/c++/rust, чем к IR языкам
>>319742
Писали бы на чем-то другом, но мешает слишком большой объем кода на плюсах, который очень дорого переписать на другой язык и который неудобно использовать в других языках. Какой-то приличный FFI есть только с C, кто бы что не пытался с этим сделать.
Преобразование из одного типа в другой в нормальных языках реализуется одной строчкой.
А передача обобщенного типа реализуется указанием что тип поддерживает какую-то функциональность, или обладает какими-то общими свойствами. В С++ это реализуется (если не ошибаюсь) через наследование, абстрактные классы и шаблоны.
В Си же непонятно что такое находится за этим поинтером в момент где эта субстанция находится. Может они это комментариями к коду указывают, не знаю.
Зря я разглагольствую о Си и С++ когда банальных вещей про разработку на них не знаю. Сорян если чушь пишу. Просто самому интересно, неужели кто-то считает нетипизированный указатель чем-то что необходимо в современном мире и при этом не является рудиментом.
Тут хочется добавить про то что ты сказал о ГЦ
> Собственно в плюсах без refcount тоже никто не пишет
Пишут только там, где это нужно для реализации безопасной многопоточности а не как в языках с полноценным сборщиком мусора. Когда каждый объект, кроме может быть стековых, будет посчитан.
>refcount одна из форм GC
Самая самая нетребовательная по накладным расходам. Без разрешения циклических ссылок.
>А передача обобщенного типа реализуется указанием что тип поддерживает какую-то функциональность, или обладает какими-то общими свойствами. В С++ это реализуется (если не ошибаюсь) через наследование, абстрактные классы и шаблоны.
https://0bin.net/paste/p8nuyOWh#+dwU6o0LINUvKPg+wHbwPE8hlaeLmjR++bXqkVX6m-s
Например, вот это можно было бы сделать через void *, но сделали через указатель на структуру, в итоге постоянно приходится явно приводить к типу. Я не знаю почему, возможно я что-то не понимаю.
https://www.opennet.ru/man.shtml?topic=connect
>В Си же непонятно что такое находится за этим поинтером в момент где эта субстанция находится. Может они это комментариями к коду указывают, не знаю.
Да или самодокументированный код.
>Зря я разглагольствую о Си и С++ когда банальных вещей про разработку на них не знаю. Сорян если чушь пишу. Просто самому интересно, неужели кто-то считает нетипизированный указатель чем-то что необходимо в современном мире и при этом не является рудиментом.
Работа с данными по указателю, как с областью памяти.
https://www.opennet.ru/man.shtml?topic=memcpy
https://www.opennet.ru/man.shtml?topic=memset
https://www.opennet.ru/man.shtml?topic=memmove
> >И? Эта обёртка даст столько удобства, сколько ни один программист на Си в жизни не видел.
> Никакого.
Сейчас ты присылаешь код в котором делаешь конкатенацию двух строк неопределенного размера в Си и при этом не обсираешь себе штаны. Я жду.
>Сейчас ты присылаешь код в котором делаешь конкатенацию двух строк неопределенного размера в Си и при этом не обсираешь себе штаны. Я жду.
https://0bin.net/paste/vv6ouKYt#6fVwAA-y02tUNvVSGZrSbuONS2DSkNmknU9mSfuJgee
Сейчас ты присылаешь мне объяснение, что хорошего есть в C++. Я жду.
Обосрался с +1.
>Пишут только там, где это нужно для реализации безопасной многопоточности а не как в языках с полноценным сборщиком мусора.
unique_ptr - это привязка вызова деструктора к фрейму стека. Т.е. частный случай reference counting
обёртка так-то говно, всякий кал типа find, starts/ends_with и прочее по хорошему должно быть реализовано как свободные функции, но в c++23 туда ещё и contains засунут
не вижу ни одной причины, по которой они должны быть именно мембер функциями, им же не надо знать о кишках строк, они могут пользоваться публичным интерфейсом
мимо
И что? Сколько раз в твоем копировании произойдет копирование строки? А выделений памяти? А если памяти не хватит, исключение или аборт?
Какие у C++ есть достоинства? Безграничный стандарт?
>Например, вот это можно было бы сделать через void *, но сделали через указатель на структуру,
Используя такую древность можно было конечно и получше если бы в википедию заглянули (tagged union) https://0bin.net/paste/unJN41wX#ElXvFbqlytv3m4u5tEaJZYMkr3rB9yKUDcP45Ajs9VY
https://en.wikipedia.org/wiki/Tagged_union
>Работа с данными по указателю, как с областью памяти.
Слава Богу 99% такой необходимости можно закопать в базовые типы вроде обобщенного массива.
>>320087
>unique_ptr - RC
Но он без накладных расходов стадии исполнения. Такой же по накладным расходам как &. Ну, там есть в результирующем бинарнике небольшой оверхед, но он связан только с необходимости поддержки разных форматов вызовов. И концетпуально никаких ограничений не накладывает
лол, в худшем случае динамической памяти выделится столько же, сколько и у тебя, в лучшем - будет SSO, который твой велосипед офк не делает
про копирование бред какой-то
>А если памяти не хватит, исключение или аборт?
А что ты в программе сделаешь, если у тебя памяти не хватит?
> Писали бы на чем-то другом, но мешает слишком большой объем кода на плюсах, который очень дорого переписать на другой язык и который неудобно использовать в других языках. Какой-то приличный FFI есть только с C, кто бы что не пытался с этим сделать.
Получается правда с++ лучше не учить сейчас?
Смотри, преобразование char * в std::string, скорее всего будет реализовано через выделение памяти + копирование. Существуют оптимизации стандартных библиотек, но стандарт такое поведение не определяет, насколько я знаю. Могу ошибаться. Уже 2 выделения и 2 копирования. Далее, если ты захочешь их "сумму" другой строке std::string = std::string + std::string, то произойдет еще 2 копирования и 1 выделение памяти. В итоге, 4 копирования и 3 выделения памяти, если повезет и строки будут вмещаться в заранее выделенную кучу, то всего 1 системный вызов будет, а если строки длинные, сколько системных вызовов будет? 3?
>про копирование бред какой-то
Где тут бред?
>>320113
Если про пример, то выход. Там же все ясно видно, проверка на NULL с последующим успешным выходом, потому что мне не интересна работа и код завершения, так как в случае успешного выполнения в stdout поступит вывод.
>https://0bin.net/paste/unJN41wX#ElXvFbqlytv3m4u5tEaJZYMkr3rB9yKUDcP45Ajs9VY
Там юнион в структуре занимает `sizeof(int) x 2`, а вообще пример не понятен.
>преобразование char * в std::string
Ты не показал что там 2 выделения и 2 копирования. Просто сказал бездоказательно.
>Далее, если ты захочешь их "сумму" другой строке std::string = std::string + std::string, то произойдет еще 2 копирования и 1 выделение памяти
А как тут должно быть? Если тут три строки в результате из двух то так и должно быть. Если ты хочешь к первой прибавить вторую. То есть у тебя всего две строки. То произойдет 1 реаллок первой и в нее 1 раз скопируется вторая.
>Смотри, преобразование char звёздочка в std::string
если я внутри плюсов, то я, скорее всего, си-строки не юзаю и у меня на руках будут на руках два std::string, никаких преобразований не будет
если одна из строк char const звёздочка, то у операторов + и += для строк внезапно есть перегрузка под этот случай, а если обе строки сишные, то я просто создам строку сразу нужного размера и сделаю в неё += view на сишные строки (чтобы размер строк не пересчитывался лол)
в плюсах нет оператора+ для двух const char звёздочка, нельзя их просто приплюсовать
короче, тут не будет никаких преобразований сишных строк в std::string
>Далее, если ты захочешь их "сумму" другой строке std::string = std::string + std::string, то произойдет еще 2 копирования и 1 выделение памяти.
ну да, выделится память под строку, в которой уместятся две сконкатенированных, и туда эти две и скопируются, в твоей реализации ровно это и делается лол
>Ты не показал что там 2 выделения и 2 копирования. Просто сказал бездоказательно.
Ты первый день программируешь? Смотри адреса.
https://godbolt.org/z/7KKzWqKE4
>А как тут должно быть? Если тут три строки в результате из двух то так и должно быть. Если ты хочешь к первой прибавить вторую. То есть у тебя всего две строки. То произойдет 1 реаллок первой и в нее 1 раз скопируется вторая.
Это был пример с 2-ойным преобразованием char ⚹ -> std::string, в этом случае будет 2 выделения памяти и 1 выделения для конечной строки. Можно сделать и через std::string(argv[1]) += char ⚹, тогда будет 2 выделения памяти для std::string = argv[1] и std::string += argv[2], но это не отменяет моих слов.
В реальности std::string резервирует на несколько байт больше памяти, поэтому при коротких строках будет 1 выделение, но при длинных будет 2 выделения и в худшем случае 2 системных вызова. Но количество копирований останется равно количеству преобразований.
>Там юнион в структуре занимает `sizeof(int) x 2`
Что поделать, раньше не было никаких абстрактных классов, наследования и шаблонов.
>а вообще пример не понятен.
Хоть я и не программист на Си или С++, но даже я догадался https://godbolt.org/z/WxfY7zW1q Гораздо понятней чем непонятно что.
>Ты первый день программируешь? Смотри адреса.
Но там все-таки не показано что два выделения и два копирования на одну строку. Зачем ты меня троллишь?
>если я внутри плюсов, то я, скорее всего, си-строки не юзаю и у меня на руках будут на руках два std::string, никаких преобразований не будет
Параметры запуска передаются в виде "сишных" строк, у тебя нет выбора.
>если одна из строк char const звёздочка, то у операторов + и += для строк внезапно есть перегрузка под этот случай, а если обе строки сишные, то я просто создам строку сразу нужного размера и сделаю в неё += view на сишные строки (чтобы размер строк не пересчитывался лол)
Удивительно, тогда разницы никакой не будет в исходном коде, но разница в производительности будет, кроме того, что будет если памяти не хватит исключение, аборт или ожидание, что случится внутри std::string?
>короче, тут не будет никаких преобразований сишных строк в std::string
Копирование, выделение памяти внутри std::string уже является преобразованием "сишной" строки в std::string.
Я кажется понял чего ты просишь. Ты хочешь создания объекта string inplace прямо из char* с поглощением владения последним.
Тут https://stackoverflow.com/questions/65055864/construct-stdstring-from-dynamically-allocated-char-array-in-an-owning-way советуют использовать string_view или unique_ptr. Возможно в библиотеках есть.
Но это не значит что язык такое не позволяет. Это претензия к стандартной библиотеке.
https://quick-bench.com/q/q6drxZkC_FC3d86hq8S4uHmVAgc
Может быть не правильно понял, что ты хотел сделать, но в любом случае C++ будет медленней.
А где вообще этот выигрыш в скорости нужен? Я понимаю если это софт для пво, который должен ракету перехватить пока она не ебнет в цель, ну или когда ОС пишешь, но условным десктопным приложениям это нахуя
Мимо
>но условным десктопным приложениям это нахуя
Процессорное время у всего кода одно, если одна программа потребляет много, то на других это тоже сказывается.
Без оптимизации показатели все равно в пользу 1 варианта.
https://quick-bench.com/q/noiN41EsJXLPSt9JQltxLo_5nh4
https://github.com/google/benchmark/blob/main/docs/user_guide.md#preventing-optimization
нужно делать DoNotOptimize + ClobberMemory, а не просто выключать оптимизации компилятора, какой вообще смысл их выключать, когда мы тестим скорость, лол
на больших вроде примерно одинаково, сишные только самую малость быстрее, хз хз, я первый раз бенч делаю, не уверен, что всё правильно сделал
https://quick-bench.com/q/0sU_YZEAMyFkRMRvn0miCWyIDaI (это который пикрил)
а на маленьких у меня почему-то сильно проигрывает мой вариант, но выигрывает наивный?
https://quick-bench.com/q/uKXSaS7Pw1UPvk0BWqy4Cc91K88
но на кланге std::string выигрывает, мб проблемы libstdc++ я хзхз, я слишком тупой чтобы понять чому так
https://quick-bench.com/q/v50CqNBkbz9hw9vd8pcj2shJm5w
не знаю, но с твоим бенчем очевидно что-то не то, смотри, он сам себе проигрывает
https://quick-bench.com/q/oE_osrLAAkkJEnTaZ_5MmNhTJFk
Хорошо, но в любом случае много всего пишется на каком нибудь питоне и подобном, который в десять раз медленнее, а вы тут своими с и с++ высчитываете у кого код на микросекунду быстрее
>мб проблемы libstdc++
а лол там в обоих случаях он выставлен ну я хз, я не могу асм читать энивей, и на си чистой в жизни писать никогда не собираюсь
Естественно, без оптимизаций конкретный код сильно быстрее абстрактного.
Но, как уже было продемонстрировано тобой же, в любой хоть сколько-нибудь нетривиальной логике очень просто обосраться. Собственно, для снижения когнитивной нагрузки и пишется (a + b), вместо твоего шедевра.
Вопрос с производительностью более тонкий. Простой ответ на него такой -- пока не доказал, что нужно оптимизировать, не делай этого. Иначе просто лишний раз жопу себе порвёшь. Нет, это, конечно, полезно, но когда учишься, а не работаешь.
>какой вообще смысл их выключать, когда мы тестим скорость, лол
Потому что я одной ногой уже во сне и мне лень этим заниматься.
ДРОЧЬБА на скорость - детектор студентика-дебила, или просто неуча. Потому-что скорость она не в слиянии двух строк, а в гораздо более сложных вещах.
Да и скорость почти нигде нахуй не сдалась в нашем шлепательном ремесле
если ты настолько тупой, что не можешь даже избежать лишнего преобразования сишной строки в std::string, то куда тебе до чего-то более сложного, ну камон, ты же не копируешь векторы по значению без необходимости, вот это то же самое
Друг, я достаточно умен, чтобы не париться из-за такой полнейшей хуйни как преобразование сишной строки в std::string.
И в итоге получится так, что любое интерпертируемое говно со сборкой мусора трахнет твой говнокод тупо хотя бы из-за того, что ты насрал строками в память. Зачем вообще тогда писать на плюсах? И те самые сложные вещи, где ты находишь скорость, будут проявлять себя только на достаточно больших инпутах, когда оверхед копирования строк по кд и прочей "полнейшей хуйни" станет сравнительно малым по сравнению с основной работой.
>а на маленьких у меня почему-то сильно проигрывает мой вариант, но выигрывает наивный?
Оптимизация std::string для коротких строк, в котором не происходит выделение памяти, а используется внутренний буфер.
>не знаю, но с твоим бенчем очевидно что-то не то, смотри, он сам себе проигрывает
Все то, он сам у себя выигрывает.
>Днбичи обсасывают строки, которые в 90% кода используются только для логирования.
У тебя логирование бесплатное?
Там нет оптимизаций со стороны программиста, там только валидный код на C и C++.
Относительно общего объёма вычислений - да. Я же не текстовый процессор пишу. В большинстве проектов достаточно подцепить какой-нибудь spdlog и заниматься своими делами. Ну разве что поглядывать за количеством вызовов.
Очевидно, что пишешь cuda ядра, ASM вставки/интринсики.
смотри: если хочешь чтобы у тебя си-строка побыстрее конвертировалась в string, либо сделать конкатенацию сишных строк с преобразованием в string, то есть парочка приемов оптимизации:
первый, это то что есть перегрузка конструктора string и член-функция append которые принимает не только сишную строку, но и количество копируемых символов вторым параметром, соответственно не надо там пробегать высчитывать длину сишной строки
второй это то что в классе string есть члены-функции reserve и shrink_to_fit, в случае когда у тебя уже известны (либо примерно известны) размеры сишных строк из которых ты хочешь сделать объект string, используешь эту парочку функций
по итогу если заранее знаешь размеры сишных строк, то у тебя будет 1 выделение памяти и 2 копирования
>если хочешь чтобы у тебя си-строка побыстрее конвертировалась в string
Не хочу.
> соответственно не надо там пробегать высчитывать длину сишной строки
Чтобы узнать длину сишной строки, нужно найти ее конец.
>у тебя будет 1 выделение памяти
Выделение для преобразования, выделение для копирования, минимум 2.
Научись читать целую ветку, а не отдельные ответы. Там все уже расписано много раз.
>Чтобы узнать длину сишной строки, нужно найти ее конец.
зачастую ты уже знаешь длину сишной строки
к примеру в реляционных субд строковые поля фиксированной длины, и когда ты пишешь с++ обертку для работы с интерфейсом этой субд это обычный прием оптимизации..
>Выделение для преобразования, выделение для копирования, минимум 2.
используешь конструктор который принимает сишную строку, будет только одно копирование
Да, инструкция или оператор (но не операция, которая operator). Никакое это не выражение, у выражения есть результат какого-то типа. его можно присвоить соответствующей переменной, либо сделать из выражения инструкцию добавлением ; в конец.
Для меня оператором всегда было то, что на пикриле.
Блять, десять терминов и на все одно слово.
Да просто дебилы придумали перевести operator как операция и начали городить вокруг этого костыльные термины.
хорош маняврировать
если надо смотрим ассемблерный листинг, если надо то влючаем флажек "заходить в код библиотек" и смотрим что там в потрохах stl
никакой магии нет, это белый ящик
using namespace std;
void main()
{
long int x = 64310, y = 54, z = 0;
z = x + y;
cout << x << "+" << y << "=" << z;
cin.get ();
{
Короче, помогите мне, пожалуйста. Для вас нихуя, а мне спасёте жизнь.
Суть: препод сказал изменить код так, чтобы вычисления были в cout , как я понял. Напишите, пж.
Началась новая эпоха низкоуровневых и среднеуровневых языков, написание своих библиотек и фреймворков.
>С++ теперь единственный перспективный язык в нашей стране.
Почему?
>Началась новая эпоха низкоуровневых и среднеуровневых языков
Нет.
>написание своих библиотек и фреймворков.
Зачем?
Будь это так, я бы первый перекатился из ебаной ненавистной жабы в любимые крестики.
Тут как договоришься. Для меня, assertion = жопу ставлю, а statement идет как утверждение, предлагаемое к рассмотрению.
Если больная логика, то можно перевести, как "установка состояния", "изменение состояния", "смена (переход) состояния" или "шаг", хотя не отражает смысл исходного значения, но имхо наиболее ясный вариант для меня, слово "выражение" у меня в голове создает картину каких-то математических формул, а "утверждение" ассоциируется с assert, "операция" с Украиной.
Потому что она на сишке, с кучей макросов, кроссплатфооменных хаков, местами имитацией ооп (через struct с десятком указателей на функции), void× и size_t (а то и int) и это всё хер отследишь и даже статик анализаторы мало помогают. Читал её код и плакал.
Почему она самая популярная? Она кажется вообще даже одобрение от какой то американской криптоорганизации получила, лол. Разве не лучше использовать Crypto++ или что то подобное.
> size_t (а то и int)
Как? Мне в вузе на первой паре сказали, что нигде кроме контестов так писать не надо, потому что потом заебешься искать ошибку
Там же просто сухая информация. Мне бы что-нибудь с примерами использования, объяснением каких-то неочевидных фич или спорными моментами, в которых легко обосраться.
Неужели нет никаких статей/книг про это?
https://www.youtube.com/channel/UCvmBEbr9NZt7UEh9doI7n_A
У этого челика из МФТИ последние лекции для баколавра были про шаблоны и их применение.
>написание своих библиотек и фреймворков
А на какие деньги это все будет писаться и поддерживаться? Вон, яндекс тратит дохуиллиарды на поддержание своей самописной инфраструктуры в актуальном состоянии.
Разработку своих велосипедов в основном только фаанги могут позволить. Либо какие-то узконаправленные стартапы.
Дефолтное ковыряение крудов в банке или гос энтерпрайзе не нуждается в собственных велосипедах, всегда можно взять старую джаву8 и спринг4 для больших проектов, а для тех, что поменьше пхп5 и битрикс с 1с, где еще нет или не было никаких закладок против злых русских, это проще и дешевле в разы.
страуструп "дизайн и эволюция с++" 15я глава
страуструп "язык программирования с++, специальное издание" 13я глава и приложение в13
это чисто база, написанная еще тогда когда страус не был ленивой задницей
Coplien, James O. "Curiously Recurring Template Patterns" - crtp одна из основ практической шаблонной магии на крестах
Александреску "Современное программирование на с++" - ну это база метапрограммирования на с++, в сегодняшних стандартах языка ты будешь делать все то же самое, но просто с применением новых языковых расширений, а суть не поменяеться
ну и есть толстая книжка вандевурд, джосаттис, грегор "шаблоны с++", где собственно попытались все запехать, и основы, и crtp, и метапрограммирование, неплохая как по мне, для новичков сойдет
ты там зайди на hh
крестовики больше всех провалились по вакансиям
мы теперь совсем не нужны здеся
Затем берется событие из массива событий, туда подставляется нужный указатель из массива указателей, и отсылается виджету событие измени цвет.
Нормальная идея, или шиза?
Лично меня не устраивает то что цифры приходящие в поток который читает цифры, так сказать не весь свой диапазон задействуют. Ну вот например пришли цифры 2 и 1 и значит во 2 строке и первом столбце должен зажечься квадратик, а 2 например 2 и 3, не должно существовать квадратика, а 2 и 4 должен. И так пропусков может быть много, и жалко память тратить. Хотя че эти жалкие байты экономить.
Или же связать все квадратики с сигналом из потока который читает цифры, пускай все квадратики получают сигнал в котором будут передаваться цифры, и если квадратик обнаружил свои цифры, то он загорается, а ну так то полегче и покрасивше будет.
Кто?Я?
Если кто не понял, то квадратики расположены на экране, просто они меняют цвет если пришли цифры зажигающие нужный квадратик
Просто в шарпе, например, такой гарантии нет, и приходится использовать либо using, либо try-finally.
Есть ли в плюсах какие-то такие заморочки?
Один сигнал для менеджера квадратиков, он проверяет существует ли такой и даёт ему сигнал на изменение цвета.
Есть при удалении объекта из кучи, для стековых - при выходе из скоупа или исключении. Т.е.если ты создаёшь все на стеке и используешь умные указатели - всегда.
Всегда, но только при нормальной работе программы, нестандартное (системный вызов, сигнал завершения и т. д.) завершение программы или потока не гарантирует вызова деструктора.
Ты можешь создать объекты на куче, нормально завершить программу и деструкторов не будет.
Потому что вызова деструктора изначально не было, а не потому что он не вызвался из-за каких-то языковых проблем.
надеюсь ты студентик еще и это курсач твой
а если ты РАБотаешь уже то земля пухом твоей фирме и отдельный привет службе hr
хихихи
Тебе скинули >>321953 норм курс, но он на базовый поток. А так, чтобы ты не терял своё время, советую ознакомиться с тем, что тебе придётся понять и освоить если хочешь вкатиться в C++.
http://mesyarik.ru/17/cplusplus_course.html
К слову, это только язык. Дальше там на ФПМИ есть ещё куча курсов для C++, в которых учат писать качественное ПО. Ну и ещё есть курс где рассказывается БАЗА для программирования.
Если тебе не страшно, если ты на 100% уверен что тебе не интересен ВебДевелопмент, и никакие там C# с Java, то... Добро пожаловать..
Чуть не забыл, дальше ещё надо бы алгоритмы подучить, там тоже на ФПМИ есть. Но, если ты не учился на матфаке, будет тяжко вкатиться в эти дебри (манеру объяснения). Ну, на этот счёт есть курсы МГУ / МФТИ по матану и линалу, там по сути студентов подводят к этой философии изложения материала.
Гугли курс метапрограммирования на C++ от ФПМИ, там должен быть плейлист с 10 видосами как минимум.
Не советую в ближайшее время использовать Qt. Они уже сейчас начинают хуйню творить в отношении русскоязычного сообщества.
Ну у меня пока все работает
Для закрытого и коммерческого ПО стало проблемно использовать Qt, потому что оплатить и скачать оффициально нельзя из РФ, для открытого и некоммерческого можно использовать.
Что читать дальше?
Быдлу будет сложно вкатиться из-за большого порогового входа. Мб тебе выбрать что-то другое?
можно. Ты достаточно прочитал, чтобы сделать какую-нибудь хуевую консольную змейку или тетрис, например
Придумай. Почему у меня в вузе первокуры сами проекты придумывают и им потом на собесе говорят "Малаца"? Вы все спрашиваете блядь. Ладно книги, это нормально, но что тебе писать это странно. Неужели тебе самому не интересно что то сложное и большое написать? Вот это для себеса подойдет
Зависит от реализации, если просто возьмешь готовый движок, то ты написал игру на готовом движке, еще одну. А если ты напишешь свой движок (даже хуевый и примитивный), но на нем можно будет построить несколько игр, даже 2д, даже визуальных новелл, но это будет удобно, то имхо будет интереснее выглядить.
Но там есть своя библиотека какая-то, а я не могу найти её целиком в интернете, получается только частями какие-то функции выискивать и вставлять себе((
Кто читал, помогите дурачку
Вопрос по теме. Какие вообще гуи есть годные кроме Qt, а то всегда как только заходит тема про гуи, то только про него говорят. Это такая прям годнота или конкурентов просто нет?
Мимо
Как будто здесь кто-то пишет коммерческие проекты. Ну а если и пишет, то явно это не человек который что-то там решает и выбирает какие фреймворки/библиотеки использовать
Для крупных проектов GTK, для мелких xvWidgets. Qt лучшее, что есть на c++ и другого не будет. На данный момент на c++ GUI пишут скорее как исключение: чутка под эмбед, чутка под мобилки и чутка под десктоп. Типичный проект - это связка с web или C#/Java (React, WPF, Spring).
https://www.youtube.com/watch?v=zw6V3SDsXDk&list=PL4_hYwCyhAvZLYM41IC4JMnrPpNLbAVL2&index=2
Однако лекций всего 6, а в первом же видосе есть список тем, и лекций там 15
Вопрос: никто не знает, где можно добыть полный набор лекций? Или это проприетарщина мфти? Или еще может просто не все выложили?
И, может, кто проходил его. Насколько годный? Мне по вводной лекции показалось, что прям ок.
В целом - да. На c++ пишут десктоп для гос. нужд под всякие Astra Linux. Либо доделывают проекты с долгим жизненным циклом. Иногда бывает софт типа графических редакторов или для работы с видео и аудио (хотя многое уже на wpf переехало).
ага ага, поэтому яндекс переписали такси с питона на плюсы, все потому что только легаси осталось. Не позорься, а
кому нужна производительность - пишут на плюсах, все.
Плюс есть области где кроме плюсов пока никто ничего предложить не может - селф драфвинг, очень часто комп зрение, бэк реже, но есть
Или ты просто 11 классник и наслушался неудачников на дваче?
На С++ переписывать такие произведения никто не собирается, посоветуют взять железо помощнее, если это клиентское ПО, или выделят еще пару серверов для микросервисов, если серверное.
Ну в целом gui стараются абстрагировать и отделить от остальных подсистем. Прогресс не стоит на месте и многие проекты хотя бы раз меняли фронт. Допустим раньше был MFC и с него перекатывали на Qt или WPF. Я видел немецкий enterprise, где фронт на Qt выкинули нахуй и заменили на Web (только выиграли).
Поэтому да, критическую по производительности внутрянку пишут на cpp, а остальное на том, на чём быстрее и с чем меньше ебаться при дальнейшей поддержке (фактически на c++ писать не выгодно по деньгам).
Бывает ещё в эмбед ситуация, когда ресурсов у железки мало и жабу с дотнеткорами не впихнуть - там страдают с Qt или библиотечками поменьше.
> стараются абстрагировать и отделить от остальных подсистем
Я пока не сильно разбираюсь в этом. Что это вообще за процесс соединения условного кода на с++ с гуи на условном электроне?
Есть какие-то библиотеки для этого или какая-то еще штука уже встроенная в электрон и другие фреймворки? Это вообще сложно делается или в два клика?
Ну я даже не знаю куда тебе пояснять...
Портирование кода с питона это обычная практика. Например головастики пишут алгоритмы и proof of concept на нём, а потом его уже дрочат под конкретную платформу с avx, cuda, opencl, intrinsics на c++. Причём пилится либа с биндами для питона, а остальная бэкендовская часть на питоне же и остаётся.
По зрению ты тоже фантазируешь. Математика gbitncz на c, c++, fortran. Бэк бывает написан на Go/Rust/c++/java/python. Фронт - чаще встречается web.
Не знаю, как оно в JS устроено. Но вот например в жабе есть JNI. Там делается так - пишешь класс на java и помечаешь его методы как native. Отдаёшь его компилятору джавы javac с ключиком и он тебе генерирует c++ заголовок .h. Цепляешь его и либы jni из java sdk к своей библиотеке на c++ и реализуешь его методы. Компилируешь в dll. Дальше в коде Java загружаешь dll одним вызовом и используешь свой java класс.
В итоге у тебя есть абстрактный java класс с набором методов без реализации (на java). Потом ты можешь выкинуть dll и запилить эти методы на чём-то другом.
"Требований к производительности" нет ни у Микрософт тимс, ни у слака (с миллиардами установок у каждого) - а у тебя есть, да?
Если разговор идет о программе, делающей что-то трудозатратное - числодробилке там, или видеоконвертере - то ГУЙ пишешь на электроне\шарпе\прочем.
И далее собираешь из гуя и числодробилки общий продукт, где они общаться могут хоть через пайпы, хоть через сеть, хоть через прости-господи http. Ну, или через нативные вызовы, любой язык умеет дергать сишный код.
Это не сложно, скорее муторно, но в долгую очень помогает.
Реализация может быть разная - например вызовы библиотек Qt через JNI, как я описал выше, либо это общение с JS фронтом через отправку REST запросов.
> "Требований к производительности" нет ни у Микрософт тимс, ни у слака (с миллиардами установок у каждого) - а у тебя есть, да?
А потом такие обезьяны начинают свое говно подчищать спустя годы и получается ситуация как с блендером, когда сайклс ускорился в 3-10 раз после одной обновы. Но производительность нам не нужна конечно, у нас таких требований нет, напишем говно хрен знает как, а потом понадеемся что через 15 лет кто-то исправит
> Портирование кода с питона
не путай портатирование и переписывание в связи с тем, что питон не тянет нагрузку
> По зрению ты тоже фантазируешь
нет. Нейросети - питон. Деплой - плюсы. Не веришь - тот же хуавей набирет на зрение спецов со знанием с++. И не только хуевей
> Бэк бывает написан на Go/Rust/c++/java/python
согласен, бэк на плюсах себе позволяют только топ конторы типа яндекса и пр. В целом, я и написал бывает. И это не всегда легаси.
Пока ты будешь делать ПРОИЗВОДИТЕЛЬНО и на С++ - говношлепы уже 100% рыночка займут. В этом и суть.
Переписывать можно сильно позже, только business justification у гуйни нет для этого
https://stackoverflow.com/users/85371/sehe?tab=topactivity
>портатирование
чёт кекнул с этого
>Нейросети - питон.
В моём проекте cети Кохонена, каскады Хаара, AdaBoost - всё на плюсах, avx и cuda. Но тебе ничего не мешает педалить на Python фреймворках типа PyTorch позади которых стоят всякие blas/lapack, писанные на c/c++/fortran.
>Деплой - плюсы.
Вообще похуй на чём он.
>хуавей набирет
Если позиция - researcher, то у них в требованиях Python, если sw developer, то c++. То есть там такой же процесс python --> cpp, как я и описал.
у меня есть профиль на SO с 4к+ репы. Просто сидишь эфпячишь 24х7 и очень стараешься успеть ответить самым первым.
Сейчас это пиздец как сложно, т.к. все легкие вопросы отвечены - та кчто надо успеть ответить, пока мочераторы не помаркают вопрос как дубликат.
Если ты можешь бустить аккаунты на SO очень быстро - то тебе проще работать программистом на 100 баксов в час на удаленке, или онсайт в Гугле\ФБ L5+.
Если ты не можешь их бустить быстро - то раздавать листовки на улице будет выгоднее
Ну типа тебе деньги а им бонус в CV. Плюс они, как и азиаты, падки на тщеславие.
> Пока ты будешь делать ПРОИЗВОДИТЕЛЬНО и на С++ - говношлепы уже 100% рыночка займут. В этом и суть.
В каком мире мы живем...
> чёт кекнул с этого
бля да, тоже проорал
> Но тебе ничего не мешает педалить на Python фреймворках типа PyTorch
Ну я соглашусь с тобой частично в том, что питон может в некритичных секциях прям в деплое вытеснять плюсы
> Вообще похуй на чём он
Деплоить на сервере - похуй. На условной тачке ты го никуда не засунешь
насчет хуевея такое ощуещение. что мы достигли соглашения, потому что твой ответ, в целом, подтверждает мой
Деплой вообще не про языки программирования, это devops. Чем отличается "сервер" от "условной тачки"? Go без проблем тиражируется образами для запуска в контейнерах и оркестраторах.
>такое ощуещение
что ты виляешь жопой, дав подливы
Ебанутый?
> говорю, что большие конторы пишут на плюсах, говорю что он там, где нужна производительность, привожу пример с хуевеем
> ХУАВАЙ ПЛЮСЫ НА СЕ ДА ДА
> соглашаюсь
> ЫЫЫ ОПОДЛИВИЛСЯ ВИЛЯЕШЬ ЖОПОЙ
дебич
> Деплой вообще не про языки программирования, это devops.
ой бляя. Ну давай, девопси в юпитере нейросети в докере своем.
Я говорю, что как только нужно уйти за пределы маня ноутбуков с обучением и превратить то что нахуярили дата сентисты в производительный код с применением того же тензоррт, то тебе , нихуя себе, понадобится не девопсер, а прогер на плюсах
Сначала почитай, что такое deployment, а потом поясни как он связан с cpp:
https://en.wikipedia.org/wiki/Software_deployment
>>324813
хватит подливу по треду размазывать
в том, что пишет хуйню
>>324810
Чем сервер отличается от тачки? Ну, как минимум требованиями к скорости. У тачки они выше. Твои докеры в связке с го идут нахуй. Мы у себя паримся над количеством копирований, и том, как в памяти выровнять точки траектории робота, а ты все еще думаешь, что твои контейнеры с го туда можно впилить
Бля, опять ты, иди нахуй.
Ну то есть ты думаешь, что твоя прога, помещённая в контейнер, сразу начинает потреблять x2 по памяти и замедляется в два раза? Или что контейнер сам жрёт х10 оперативки? Или ты не понимаешь, что на Go пишется не алгоритм робота, а бэкенд, в котором твой робот это лишь часть пайплайна или многокомпонентной системы?
Там просто не могу врубиться с калькулятором в 6 главе, а остальные учебники будто просто теорию подают и в конце глав вопросики лёгкие.
Да я думаю, что можно легче что-то почитать, а потом вернуться к сложному. Разные источники информации использовать
Сап. Что я делаю не так? Решаю сейчас задачку, в которой необходимо впихнуть в словарь "базу данных" из тхт, связку логин/пароль и потом сравнить с вводимым в консоль. Столкнулся с проблемой, что, после слэша чтение файла тупо прекращается, и все, что ниже первой строки в словарь уже не входит. Как это пофиксить?
Проблема в алгоритме, которого у тебя нет, а есть ошибочное использование getline.
>Аноны, можете объяснить смысл ООП и классов в частности?
Определение функциональности, каких-либо данных.
>Везде используются довольно странные примеры
Возможно они используют ООП, как "Все используют и вообще современно!".
>ибо эту хуйню можно спокойно запихнуть в функции.
Да, но данные и функции условного списка удобнее представить в виде класса, чтобы было удобнее и яснее List.Length, List.ValueBy, вместо list_length(struct list list), list_value_by(struct list list, ...).
>Возможно они используют ООП, как "Все используют и вообще современно!".
Ну а мог бы привести пример, где классы необходимы? Просто до этого я видел только то, как долбаебы умудряются написать 80 строчек класса, когда это можно запихнуть в 10 в функции или вообще в мейне.
> долбаебы умудряются написать 80 строчек класса
Тебе за код построчно платят что-ли? Эти 80 строк могут тебе упростить взаимодействие с данными в разы.
И чет слишком сильный перевес, есть конкретный код?
> могут тебе упростить взаимодействие с данными в разы.
Как минимум не у тех, кого я приводил выше.
Один додик создал класс, в полях определил две переменные, унаследовал их в другой класс, в одном методе их перемножил, во-втором вывел.
Вместо того, чтобы написать:
int a,b;
cout << a*b;
И ВСЕ
Ты думаешь, в реальном софте всё происходит так?
> Один додик создал класс, в полях определил две переменные, унаследовал их в другой класс, в одном методе их перемножил, во-втором вывел.
Если он сделал это не в демонстративных целях, то его мотивация действительно не ясна, но вдруг он просто хотел показать тебе, как можно делать?
возможно тебе стоит посмотреть с другой стороны на классы в с++ как на возможность создания в языке пользовательских типов данных, с правилами конструирования объектов этих классов за счет предоставления пары конструктор-деструктор, с правилами взаимоотношений между типами за счет предоставления специализированных конструкторов и возможности перегрузки оператора приведения типа, с возможностью создать иерархию пользовательских типов (в том числе и гомогенную) через наследование..
механизмы наследования классов и виртуальные функции предоставляют динамический полиморфизм, механизм шаблонов дает возможность статического полиморфизма, перегрузку свободных функций можно рассматривать как случай ad-hoc полиморфизма..
ну и опять же классы предоставляют банальную инкапсуляцию данных и кода что их обрабатывает, с разграничением доступа..
с++ не концептуальный язык, скорее это такая солянка из необходимых семантических и синтаксических механизмов, добавленных поверх языка си..
Мог бы ты объяснить че за алгоритм и почему я неправильно использую гетлайн? Я с этой хуйней уже вторую ночь сижу.
То есть суть std::vector в том чтобы все данные в нем лежали друг за другом без дыр в памяти (из-за чего можно делать всякие си финты типа &v[0])
А что тогда произойдет тут:
std::vector<std::vector<Tile>> map;
map.push_back(std::vector<Tile>{...});
map.push_back(std::vector<Tile>{...});
map.push_back(std::vector<Tile>{...});
А теперь:
map[1].resize(...)
Как теперь будут лежать данные, если я сделаю &map[0] (или map.data())?
>Как теперь будут лежать данные, если я сделаю &map[0] (или map.data())?
Так же, как и лежали.
#include<math.h>
using namespace std;
int main()
{
int num1, num2, result1, result2, result3, result4, result5, result6;
cout << "Enter number 1: " << endl;
cin >> num1;
cout << "enter number 2: " << endl;
cin >> num2;
result1 = -num1 + sqrt(((num1^2) + 3 num2)) / (2num2);
result2 = sqrt((3 + num1 num2 / 4 (num1 ^ 2)));
result3 = 6 - abs (num1 num2) / sqrt(5-(num2^2));
result4 = (exp(num1 + 7)) sqrt (37num2 - (num1^3));
result5 = sin(num1) + ((num2^2) / cos(2num1) + 23);
result6 = tan(num2) - abs(num1 - 3*num2 + (2 / sqrt(num2+4)));
cout << "result: " << result1 << endl << result2 << endl << result3 << endl << result4 << endl << result5 << endl << result6 << endl;
cin.get();
}
Лабу сдаю, эта хуйня не работает. Помогите, пж.
C чего бы? Как он выделит под них память, если эта память там уже занята следующим элементом?
Потому что после map[1] идет map[2] который должен быть ровно за map[1]
Это же не лист в котором память может дергаться из любого места
https://godbolt.org/z/1r6vnvGsd
Ты изменяешь размер памяти внутри вектора, а не сам вектор, он у тебя имеет константный размер.
>Так вектор гарантирует, что данные внутри него идут подряд.
Да.
>Если ему не получится довыделить память для новых элементов, то нужно переаллоцировать.
Да.
Вектор внутри это как структура
struct vector {
int size;
int allocted;
void⚹ data;
}
В ней объекты по указателю data лежат последовательно в памяти. Всего их size, а allocated это сколько может влезть без реаллокации. Как только место заканчивается - выделяется новый блок побольше, в него копируется старый и адрес нового блока ставится в data.
А вектор векторов это такая же структура, только data указывает на список структур vector и ведёт она себя также.
std::cout << ⚹p;
Вот так пишут хеллоуворлд хацкеры.
Слишком просто. Надо прихуярить шаблоны.
БЛИН ПОМОГИТЕ!!!! Скомпилировал код, а у меня компьютер выключился, что делать?!?!??!??!
https://www.toptal.com/developers/hastebin/ceniwemajo.cpp
Ну хорошо, но все равно со стрингами и чарами проблема, стандартный << не работает.
>Вряд ли есть способ хранить отдельный бит.
Есть, но память будет выделяться побайтово, поэтому <8 бит будут размером 1 байт.
>Я думаю, там используются обычные байты, в которых упаковыны эти биты.
1 байт = 8 бит.
>Выигрыша в памяти тогда никакого нет, вопрос в удобстве?
Говно без задач.
Кстати, без шуток, как-то разбирался с винапи, в частности с перехватом и отправкой событий клавиатуры.
Нажимаю билд (не запуск даже) - что там началось... Я думал мне сейчас спецназ дверь вынесет. Такой визг из антивируса стоял, как будто его все китайские хакеры одновременно вскрывают.
720x1016, 0:10
Мне ебаная винда не дала не давала запускать простейшее клиент-серверное приложение с сокетами, хотя я это приложение написал и собрал в MVS под бдительным надзором большого брата. Не заработало, пока не отключил виндоус дефендер и брандмауэр.
Вот так вот нашим миром управляет глупость.
все же не стоит так упрощено объяснять внутреннее устройство контейнеров стандартной библиотеки, в которых управление памятью вынесено в аллокаторы, являющимися по сути менеджерами ресурсов
ответ на этот вопрос ты найдешь загуглив по теме "валидность итератора"
ну опять же проблема эта не нова, и в си был тот же самый подводный камень, валидность указателей
Подскажите IDE под линукс, желательно опенсорс.
Вимодебилов не слушай
У тебя что-то с блоком питания.
Да? спасибо, не знал.
Сейчас у меня возникают большие трудности с выполнением лабораторных работ для универа: даже посмотрев какие-то гайды по теме в Ютубе, как подступиться в решению задачи — мне непонятно, и я бесконечно далёк от того, чтобы писать что-то за пределами элементарщины. Как это фиксить — мне пока не особо понятно
Не знаю, как преодолеть этот барьер, когда вроде познакомился с темой, а написать ничерта не можешь — у других в моем окружении такого нет, и они продвинулись гораздо дальше меня, хотя кроме Гоши Дударя на Ютубе ничего не смотрели. Так же плохо у меня со всеми математическими предметами, должно быть, в целом слабые способности аукаются мне и в этом деле
Сейчас я стал решать задачи из курса Stepik и тупо заниматься больше. Скачал книжку Трупа Страуса, стал смотреть канал Simple Code на Ютубе. На Си кодить потерял смысл — скоро переход на С++
Может, будут какие-то советы? Какие-то ошибки в том, как я занимаюсь
Как стал заниматься больше, вроде бы, стал получать удовольствие от процесса. Может, когда-нибудь я напишу какую-нибудь интересную программку для себя. Я также стал задумываться о том, какие алгоритмы имеют разные штуки из повседневности, те же турникеты на входе в универ. Но когда вижу более способных в окружении, а более способные в нём вообще все, ловлю дизморать. Так же, как и тогда, когда осознаю, как я далек от того, чтобы сделать какую-нибудь лабораторную работу, которую остальные легко делают. Приходится покупать работы, иначе будут проблемы после сессии
Сейчас у меня возникают большие трудности с выполнением лабораторных работ для универа: даже посмотрев какие-то гайды по теме в Ютубе, как подступиться в решению задачи — мне непонятно, и я бесконечно далёк от того, чтобы писать что-то за пределами элементарщины. Как это фиксить — мне пока не особо понятно
Не знаю, как преодолеть этот барьер, когда вроде познакомился с темой, а написать ничерта не можешь — у других в моем окружении такого нет, и они продвинулись гораздо дальше меня, хотя кроме Гоши Дударя на Ютубе ничего не смотрели. Так же плохо у меня со всеми математическими предметами, должно быть, в целом слабые способности аукаются мне и в этом деле
Сейчас я стал решать задачи из курса Stepik и тупо заниматься больше. Скачал книжку Трупа Страуса, стал смотреть канал Simple Code на Ютубе. На Си кодить потерял смысл — скоро переход на С++
Может, будут какие-то советы? Какие-то ошибки в том, как я занимаюсь
Как стал заниматься больше, вроде бы, стал получать удовольствие от процесса. Может, когда-нибудь я напишу какую-нибудь интересную программку для себя. Я также стал задумываться о том, какие алгоритмы имеют разные штуки из повседневности, те же турникеты на входе в универ. Но когда вижу более способных в окружении, а более способные в нём вообще все, ловлю дизморать. Так же, как и тогда, когда осознаю, как я далек от того, чтобы сделать какую-нибудь лабораторную работу, которую остальные легко делают. Приходится покупать работы, иначе будут проблемы после сессии
Сейчас, например, мне нужно выполнить работы по темам "бинарные деревья" и "односвязные списки"
Каков мой порядок действий для изучения данной темы, чтобы я мог решать по ним задачи? При чем достаточно быстрые, чтобы я укладывался в университетские сроки: срок даётся в пару недель.
>>328541
У тебя все очень плохо. Каналы на ютубе почти все говно, а не говно я не видел, кроме пары записей лекций из шараг, курсы такое же говно, как каналы на ютубе, дрочи всякие литкоды и кодварсы, общее понимание реализаций алгоритмов будет. Односвязные списки и бинарные деревья база, просто пойми их.
> работы по темам "бинарные деревья" и "односвязные списки"
Симпл код хорошо разобрал списки, посмотри его видео и повторяя за ним напиши свою реализацию листа.
>дрочи всякие литкоды и кодварсы
Посмотрел, что это. Да, полезно. В том курсе, который я прохожу, ты тоже пишешь задачи, и они проверяются аналогично Литкоду и Кодеварсу. А в конце еще курсовой проект, который будет преподом проверяться. Курс 10 баксов мне стоил, знакомый очень рекомендовал. У него с программированием лучше моего, так что я прислушался. А в моем окружении программирование как-то иначе, чем через видосики на ютубе не изучают, и при этом как-то справляются с задачами учебного курса
Перед тем, как решать задачи по какой-либо теме на том же LeedCode, нужно ведь изучить темы, которые будут нужны для решения задачи. Если я сейчас сходу зайду туда и выберу задачи на темы, которые еще не изучал — в чем будет профит? Я просто посмотрю на задачу и не напишу и строчки кода, не зная темы. В курсе перед тем, как отправить своё решение задачи, тебе объясняют тему, показывают на примерах других задач, как надо решать задачи по этой теме, и только потом дают задачу. А сразу идти на Кодеварс или Литкод... Что-то я не врубился.
>на плюсах уже все вопросики обкашлены
это не так
стандартизованного abi так и не сделали, стандартизованной динамической загрузки классов нету, как следствие любые системы с расширяемостью через плагины приходиться писать используя тот же олдскульный сишный компонентный подход (com в винде самый известный пример), правда можно сверху для удобства шаблончиками обмазать используя crtp, ну и то что абстрактный класс взаимозаменяем со структурами из указателей на функции, что дает синтаксические плюшки, но суть не меняет
из-за этого к примеру весь энтерпрайз в начале нулевых дружно пересел на явку и шарпик
size_t id = str.find('1');
while (id != str.npos) {
id = str.find('1', id+1);
}
}
id удвоен по сравнению с фактическим индексом единицы
пример - строка "0 1 0 0 1 0 1 1 0 0"
id для неё будут 2 8 12 14
че за хуйня?
Без пробелов строку введи.
Я слышал про библиотеки, в редактор кода она тоже должны быть загружены? Мне кажется это не удобно, если постоянно ctrl+c - ctrl-v делать, из редактора в компилятор.
Тогда какой выбрать? Под линукс.
> если постоянно ctrl+c - ctrl-v делать, из редактора в компилятор
Ох уж эти зумеры-программисты...
Если серьёзно, то почитай первый том Столярова.
Он хоть и шиз, который фреймбуфер в ядре отключает и ищет CMS, написанную на чистом C/C++, но в плане dev-набора расписал всё +- нормально.
Список и деревья - это алгоритмы и структуры данных. Для меня порядок для понимания темы такой:
1. Успокоился и расслабился.
2. Настроился на занятие
3. Гуглю базу по теме
4. Смотрю примеры
5.а. Решаю задачи, начиная с несложной
5.б .Решаю лабу по универу
Забей на успехи окружающих - смотри на себя. Реализовывай свои цели. Если ты учишься и не забросил - значит победил.
университетские лабы гуглятся, да и к тому же можно у старшекурсников глянуть или к преподу обратиться
Спасибо за советы, няша
>Гуглю базу по теме
Ну я вот в Ютубе забиваю обычно, но как-то решать это не помогало мне, разве что что-то очень простое. Попробую теперь LeetCode, Codewars юзать и начинать с простых и переходить к сложным задачам, смотреть решения, мб учебник читать перед сном для закрепления
>университетские лабы гуглятся
Ни одна не гуглилась. Бывают похожие задания, разумеется, но один в один — никогда. А когда похожие, там код так надо переделывать, что работу не особо облегчает
>можно у старшекурсников глянуть
Реалии таковы, что всем друг на друга похуй. А еще я социализацию проебал, такие дела. Лабы у нас делаются в командах на 3 человека, но я делаю их один. По физике аналогично. На этом фоне началась социофобия (до того, как всрал социализцию, ее не было) и теперь вообще пиздец с башкой
Господа, почему у меня неинициализированная локальная переменная? Пытаюсь перегрузить оператор ввода чтобы вводить структуру.
Не перегружать оператор ввода?
все норм, кроме того, что при считывании гетлайном русские символы читаются как кракозябры (смотрю при отладке, ну и до конца так остается).
при этом в файле есть данные "encoding="UTF-8"". НО, если попробовать эти кракозябры декодировать (например http://foxtools.ru/Text ) читабельный вариант имеет данные "Исходная кодировка Кириллица шиндовс1251, Конечная - юникод ЮТФ8".
и что в итоге мне надо? сразу считывать ютф8? считывать как сейчас, потом декодировать? или м.б. просто нахуй пойти еще что-то?
подскажите плес, куда копать, а то совсем в этих соснах запутался.
Используй xml парсер
}
string str;
while (getline(str)) {
Делаем бочку(line)
}
}
test.txt - просто строка текста
Можно ли makefile сделать который бы засовывал текст в str, или в самом main открывать файловый дескриптор, или test.txt на что-то менять?
Поясните тупому неосилятору.
Откуда высралось число 4, а не 128. Как я понял, должно произойти деление 900 на 7
% это остаток от деления 900 на 7 и он равен 4
Прога
const int RAW = 5;
const int COL = 3;
int arr[][COL] {{1,2,3},
{1,2,3}
};
cout << RAW << ' ' << COL << endl;
for (int r = 0; r < RAW; r++)
{
cout << "r = " << r << "\t\t";
for (int c = 0; c < COL; c++)
{
//cout << arr[r][c] << "\t\t";
}
cout << "RAW = " << RAW << endl;
}
выводит ожидаемый результат с первой пикчи, но стоит раскоментить строку с массивом, как начинается полный пиздец как на второй пикче. Я осознаю, что вопрос, скорее всего, дурацкий, и посидев пол часа за учебником я мб
нашел бы на него ответ. Но мб кто в двух словах ответит, почему цикл фор игнорит условие r < RAW?
Прога
const int RAW = 5;
const int COL = 3;
int arr[][COL] {{1,2,3},
{1,2,3}
};
cout << RAW << ' ' << COL << endl;
for (int r = 0; r < RAW; r++)
{
cout << "r = " << r << "\t\t";
for (int c = 0; c < COL; c++)
{
//cout << arr[r][c] << "\t\t";
}
cout << "RAW = " << RAW << endl;
}
выводит ожидаемый результат с первой пикчи, но стоит раскоментить строку с массивом, как начинается полный пиздец как на второй пикче. Я осознаю, что вопрос, скорее всего, дурацкий, и посидев пол часа за учебником я мб
нашел бы на него ответ. Но мб кто в двух словах ответит, почему цикл фор игнорит условие r < RAW?
Если что, не надо писать, что: "азазаза, у тебя там размерность массива не та))))"
Я в курсе. Мне интересно, как это в принципе может повлиять на условие цикла
Ладно, чтобы меня совсем сходу нахуй не послали просто спрошу:
Как видно из второго скрина, переменные r и RAW не херятся ни чем, занчит херится условие цикла, так ведь? Хериться оно может только массивом, который мог что-то перезаписать в коде проги, но в строчке /cout << arr[r][c] << "\t\t" мы его лишь считываем, так что каким образом эта строчка может что-то поменять - я не ебу.Ну, либо я чего-то не понимаю.
>Мне интересно, как это в принципе может повлиять на условие цикла
Никак, значит проблема в другом.
В чем?)))))))) Я, считай, за исключением полуформальной дефолтной хуйни весь код выложил. Если это играет роль, компилю на код блоке вроде MinGW (если не путаю)
Не, наврал. Соряны. GNU GCC Compiler
>код блоке
>MinGW
Значит в этом.
>Я, считай, за исключением полуформальной дефолтной хуйни весь код выложил.
При условии, что ты в этом ничего не сломал.
#include <iostream>
using namespace std;
int main()
{
const int RAW = 5;
const int COL = 3;
int arr[][COL] {{1,2,3},
{1,2,3}
};
cout << RAW << ' ' << COL << endl;
for (int r = 0; r < RAW; r++)
{
cout << "r = " << r << "\t\t";
for (int c = 0; c < COL; c++)
{
//cout << arr[r][c] << "\t\t";
}
cout << "RAW = " << RAW << endl;
}
return 0;
}
Спешиал фо ю. Вряд ли проблема в include, "int main" или "return 0"/ А больше этот код ничем не отличается от того, что выше.
#include <iostream>
using namespace std;
int main()
{
const int RAW = 5;
const int COL = 3;
int arr[][COL] {{1,2,3},
{1,2,3}
};
cout << RAW << ' ' << COL << endl;
for (int r = 0; r < RAW; r++)
{
cout << "r = " << r << "\t\t";
for (int c = 0; c < COL; c++)
{
//cout << arr[r][c] << "\t\t";
}
cout << "RAW = " << RAW << endl;
}
return 0;
}
Спешиал фо ю. Вряд ли проблема в include, "int main" или "return 0"/ А больше этот код ничем не отличается от того, что выше.
>код блоке
>MinGW
Значит в этом.
Баг скорее всего в компиляторе или в отладчике, который ты используешь. Запусти без отладчика.
>>332389
Хмм... Я сейчас попробовал тоже в другом онлайн компиляторе откомпилить, но получилось то же самое, что и в код блоке:
https://ideone.com/CR59Ta (работает через впн)
Это так после изучения плюсов в дурку и попадают, да?
А как сделать, чтобы я мог открыть файл сходного кода формата .cpp и сразу компилировать его, а не делать такие идиотские кульбиты? Нигде в ютубе, гугле не нашел решение этой проблемы. Поэтому и я, и люди в моем окружении тоже занимаются такой хуйней. Но на нервы действует уже.
А как сделать, чтобы я мог открыть файл сходного кода формата .cpp и сразу компилировать его, а не делать такие идиотские кульбиты? Нигде в ютубе, гугле не нашел решение этой проблемы. Поэтому и я, и люди в моем окружении тоже занимаются такой хуйней. Но на нервы действует уже.
>цикл фор игнорит условие r < RAW
Он как раз не игнорит, у тебя вывод raw соптимизировался на вывод постоянного значения, а не того, что ты наворотил на стеке. Замени const на volatile.
Вообще, какие есть подводные? Стойт ли оно того вообще? Сейчас она испольузетьс хоть где-то?
Копчую с последней бубунты
те денег что ли уже платят, щеня? как так то блядь
че за тупые вопросы?
скажи, плиз, чем занимаешься, если ты такой тупой но при этом на работе работаешь?
Как стать учителем по программированию? Мне кажется это изи, приходишь и на каждом занятии пытаешься разъяснить бездарям концепцию полиморфизма. Потом даешь им самостоятельно простенькую задачу, а сам сидишь чиллишь.
Ещё можете разъяснить чем сейчас qt-шники занимаются? Легаси? Или есть так много десктопного софта, который требует взаимодействия с системными API?
>Почему так?
free
totalram
freeram
sharedram
bufferram
>как линукс работает с памятью?
Так же, как и все.
>как это будет работать на винде?
sysinfo даже не posix, чтобы там работать.
>>333333
Ахуеть.
>закатиться из Java на серверную разработку
тебе это не надо 100%
не знаю ни одного человека который ушел бы с явки на кресты, но с кресты на явку - полно
>Смотрю, по моему вопросу к консенсусу еще не пришли?
консенсус в распределенных системах невозможен
есть только частные решения, а общего решения этой проблемы нет!
Заодно спрошу: я попробовал накатить на codelite CMake, но, такое чувство, что я сделал что-то не так. Я правильно понимаю, что если все сделано верно, то достаточно в IDE прожать билд прожект и он автоматически запустит CMake на нужном этапе компиляции? Или там нужно каждый раз что-то делать вручную? (Прост при нажатии ПКМ на проект есть пункт меню Run CMake, вот я и думаю)
Блин, забыл сказать (но по контексту и так мб понятно): проекты на codelite + CMake + MinGW упорно не билдятся, или я что-то не понимаю. После нажатия Run CMake появляются только два экзешника разных папках - оба с именами a.exe. А если просто билдить проект, то, похоже, экзешники даже не создаются.
>Visual studio не очень хочу ставить
ты можешь его не юзать, но ставить в 99% на винде скорее всего придется
> codelite или code::blocks
Сорта говна как говориться, можешь хоть в виме программировать
Тебе главное научиться Cmake пользоваться и сможешь где угодно свои проэкты писать
ну и еще language server тебе скорее всего пригодиться тогда, я знаю только clangd - мбы в виме\емаксе какие то свои приколы еще есть
void EnableOpenGL(HWND hwnd, HDC hDC, HGLRC hRC)
{
//....
//везде в теле ф-ции исользуется запись в виде разыменования ссылки на HDC
//например:
SetPixelFormat(hDC, iFormat, &pfd);
//....
}
void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
{
//.....
ReleaseDC(hwnd, hDC);
}
Я так понял, в первом случае нам в функцию приходит ссылка на HDC, а во втором содержимое HDC. Так, собственно, нахуя нам в первом случае приходит ссылка на HDC, если мы везде в теле функции используем hDC? Можно же было сразу в функцию слать содержимое HDC или нет? Просто интересно, чому сделали именно так?
Сцук. Забыл, что двощь звездочки удаляет
>Что он натворил на стеке?
Трудно сказать, зависит от компилятора. Но стек растет вниз, а адресация массива вверх, так что он точно залазит на свои константные переменные когда выходит за пределы массива.
Попробуй qtcreator, сам кют необязательно использовать, есть много приятных фич.
>Ньюфаг
>Не ебать голову
Да и вообще, думаю тебя тоже вела дорога приключений. Не пизди, что нет.
>дорога приключений
Сук, аж вспомнил как к codeblocks прикручивал новый питон и скрипты для нормального отображения в дебаге содержимого контейнеров std. Это была неделя жесточайшего пердолинга, я со сборкой буста так не ебался.
Единственное логичное объяснение, которое я нашел - рекурсивные функции. Только для этого?
Ведь если у нас не рекурсивная функция, то мы можешь напрямую грузить переменные в регистры процессора прямо из блока кода и хранить их там же. Просто в регистр ebp записать адрес не из стека, а из блока кода. Это же по сути идет просто лишнее копирование.
Понятно, что основная задача стека вызовов - это хранение адреса возврата из функции. Я прав?
Спасибо
Нет. Можно только взять какую-нибудь кряк ультимейт кейген бесплатно без смс с варезника, из которой пираты всё выпилили. Если найдёшь.
В общем случае порядок инициализации глобальных переменных не определён, так что за начало выполнения программы разумнее считать main().
при чем тут раст?
> error: variable has incomplete type 'const MyClass'
у меня тоже почему то компилятор тупит
ну как очевидное решение вынести эту переменную вне класса
Какая разница что он пишет, я спрашиваю как нужно сделать чтобы работало.
>>334874
>вынести эту переменную вне класса
У меня инлайновый класс в заголовке. Мне не нравится из-за пары констант новый файл добавлять. Да и вообще не нравится когда эти константы торчат из каждого угла, а не упорядочены по месту
>не нравится когда эти константы торчат из каждого угла, а не упорядочены по месту
в неймспейс засунь
То что ты пытаешься использовать ещё не созданный класс тебя не смущает? Ты должен сделать его объявление перед определением, а внутрь пихать указатель на него, тк размер указателей всегда известен.
В том виде как ты пишешь прокатит в языках типа Шарпа и джавы, т к там все переменные объекты - указатели.
Инлайн добавили в 17 стандарте чтобы не морочится с статик переменными в срр файлах. В принципе это слово означает что определение переменной или функции может по несколько раз инклудится и компилятор не будет ругаться, а собственно инлайном функций компилятор сам занимается без подсказок при оптимизации.
как статик переменная влияет на использование класса?
я могу свой класс и как параметры функции легко передавать, так и преспокойно как указатели на него вертеть
статик переменная никак на размер класса не влияет, так что не вижу ни одной причины почему компилятор не может выполнить тот код, у него достаточно информации для выполнения этого функционала
Но все равно класс ещё не определен на тот момент, попробуй сделать его объявление заранее и то я сомневаюсь что прокатит, компилятору же все равно надо знать сколько памяти выделять для статиков.
> компилятору же все равно надо знать сколько памяти выделять для статиков
столько же сколько и классу
или компилятор глупенький и не умеет чуть дальше просмотреть?
У тебя класс рекурсивно объявляется, как он посчитает? Там получается бесконечная петля вложенности и компилятор вахуе.
В одной из единиц трансляции (cpp файл), в которую этот класс инклюдится.
компилятор.цпп:
если (встретил статик + тип класса) то:
отложить создания статика
пропарсить определение класса
создать статик
Давай ты напишешь компилятор.
int func1(void) {
return 555;
}
Вызывается так:
void pointerplay() {
int (*fp1) (void);
fp1 = func1;
cout << "fp1 = " << fp1() << endl; // куда копируется 555 перед выводом?
}
Возникает ли в этом коде повреждение памяти, ведь указателю не выделена память? Несмотря на то, что в mingw компилируется и выводится 555, у меня сомнения.
upd
inb4 только опыт байтоебства с микроконтроллерами, где все указатели либо на глобал переменную буфера, либо на фиксированный адрес. Там таких вопросов не было.
ты просто с указателями разберись сначала, а потом лезь к указателям на функции.
Судя по "указателю не выделена память" - ты вообще нихуя не понимаешь.
Да, хуйню сказал насчет памяти. Хорошо, указатель хранит адрес. В данном случае - адрес возвращаемого значения функции. Оно что, блять всегда по одному и тому же адресу находится?
Указатель на функцию - адрес возвращаемого значения - разные вещи. Функция - код, значение вообще через регистр возвращается.
А путь к заголовкам в makefile сам собой пропишется?
Вон ты вызываешь g++, указываешь -L либы, а -I для заголовков где?
Конечно сам, а не как у дедов в прошлом веке.
господи, тупое ебло, ты теперь тут срешь вместо своих десктоп тредов
1. Ну если хочешь новые фичи - обнови.
2. Отключи АНТИВИРУС в шинде, ну или у тебя очень слабый комп, хули делать.
Вимодебилов не слушай, их мнение равно мнению грязи из под ногтей
Нет объектов. В теле ифа только строчка dp=min(dp1, dp2)
Вывод: скобочки потребляют много процессорного времени, а значит от них надо отказываться.
Я переписал с вектора на двумерный массив и теперь картина более понятная. Но что вектор там так долго делает?
Не знаю, что за профилировщик, но можешь посмотреть на граф вызова функций из этой функции (в VS точно есть), где больше всего self time. А вообще прямо процентикам около строчек не стоит верить, часто это значит "где-то тут тратится время, может строчкой выше или ниже"
Покурить доки asio?
Зачем вы вообще инлайны пишите, самые умные чтоле? В учебнике по c++ написано, что инлайн для петухов, мол компилятор сам решит, когда инлайнить функцию, когда нет, а не когда кодер своими корявыми ручками впишет этот устаревший спецификатор.
>самые умные чтоле?
Да.
>A static data member may be declared inline. An inline static data member can be defined in the class definition and may specify an initializer. It does not need an out-of-class definition:
https://en.cppreference.com/w/cpp/language/static
Компилятор мразь по определению, которой доверять нельзя
Поэтому иногда нужно заставлять его инлайнить
>доверять нельзя
>нужно заставлять его инлайнить
Имеет право полностью игнорировать любую твою просьбу на инлайн функций.
Есть способы заставить
struct Children {
string name;
int age;
}
struct User {
string name;
int age;
vector<Address> address;
}
бля
struct Children {
string name;
int age;
}
struct User {
string name;
int age;
vector<Children> childrens;
}
Я походу не умею формулировать вопросы)
А зачем тебе это? Код должен быть простым и понятным.
Ты отличаешь вывод типов от шаблонов? Сможешь написать коллекцию через auto?
а тебе надо в реализации коллекции перед каждым методом писать template<typename T>?
и ты про функции спрашивал, что не так с auto аргументами...
Спасибо, друг.
Тот анон про abbreviated function template говори, и это как раз то, что тебе надо.
> На днях узнал о свойстве компиляторов "time", которое показывает время выполнения
ls и vim - это по твоему тоже свойства компилятора?
>Если выдернуть компьютер из розетки, то деструктор тоже не вызывается.
Это так называемая база
Впадлу контролировать приход пакетов. Мооожет быть когда нибудь сделаю и на udp, но пока хз
Да, чет я тупанул. Лучше udp, чтобы кучу соединений постояннт не открытвать/закрывать/держать открытыми
Спасибо
http://mathenglish.ru/dmatrix/
Но она внутри юзает StdCtrls.hpp Которой у меня нет, гуглю, но найти ее не могу, типа должна быть встроенная, что делать?
перегрузка функций в классе. Я думал что можно только когда разные аргументы.
Но как обычно - хуй оно работает без коленодробления. Если класс или ссылка на него константы - то да, он вызывает константый метод.
А вот если класс не константен, но принимающая ссылка константна - то хуй, вызывает неконстантный
const WindowSystem& e = engine.GetWindowSystem(); // думаете константная ссылка вернется? А вот хуй. Вызовет WindowSystem& GetWindowSystem(), несмотря на то что e - константая ссылка
А вот тут все норм:
void goo(const EngineSystem& engine)
{
auto& e = engine.GetWindowSystem();
}
goo(engine);
проверял так:
WindowSystem& GetWindowSystem() { puts("WindowSystem"); return m_window; }
const WindowSystem& GetWindowSystem() const { puts("const WindowSystem"); return m_window; }
Вывело:
WindowSystem
const WindowSystem
>Но она внутри юзает StdCtrls.hpp Которой у меня нет, гуглю, но найти ее не могу, типа должна быть встроенная, что делать?
Взять любую другую библиотеку для матриц. Они все одинаково считаются.
Единственное - что возможно результирующую матрицу нужно будет транспонировать(Transpose) (так как одни библиотеки хранят построчно, другие по рядам. Transpose меняет туда-обратно)
ну еще различия в лево-сторонней и правосторонней.. Но в нормальных библах все это есть из коробки, бери как надо
Либо руками удаляй весь болрадский код (то есть удали StdCtrls.hpp и все что там тянется.. __fastcall тоже удаляй), так как работа матриц - это тупо базовые операции по умножению, сложению. Плюс синус-косинус
Ой, я тут недавно разбирал стандарт сишки, и по его грамматике получилось что вот эти выражения норм: ++x = 0; x++ = 0; но компилятор проглотил только первое. Пути си языков неисповедимы.
Язык определяется не только грамматикой. Вот тут например х++ это rvalue.
>4. Смотрю примеры
>5.а. Решаю задачи, начиная с несложной
Где смотреть примеры и где решать задачи? У меня тоже проблемы с выполнением лабораторных работ по программированию: в Ютубе смотрю уроки по теме, повторяю их код, читаю в учебнике базу по теме, а как до решения задач доходит — жидко пукаю и не знаю, как решать.
codeforces, codewars -- этими сам пользуюсь. Ну и в учебниках по проге задания решать можно, какого-то конкретного не посоветую.
другойанон
>Где смотреть примеры и где решать задачи?
Примеры есть на сайтах(cppstduio, purecode например), учебниках по теме. Оттуда и задачи можно порешать.
>не знаю, как решать
Если не знаешь синтаксис - учишь язык и std
Не знаешь алгоритмы - учишь алгоритмы и структуры данных
Не знаешь вообще ничего - проходишь курс, параллельно смотришь дополнительные материалы(видосы, задачи и тд)
Учебники неплохо закрепляют программирование. На cyberforum есть темы для новичков и тд., там тоже много чего интересного могут предложить почитать\прорешать.
Кстати, лабы с вузов бывают плохо структурированы по уровню знания студента, что создает барьер. Гугл и ресурсы в свободном доступе помогают этот барьер преодолеть.
АТО у меня есть толька классика с++99 для дедов
Да, в шапке.
Хочу вкатиться в эти ваши кресты, дабы в будущем делать какие-нибудь мелкие игры на ПК мечта с детства.
Мне в 17-18 лет это показалось чем-то невероятно сложным, дошёл в С++ до раздела функций и дропнул, хоть и сдал ЕГЭ по информатике на 88 баллов, поэтому я забил, отложил мечту на потом и поступил в говновуз чтобы зацепиться за Москву.
Сейчас мне 23, отучился по профессии которая совершенно не интересует, и вот уже около четырёх месяцев потихоньку вкатываюсь в IT сферу - чутка поговнокодил на Петухоне, выучил основы HTML и CSS и стараюсь в целом "вариться" в этой тематике.
И вроде всё идёт нормально, мне очень нравится копаться во всём этом, но проблема в том, что я вообще нихуя не уверен, за что стоит полноценно зацепиться и где стоит прокачивать хард скилы. Как не почитаю очередную статью / мнение с двачей / рандом комментарий про то что языкнейм говно без задач, куча минусов, работы нет, конкуренция 5000 человек на место, и даже если и возьмут, то за бесплатно учиться будешь ещё полгода, я вот учил этот язык и 2 года работу не могу найти потому что не берут - сразу накатывает паника и желание дропнуть всё к хуям и пересесть на что-то более актуальное, потому что есть ощущение, что я в итоге буду ненужным и безработным. Короче пугалки на меня пиздец сильно действуют, и я вместо того чтобы ПРОСТО сидеть и ебашить - начинаю паниковать и постоянно думаю "а надо ли оно мне вообще бля? а вдруг реально нет работы? а что если работа будет скучной и унылой?", и всё в таком духе.
В общем хочу быть уверен в том, что если я выдрочу кресты и программирование в целом - я почти что гарантированно найду себе местечко в нашей великой стране, мне даже в целом похуй на зп, я просто хочу хоть что-то зарабатывать и как-то развиваться, дабы в будущем всё же попробовать осуществить свою детскую мечту.
Можешь меня обнадёжить, анон?
>мелкие игры на ПК
C#.
>языкнейм говно без задач
Да.
>куча минусов
Да.
>работы нет
Без опыта - скорее всего.
>конкуренция 5000 человек на место
Да.
>я в итоге буду ненужным и безработным
Сейчас ты нужный?
>В общем хочу быть уверен в том, что если я выдрочу кресты и программирование в целом - я почти что гарантированно найду себе местечко в нашей великой стране, мне даже в целом похуй на зп, я просто хочу хоть что-то зарабатывать и как-то развиваться, дабы в будущем всё же попробовать осуществить свою детскую мечту.
Возможно, но ты скорее всего дропнешь кресты.
656x848, 0:10
>>Сейчас ты нужный?
Сижу без работы и без опыта на мамкиной шее стыдно.
Нужна уверенность в том, что моя "нужность" заметно возрастёт после дроча крестов.
>>но ты скорее всего дропнешь кресты.
Хуй там, плюсы пока что самый привлекательный язык из всех, да и книга из шапки треда уж очень нравится тоже пока что. Если я на чём то и зациклюсь - то только на них. Единственное что раздражает - вышеперечисленные сомнения.
>>C#
Судя по треду он больше на веб нацелен, а меня от веба слегка подёргивает. Всё же хотелось бы в сторону софта двигаться но если что могу и веб потерпеть.
Пикрил в принципе полностью передает суть крестов. И ладно бы платили много, так в среднем по больнице язык используется только в легаси и платят немного.
К слову, помню тут был кун из нвидии с за 600к, интересно, что с ним.
>В иде есть прекрасная встроенная документация, стоит только навести на название функции. Таким и должно быть программирование в 21 веке, а не ошибки на 2 листа А4, которые невозможно прочесть.
Причем тут язык?
еще не релоцировался, пока только процедуры начались.
Ну и да, 900к где-то сейчас, акции упали. А так больше ляма было
хуимпл, деб, башкой подумай прежде, чем высирать какую-то хуйню
>пишущие код прямо противоположно букве О в СОЛИД
Закрытый для расширения и открытый для изменения интерфейса?
Да, переписывать функционал без добавления нового. В том числе и сам интерфейс менять, по необходимости. В процедурном стиле оно уже разбито на минимальные элементы — минимум правок надо делать при переписывании, нет интерфейсов — нет проблем. А как быть, если хочется оставаться с классами? Или я хочу невозможного от ООП?
>минимум правок надо делать при переписывании
>противоположно букве О в СОЛИД
ты кажется что то путаешь
Это секретная информация, среди разработчиков на C++, но ты можешь просто изменять класс, то есть, прямо из `class a { void m1(); void m2() };`, можешь сделать `class a { int m1(int, int); int m2(int, int); };`, плавающий интерфейс есть, возможность расширения только через наследование, что неизбежно, насколько я знаю.
> Это секретная информация, среди разработчиков на C++, но ты можешь просто изменять класс
Но ведь мне тогда придётся править всё что зависело от этого интерфейса, в том числе и сломанную архитектуру. А если, например, я сделаю это с процедурой, то мне надо будет только в другой процедуре использование этой процедуры поправить.
https://www.cyberforum.ru/cpp-beginners/thread2973571.html
pos = 0
while (pos < array.size - 1) {
1. среди элементов с позиции pos находишь максимальный;
меняешь его местами с array[pos];
сдвигаешь pos на 1;
2. среди элементов с позиции pos находишь минимальный;
меняешь его местами с array[pos];
сдвигаешь pos на 1;
}
в msys2 есть
Разыменование
>Как выводить в файл кириллическую строку,введенную в cmd с клавиатуры?
Проблема окон, копай в эту сторону.
Чел, в Шинде всегда используй _tmain и TCHAR. Юникод выключи, нахуй!
> setlocale(LC_ALL, "ru")
Чё, блять?
> в тхт на месте букв кракозябры
Блокнот любит cp1251.
Заебись лектор по информатике, в восьмидесятые нас переносит. Машина времени ебать.
Он строки как массив чаров пишет ,всегда.
>Пикрил в принципе полностью передает суть крестов
Не суть крестов, а суть вкатывальщиков, которые нихуя не знают, а уже программисты
Нет ничего сложного в С++.
Да, есть наркоманская STL где и выкатывает полотна невнятного бреда... ну это наркомания и придумал ее наркоман в наркобреду (и это даже не шутка, он сам об этом писал)
>Заебись лектор по информатике,
Кстати о лекторах... Какой же охуенный чел по С++
https://www.youtube.com/channel/UCGlYKd-FR4g0Tp4wF6_wxig/videos
Я бы к такому походил поучиться сям.
А говорят что в институтах не учат нормальному программированию... эх, жаль я был слишком туп чтобы поступить очно (поступил заочно на программиста, кстати тоже норм лекторы были - финальной лабой года например была полностью законченная программа управления школьным расписанием со всякими там базами данных, работой по сети и т.д.)
Как?
Пока только retroshare знаю, но к сожалению, там только исходники придется читать, что не просто бывает. Скорее даже затратно по времени
Салтовка-кум
Если в долларах считать, то выросли. А так - по-разному.
проблема не с зарплатами, как никак многие крестобояре из городских семей, зачастую с родителями инженерами, и как следсвие с наследной бабкиной хатой, и поэтому крестобояре всегда были готовы трудиться за копеечку
но проблема с количеством вакансий, а вот оно за последние пару месяцев просто рухнуло
к примеру, геймдев в россии (даже унылые мобилки) просто перестал существовать, его сейчас нет можно скзаать
Я что то не совсем понял, что именно ты предлагаешь сделать.
Типо ты предлагаешь мне создать цикл, в котором я уже сделаю:
>среди элементов с позиции pos находишь максимальный;
меняешь его местами с array[pos];
сдвигаешь pos на 1;
>среди элементов с позиции pos находишь минимальный;
меняешь его местами с array[pos];
сдвигаешь pos на 1;
Но как мне это сделать? Я просто в с++ совсем ньюфаг
Я что то не совсем понял, что именно ты предлагаешь сделать.
Типо ты предлагаешь мне создать цикл, в котором я уже сделаю:
>среди элементов с позиции pos находишь максимальный; меняешь его местами с array[pos]; сдвигаешь pos на 1;
>среди элементов с позиции pos находишь минимальный; меняешь его местами с array[pos]; сдвигаешь pos на 1;
Но как мне это сделать? Я просто в с++ совсем ньюфаг
>поэтому крестобояре всегда были готовы трудиться за копеечку
Ну не, опция релокейта всегда существует. В Грузию например?
>но проблема с количеством вакансий, а вот оно за последние пару месяцев просто рухнуло
>к примеру, геймдев в россии (даже унылые мобилки) просто перестал существовать, его сейчас нет можно скзаать
У остальных должны были упасть рейты, не?
Салтовка-кум
Да не сказать, чтобы рухнуло. Сократилось где-то на 25%, ну максимум на 30. При этом изменилась структура, да. Гейдев ушёл, пришли телекомы, эмбед, нагруженный бэк и сервисы. Зепки в принципе остались довоенными. В некоторых местах апнули, потому что вакухи по полгода висели.
А что тебе релокейт в Грузию даст? За переезд и хату мало никому доплачивают, зарплаты - остаются те же, а кому-то предлагают идти на меньший прайс. Паспорт Грузии - хуйня полная. Сама Грузия маленькая, работы там нет, делать там нехуй.
>А что тебе релокейт в Грузию даст?
Возможность работать? У нас с проектов кастомеры выпиздили всех разрабов кто в рашке или белорашке
Так а почему рейты должны были упасть? Посыпались прежде всего аутсорсные направления. А кресты в аутсорсе занимают малую долю. Кто может в кресты перекатиться из безработных? Да в общем-то никто (джависты и шарписты зарабатывают больше сидя в сытных офисах).
> У нас с проектов кастомеры выпиздили всех разрабов кто в рашке или белорашке
А нехуй работать на галере. Пойди устройся в нормальную компанию, которая пилит свои разработки или хотя бы не для западных куколдов. В чём проблема? Сейчас наоборот все фрилансеры-трактористы нахуй пошли и в рашке можно без проблем найти работу.
>Так а почему рейты должны были упасть?
Меньше вакансий = больше кандидатов на место = меньшие рейты
>А кресты в аутсорсе занимают малую долю.
Ну хуй знает, у меня 20 штыков работает
>>342777
>Пойди устройся в нормальную компанию, которая пилит свои разработки
Я не нищееб
>хотя бы не для западных куколдов
Ой дурак
> Я не нищееб
Но очень похож, раз выбираешь между бомжеванием и укатыванием в недострану.
> Ой дурак
Азиаты уже давно платят больше, чем любители шестицветных флагов.
Возможность работать, она ускользающая. Если джон боар через пол года скажет всё, то что ты дальше делать будешь? В Грузии работы нету, а искать ты будешь удалёнку как руссо программисто.
В качестве нормальной альтернативы есть Кипр. Там и ойти развито и фин сектор и русскоговорящих масса и проблем с местными нет. Но как туда сейчас попасть - я хз.
>укатыванием в недострану
Я не в рашке です
>Азиаты уже давно платят больше, чем любители шестицветных флагов
Это сколько?
>>342781
>а искать ты будешь удалёнку как руссо программисто.
Не, стоит искать как человек из Грузии, в нормальных странах всё понимают
>В качестве нормальной альтернативы есть Кипр. Там и ойти развито
Айти развито в штатах и в штатах только. Остальное - это всего лишь место комфортной работы на нормальных клиентов
>20 штыков
Так а чё они от тебя не уходят? Зачем жить в стране, где с неба падает хуета и президент говорит, что будем воевать ещё 10 лет (пока всех не призовём)?
В нормальных странах считают, что Georgia это ламповый американский штат, а не горы с чебуреками.
Хотя в целом всем поебать откуда кодер, главное не попасть под санкции.
>Меньше вакансий = больше кандидатов на место = меньшие рейты
Так вакансий сильно меньше не стало и основной удар пришёлся по вкатунцам. Ушёл Luxoft (хотя они продолжают мониторить рынок). Вместо него активизировался VK.
Интел перетечёт в Huawei, LG и им подобные.
Luxoft вроде крупнее был, чем EPAM. Да и контрагенты у Luxoft были получше. В Украхе наоборот.
>Интел перетечёт в Huawei, LG и им подобные
Разве шо в хуавей, потому что лыжи тоже закрываются
У хуавея очень много вакансий. Samsung ещё хантил людей на тематику близкую к проектам Intel.
Тончее нашел, но сомнительные
Лучше я опишу проблему, а вы может подскажите че. Может есть какие то другие протоколы с нормальной реализацией, но на основе udp. Мне нужно почти всё, что есть в tcp, но при этом мне не подходит формат соединений. Мне нужно отправлять данные без установления соединения
QUIC
Пишешь P2P?
Считается, что если пытаться достичь такой же надёжности, как в TCP, в итоге и получится такой же оверхед. Так что можно либо снизить требования, либо устанавливать соединение, передавать ланные и разъединяться, как в HTTP без keep-alive.
> Пишешь P2P?
Да
> Так что можно либо снизить требования, либо устанавливать соединение, передавать данные и разъединяться
Тогда мне придется очень часто соединяться, разъединяться, что при большом количестве человек может быть очень критично. Я очень слабо представляю как это будет выглядеть в чате на 1000 человек, например.
Вот что я наделал: https://www.toptal.com/developers/hastebin/sahuyikeya.cpp
А вот откуда я это взял:
https://zhengyang2015.gitbooks.io/lintcode/content/mock_hanoi_tower_by_stacks_227.html
>>Айти развито в штатах и в штатах только
>а под айти ты подразумеваешь сайто-клепательство?
Именно что не вебмакакинг. Все самые advanced поделки делаются там, а остальные - копируют
Любитель велосипедов, ты?
>Кто может в кресты перекатиться из безработных? Да в общем-то никто
всегда есть приток свежего мяса: умных дурачков из вузов что решили специализироваться на си/си++
> чате на 1000 человек, например.
чел, сейчас решают проблемы C10M на сервак, для протоколов http и websocket
а ты бля хочешь уходить на udp потому что у тебя http 1k не держит
ха ха
Хелп.
Ну так то величина постоянная. Вузы выпускают примерно одинаковое количество народу ежегодно (это без учёта демографической ямы).
\r\n \r\n \r\n
Потому что как раз для ифов этот оператор в основном и нужен. А explicit - защита для остальных мест.
Основное использование - в смарт поинтерах и optional
уже давно не плюсовик, но по java/scala бек все оки доки, рейты даже растут, т.к. всякие нервные пориджи судорожно ищут релокейт. nvidia офис не закрыла, хуавей не закрыл, сименс не закрыл, ебучих размеров яндекс и vk остались. Банки никуда не делись, но там плюсовых вакансий мало
>>342805
>Жду призыва естественно
ебать дебил
харьков-кун
>nvidia офис не закрыла
А почему вакансий нет? https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite
Почему Ukraine есть, а Russia нет?
>ебать дебил
Сейчас лучше оказаться по эту сторону железного занавеса, чем по рашкинскую
Салтовка-кум
Хз, на hh.ru вакансии публикуют и обновляют. Правда сильно меньше, чем раньше
https://hh.ru/vacancy/54409308?from=vacancy_search_list&hhtmFrom=vacancy_search_list
>Сейчас лучше оказаться по эту сторону железного занавеса, чем по рашкинскую
tell me about it
У нас тут по сравнению с Украиной сейчас либеральный рай. У нас тут на подвалы не увозят за неправильное мнение в отличие от. Все мои родственники из Харькова со вторника боятся звонить мне по телеге, т.к. у знакомых устроили обыск за то, что звонили родственникам в РФ по сотовой связи. Железный занавес, да?
Потому что бизнес любит тишину. Luxoft тоже журавлика на сайте нарисовал. Но по резюме они всё равно шерстят.
Так а чё ты в Европу то не уехал? Даже всякие Сергеи Немчинские укатились, ибо нахуя жизнью рисковать, если ты хорошо зарабатываешь и можешь получать от жизни удовольствие? Уровень жизни упадёт по обе стороны границы. Какой смысл жить среди бедных и вских махновцев с разноцветными повязками?
>геймдев в россии (даже унылые мобилки)
А тут вообще после нулевых вообще было что-то кроме мобилок, браузерок и ммо? Все нормальные студии позакрывались. Только ледорубы вспоминаются но это творцы, не умеющие в проджект менеджмент и работающие только лишь на энтузиазме Дыбовского, да симуляторы самолётов для аутистов.
>https://hh.ru/vacancy/54409308?from=vacancy_search_list&hhtmFrom=vacancy_search_list
Armenia, Remote
>У нас тут по сравнению с Украиной сейчас либеральный рай.
Ахаха, ясно
>Все мои родственники из Харькова со вторника боятся звонить мне по телеге
Просто тебя уже выписали из родственников, но этого еще не понял
>>343411
>Уровень жизни упадёт по обе стороны границы
А вот и нет. Бумага, прокладки, памперсы и сахар у меня в магазе как раз есть.
>московская вакансия без релокейта
>Armenia, Remote
Смекаешь, да?
>Ахаха, ясно
>Просто тебя уже выписали из родственников, но этого еще не понял
>А вот и нет. Бумага, прокладки, памперсы и сахар у меня в магазе как раз есть.
Всегда думал, что в /po такой низкий, отбитый уровень контента, т.к. там срут работники ботоферм на зарплате. Но оказывается, что ровно так же пишут вполне себе образованные ребята - программисты. Просто пиздец.
>>московская вакансия без релокейта
>>Armenia, Remote
>Смекаешь, да?
Смекаю что конкретных подробностей нет, но на всякий случай стоит поднять вой по этому вопросу. Сейчас еще и армянскому офису пизда будет
>Всегда думал, что в /po такой низкий, отбитый уровень контента
В Харькове последние ватаны уже ненавидят рашку, после пережитых обстрелов, пожаров и прочего пиздеца. Выписывание из родственников - довольно распространенная тема
>В Харькове последние ватаны уже ненавидят рашку
Мне интересен алгоритм поиска ватанов, если за любой неотрицательный сентимент в сторону РФ неиллюзорно могут прийти пообщаться, а то и чего похуже.
>Выписывание из родственников - довольно распространенная тема
Во-первых, это твой личный опыт, опыт ближайшего окружения? Если нет - нехуй распространять не личный опыт. Во-вторых нехуй свои фантазии проецировать на меня - у меня с родственниками охуительнейшие отношения и они стали со мной очень осторожно контактировать сразу после некоторых событий неделю назад
>Мне интересен алгоритм поиска ватанов, если за любой неотрицательный сентимент в сторону РФ неиллюзорно могут прийти пообщаться, а то и чего похуже.
С соседями никогда не общался? Не знаешь их настроений?
>у меня с родственниками охуительнейшие отношения
Можешь верить. Но родственников у тебя больше нет
>Что я делаю не так?
Ставишь лишние запятые. Попробуй его инициализировать до тела конструктора. this там уже определен.
У тебя есть дебаггер. Как именно вылетает?
https://pastebin.com/QR4JzZkW
А все, нахуй скопипиздил откуда-то код через random.h, и он заработал
Основы.
Почему при загрузке функции для определения длины файла вида (1-й пик)
не соответствуют (2-й пик)
Получается что в текстовом режиме каждую новую строку в первом случае прибавляется два символа, во втором только один.
добавить бибилиотеку с гитхаба это вообще горе.
Как упростить все это?
Можно конечно взять vcpkg но у меня CLion с ним не дружит абсолютно, а через mingw приходится постоянно врубить их консольку и искать (а там иногда все устарело)
Ну почему в раст есть богоподобный единственный toml файлик и все
> в каждую папку
Ты видимо что то не так делаешь, в каждую ничего сказать не надо, сделай общую зависимость у всех таргетов
>какие задачи решать?
Напиши что-нибудь полезное.
>Есть ли смысл пробоваться в какие-нибудь пулл-реквесты на гитхаб?
Нет.
>каждую новую строку в первом случае прибавляется два символа, во втором только один
Дай угадаю - у тебя шиндовс?
именно, в принципе понятно что это из-за управляющих символов, не понятно почему разные результаты
Сочетание символов \r\n тебе о чем-то говорит?
>Получается что в текстовом режиме каждую новую строку в первом случае прибавляется два символа, во втором только один.
Все так. Под виндой перевод строки кодируется двумя символами.
Нет.
Перекатывай.
напиши впо которое будет делать что-то полезное
Toptal еще работает с разработчиками из этой страны или прикрыли лавочку из-за санкций?
стоит ли учить stl по этому руководству?
стоит ли учить stl по этому руководству?
Это копия, сохраненная 5 августа 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.