Вы видите копию треда, сохраненную 10 марта 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Прошлый - https://2ch.hk/pr/res/1323587.html (М)
переменная в void main()
a=5+2
где "а" это левое, а 5+2 это правое?
либо тут "а" это тоже правое, а левым считаются только глобальные переменные?
>void main()
int main. void main нет уже лет 30
>где "а" это левое, а 5+2 это правое
если ты про lvalue и rvalue, то lvalue это все, что может быть помещено слева, а rvalue - справа. Если a=5+2; компилируется, то да a - lvalue. 5+2 очевидно, rvalue.
>void main()
Спасибо) просто запутала инфа, где говорится, что временная переменная, которая умирает после того как функция заканчивается, не может быть левым
это сложно понять было для меня
Не путай rvalue и rvalue reference
rvalue - это все, что может быть справа от присваивания. Вообще все.
lvalue - это все, что может быть слева от присваивания. Тоже вообще все.
Ссылки обычно lvalue - то есть если ZZ у тебя ссылка (void yoba(int& ZZ)), ты можешь написать ZZ=238 и ничего тебе не будет
А rvalue reference - это ссылка, которая, в отличие от обыкновенной lvalue ссылки ты не можешь написать ZZ=238. В этом смысл - rvalue reference это такая ссылка с ограничениями.
Нужно это, чтобы можно было семантически показать, что твоя ссылка - ссылка на временное значение, которое можно уничтожить при желании. Как-то так.
Сам оператор + возвращает rvalue.
a = b + c;
выражение (b + c) в целом тоже будет rvalue, даже если b и c были lvalue, то есть не получится скомпилировать
b + c = a;
>lvalue это все, что может быть помещено слева, а rvalue - справа
Самое колхозное объяснение из всех, что я видел.
>>36889
>временная переменная
Бессмысленный набор слов. Временными бывают объекты.
>>36906
Слишком толстый троллинг тупостью.
>>36907
>Rvalue это то, от чего нельзя взять ссылки.
Следующее по колхозности объяснение.
>>36929
>Сам оператор + возвращает rvalue.
Кстати, в стандарте об этом ни слова.
Я, в отличие от тебя, объясняю просто и понятно, а ты предпочитаешь выебываться, но не писать нихуя по существу, потому что знаешь, что сам напишешь хуйню.
У тебя претензии кроме как "колхозно" есть? Нет? Ну и пройди нахуй.
Это конкурирующий совхоз, не обращай внимания.
>Это тебе от скудоумия кажется.
Пруфы моего скудоумия. Если ты считаешь, что на >>36875 нужно отвечать каким-то другими словами, то это пруф того, что ты аутист (не способный в социальный контекст) и вахтер (зашел в тред похамить и рассказать о том, какой ты у мамы самый умный). А вот пруфов моего скудоумия у тебя нет, потому что ты тупее меня.
>в стандарте об этом ни слова
В стандарт я конечно лезть не буду.
Но где может храниться результат a + b кроме как во временном объекте, который и есть rvalue? если конечно + не переопределен В a записывется? или может быть в b?
>Пруфы моего скудоумия.
Ты не в состоянии воспринимать пруфы, т.к. скудоумен.
>ты аутист (не способный в социальный контекст)
Я же написал. Колхозное объяснение. Это и есть социальный контекст. Объяснение от селюка для селюков.
>вахтер
Заметь, ты первый перешёл на личности (в >>36961), не я в >>36959. Так что иди отсюда тушить свою колхозную сраку, пока сеновал не поджёг.
>>36975
>В стандарт я конечно лезть не буду.
>Но где может храниться результат a + b кроме как во временном объекте, который и есть rvalue?
Все знают, что это prvalue. Но стандарт об этом не говорит явно. Хотя обещает во введении к выражениям рассказать про value category каждого оператора и требования к value category его операндов.
>Ты не в состоянии воспринимать пруфы, т.к. скудоумен.
Засливан.
>Я же написал. Колхозное объяснение. Это и есть социальный контекст. Объяснение от селюка для селюков.
Нет. Объяснение для селюков не значит, что оно от селюка. Ты аутист просто, раз этого не понимаешь.
Как и то, что задающий вопросы не селюк, а просто учится. Случилось следующее: не селюк, а учащийся, которому разрешено много, задал вопрос, анон попытался ему объяснить ответ.
Кто здесь селюк? Та-дам - тот самый токсичный вахтер, который вместо того, чтобы придти и ответить на вопрос ньюфага, начал самоутверждаться.
>Заметь, ты первый перешёл на личности
В чем проблема говноеда назвать говноедом?
>Все знают, что это prvalue
Лол. Охуенная аргументация продолжается - ВСЕ ЗНАЮТ.
>>36975
>Но где может храниться результат a + b кроме как во временном объекте, который и есть rvalue
А кто тебе сказал, что a+b обязательно должен возвращать временный объект? https://ideone.com/Ze5lsY
Не должен.
> возвращать временный объект
Что по-твоему значит "возвращать временный объект"? То, что в выражении у return будет временный объект или что (a+b) будет временный объект?
Мы тут изначально говорили про встроенный.
Только селюк, чтобы продемонстрировать, как он хорошо разбирается в контекстах, полез понтоваться переопределёнными операторами.
>>36883
>>36906
https://habr.com/ru/post/322132/
Третий раз эту хуйню сюда кидаю. Скоро пора будет в шапку добавлять.
я С++ учу 1.5 месяца по официальным MS-курсам
сейчас я на теме "функция" и прошел только ее перегрузку, я не проходил перегрузку операторов
и так, могу ли я леджит пока воспринимать левое и правое как
а=b+c где "а" это левое а "b+c" правое?
Архива тредов-то нету
>и так, могу ли я леджит пока воспринимать левое и правое как
>а=b+c где "а" это левое а "b+c" правое?
Именем колхоза, разрешаю тебе.
>Сорян, ты не колхоз оказывается, а колхоз_ка.
Ого, мамин альтрайт.
>Для меня ни в чём, а вот для тебя проблема — ты сорвался в истерику с первого сообщения.
Конечно, когда говноеду говорят, что он говноед - это истерика. Ведь не может же говноед оказаться говноедом. Он же на двач всех хуесосить пришел.
>Колхоз_ка, читай внимательно:
Читать внимательно что, что все знают?
Оператор у встроенного типа вообще ссылку не возвращает, он возвращает значение. Вроде бы доебка, но ты же самый правильный хуесос, который читал стандарт.
>Оператор у встроенного типа вообще ссылку не возвращает, он возвращает значение.
Он вообще ничего не возвращает, т.к. это не вызов функции. Даже концептуально.
Так я и думал, что ты это кинешь.))))
Читай https://timsong-cpp.github.io/cppwp/n4659/over.built#1 и ссылки оттуда внимательно.
[over.built] используется только когда хотя бы один из операндов имеет не-встроенный тип. И используется только для overload resolution, для выбора встроенного оператора. Сами же эти операторы не вызываются даже концептуально.
> These candidate functions participate in the operator overload resolution process as described in [over.match.oper] and are used for no other purpose.
1. Для встроенных операторов не применяется [over.match.oper]
https://timsong-cpp.github.io/cppwp/n4659/over.match.oper#1 :
> If no operand of an operator in an expression has a type that is a class or an enumeration, the operator is assumed to be a built-in operator and interpreted according to Clause [expr].
2. Даже когда [over.match.oper] применим и какой-то из операторов из [over.built] выбран, срабатывает "used for no other purpose", который в том числе означает, что эти операторы даже концептуально не вызываются. Т.к. вызов функции это уже other purpose, а не overload resolution.
Вот есть например сокет. Я зная его адрес и порт, могу отправить на него что нибудь, например текст, да? То есть пишу фукцию отправки, и текст ведь сразу оказывается на сокете? То есть на его стороне этот текст уже можно считать? Или нужно сначала как то открыть этот сокет?
Ебатели языка "плюсы" доебались до оператора "плюс" и ебутся
> Нужно это, чтобы можно было семантически показать, что твоя ссылка - ссылка на временное значение, которое можно уничтожить при желании.
А зачем это нужно? Чисто для удобства чтения кода?
При наличии перегрузки операторов у тебя может возвращаться что угодно (и это очень удобно). В случае отсутствия перегрузки операторов у тебя, как тебе написали до меня, возвращается prvalue.
int yoba(int i) {return 5;}
yoba(5) = 5; можно написать? Нет. Но не потому что возвращается временный объект, возвращается просто rvalue. То, что я писал тут >>36906 , не путай rvalue и rvalue reference.
У встроенных операторов типы а-ля int operator+(int, int) и так далее.
В целом, не еби мозг, занимаются каким-то левым дрочем, а потом оказывается, что С++ сложный. Вся эта хуйня нужна только только того, чтобы понимать, как работает RVO, NRVO и move-семантика. От того, что ты это знаешь лучшим программистом ты не будешь. Но, возможно, какой-то аутист не назовет тебя колхозником потому что иммолейт импрувед.
>>37064
В основном для move-семантики, то есть чтобы работало быстрее. Сравни vector::push_back и vector::emplace_back. В первом случае будет создано больше лишних объектов, а втором ты компилятору говоришь, что помести в вектор то, что я тебе дал и мне это уже не нужно. В этом случае он сможет обойтись без лишних копирований.
Так же без этого весьма геморройно использовать unique_ptr - его же копировать нельзя, а что-то с ним надо делать.
Если честно, не совсем понимаю, что делает vector::push_back и почему в его случае будет создано больше объектов. И не могу оценить прибавку в производительности, потому что не знаю, сколько времени выполняется данная команда.
Падажжи. Так "все знают, что результат a + b это prvalue", или эти операторы не вызываются даже концептуально?
>Так "все знают, что результат a + b это prvalue", или эти операторы не вызываются даже концептуально?
Ты так спрашиваешь, как будто эти 2 утверждения друг другу противоречат.
Для a и b не-классовых и не-enum типов (например, если оба — int) [over.built] вообще не применяется.
Так что считать то, что в [over.built] приводится `LR operator+(L, R)` для арифметических типов доказательством того, что a + b это prvalue для int a, b не получится.
>Ты так спрашиваешь, как будто эти 2 утверждения друг другу противоречат.
Именно так. Результат a+b это не prvalue, это ничто. Вызова-то нет, значит нет и результата. Например
int i = (5+3)/(5+3) может быть скомпилировано в int i = 1. Какой результат у +? Никакого. Это просто ноды в AST.
Поэтому они были вынуждены добавить такую клозу - мол, чуваки, типы у нас такие, но вообще вы этого не видели.
>Если честно, не совсем понимаю, что делает vector::push_back и почему в его случае будет создано больше объектов
На самом деле не всегда. В зависимости от того, есть ли у твоего объекта move-конструктор, copy-конструктор, временный ли твой объект сам (а-ля push_back(Yoba()) - это за счет оптимизаций может вообще с одним вызовом конструктора решиться), или постоянный, а еще от реализации push_back. Я всех тонкостей не помню и каждый раз беру принты и смотрю, как оптимальнее в моем случае. Последний раз такое было пару лет назад, потому что редко, знаешь ли, подобные вещи бывают бутылочным горлышком.
Это так хуйня, из-за которой С++ считают сложным языком, а на практике с тонкостями проще на месте разобраться.
> Результат a+b это не prvalue, это ничто. Вызова-то нет, значит нет и результата.
Откуда этот радикализм?
Литералы, кроме строковых, это prvalue (https://timsong-cpp.github.io/cppwp/n4659/expr.prim.literal)
`5` — это вызов чего? Хотя бы притащи что-нибудь из [over.built].
Или ты считаешь что раз вызов функции с нессылочным возвращаемым типом это prvalue, то любое prvalue должно быть вызовом функции с нессылочным возвращаемым типом?
> Поэтому они были вынуждены добавить такую клозу - мол, чуваки, типы у нас такие, но вообще вы этого не видели.
Нет. Я видел обсуждение где пытались про отсутствующее описание свойства (не value category) одного встроенного оператора сказать, что оно не отсутствует, а следует из [over.built], на что был дан ответ от мембера комитета что для случая встроенных типов [over.built] не применяется и фиксить надо [expr]. Хочешь верь, хочешь — нет.
>>37092
>>37083
>>37079
>>37070
>>37048
А вы могете привести пример кода, где обсуждаемая разница была принципиальна? Не прост, что вот в стандарте написано так, значит оно должно быть так.
Допустим, я смотрю на выражение (a + b) как на возвращающее результат, по аналогии с функцией.
Вот можно ли привести пример кода, где такая аналогия не сработает? Ну, например, код будет вести не так, как ожидалось.
Или же это просто спор о том, что в чорном ящике происходит?
>Вот можно ли привести пример кода, где такая аналогия не сработает? Ну, например, код будет вести не так, как ожидалось.
https://timsong-cpp.github.io/cppwp/n4659/over.built#14
https://wandbox.org/permlink/w5MpwseMmHithwnv поменяй #if 1 на #if 0
tcp по идее сперва нужно открыть. udp позволяет слать сразу, но в любом случае на другой стороне у тебя должен висеть слушатель.
А что такое принты, напомни пожалуйста.
А слушатель - это кто? Функция какая то?
И на сокет данные в каком виде приходят? Это же вроде как просто поток единиц и нулей, то есть слушатель должен будет ещё и дешифровать все это сам?
А обычно между сокетами данные не отправляют, да? Только с сокета на сервер?
И вообще, клиент ведь может несколько сокетов делать для связи с сервером, или так лучше не делать? А закрывать их надо руками или они сами? Как несколько сокетов вообще влияют на производительность?
У сервера hostAddress. Который мы прописываем для сокета клиента, чтобы он читал с него данные. Так ведь?
Опытным путем, закомменчивая строки, выяснил, что это из-за 19 строки. Но в чем проблема там - хз.
server->serverPort() у тебя возвращает число. Попробуй заменить на QString::number(server->serverPort()).
Да и зачем комментить строки, запускаешь в режиме дебага, оно тебе само breakpoint поставит на том месте, где программа крашится. И call stack посмотреть можно будет.
Я итак в режиме дебага запускаю, но почему то нихуя не показывает. В консоли сборки пишет, что процесс завершился успешно. В выводе приложения пишет хуйню с пика.
> server->serverPort() у тебя возвращает число. Попробуй заменить на QString::number(server->serverPort()).
Не помогает. Да и в примере, в котором я смотрел код, все так же. Даже если я возьму код оттуда и заменю им свой, все равно будет писать "Программа неожиданно завершилась". Пиздец какой то. Для Qt Creator такие ситуации - это норма?
Короче, понял, как запускать отладку.
Какой то read access violation у меня.
Алсо, сервер создается, но IP адрес у него почему то 0.0.0.0.
В описании QTcpServer::serverAddress() написано Returns the server's address if the server is listening for connections; otherwise returns QHostAddress::Null. Почему серверу присваивается нулевой адрес, если у меня listen прописан?
short — целевой тип будет оптимизирован по размеру и иметь ширину не меньше 16 бит.
long — целевой тип будет иметь ширину не меньше 32 бит.
long long — целевой тип будет иметь ширину не меньше 64 бит.
Это только для совместимости с архитектурами систем?
То есть long long будет выдавать ошибку в системе виндовс х32?
Hello world плюсики, вот ненавижу я ебаться с любими символьными задачами еб их мать, таки заставили.
В общем есть текстовый файл e.g любая книга там, нужно парсить на слова. Слово — набор символов по правилу a-zA-zА-яа-я0-9 разделенных любым не !правило символом e.g word space (пробел), запятая, да что угодно. Пытаюсь именно через fsanf сделать, красиво то бишь, таким образом fscanf(отсюда,"%[a-zA-z\u0401\u0451\u0410-\u044f\u0430-\u044f]s",сюда);
Если в файле первое слово на инглише -- распознается оно целиком и на этом все, я подозреваю что функция в цикле одно и тоже слово распознает, то есть не переключается на поиск следующего как при fscanf(pIn,"%s",pBuf);. Если в файле первое слово на руссцком то распознается только до первого мелкого символа и тоже стопорится на первом слове. Есть вариант именно через fscanf сделать распозвнование слов ?
>тип будет оптимизирован
>тип будет иметь ширину
> ...
Это все зависит от архитектуры и компилирования. По - идее можешь хуй класть, а можешь запариться и все сделать красиво.
Hello world плюсики
В общем есть тарелка, оттуда надо есть суп.
Пытаюсь именно ножом есть красиво, но он режется.
Есть вариант как именно ножом поесть супа?
А всякие uint_64 зачем?
А в чем тогда смысл
Тот, кто достаточно опытен, чтобы запилить подобный гайд, подобной хуйней заниматься не будет.
Берешь не сильно крупный опенсорс с гитхаба и пробуешь пофиксить любой баг из issues. Попробуй сам, не получится - напиши мейнтейнерам.
Альтенратива - пилить пет-проекты самому, хуже.
> интересны нейросети
Учи питон теперь, хули
> но у нас курс по ним начнется только через год.
Это, конечно, проблема, ведь если ты начнешь изучать сам, это тебе только помешает и тебе пиздец
студентов в вузах чаще всего учат на сишке и крестах
потом часть из них идет работать за еду во всякие нии, геймдев и прочую парашу
так и живут крестобляди
Крестобляди ОЧЕНЬ легко работать на западе. Потому что кресты являются унылым говном вообще везде, поэтому джоны учить кресты не хотят. А тут ты такой молодой и красивый
Хотя этот прав на самом деле, я всегда такой хуйней маюсь, хз почему мне это доставляет.
Ну, факт. Я через кресты вкатился и сейчас пишу на них процентов 20 времени. А кому я был нужен со стандартным стеком? Никому
Это сфера в которую нужно лезть, дома ты ничего на научишься, таких материалов в широком доступе просто нет и у всех своя специфика. Если ты хочешь вкатываться в с++, то заимей базовые знания математического анализа и дискретной математики, чтобы хотя бы задания понимать тестовые и пробуй устраиваться.
Бля как же грустно осознавать что такое проходит мимо, и я никогда не смогу туда вкатиться..
Удачи тебе анонче.
хули мимо, серьёзные языки учит 3.5 человека, 90% ит скота пробует вкатиться в веб, потому что он дико распирен всякими барыгами курсов, здесь же вкатиться более реально
>хули мимо, серьёзные языки учит 3.5 человека, 90% ит скота пробует вкатиться в веб, потому что он дико распирен
Распиарен потому, что отбить вложеннок бабло гораздо проще. Вакансии на веб исчисляются просто тысячами в радиусе 10км от меня, например.
А что я буду представлять зная с/с++? Кроме этого требуют еще чуть ли не PhD по матану чтобы вкатиться, либо 100500 лет опыта.
Рад за тебя анон, если не пиздишь.
У меня вакансии исчисляются десятками, соискателей конечно тысячи. По с++ вакансий в два раза меньше, чем по php, но не мало, по java вакансий почти в два раза больше, чем по php. Если у тебя тысячи, то по с++ будут тысячи/сотни тебе мало? Я с C# устраивался, когда было 3 вакансии на весь город и все с опытом, а ты тут ноешь. Требования ты преувеличивешь, они тебе кажутся завышенными, потому что ты нихуя не знаешь, ты поучи, что в требованиях написано и поймёшь, что они вполне адекватные и минимальные. Распиарен, потому что на курсах зарабатываешь больше, чем в офисе макакой.
Вообще в программировании ты нахуй никому не нужен, будущее программистов весьма хуёвое, оно будет напоминать сегодняшнего водителя. Поголовная автомобилизация, все пользуются машинами, всё доставляется машинами, всё перевозится, каждый чих, каждый пук, стопку из 300 листов А4 возят целый день по городу, сумасшедший дом, всем нужны машины, без машины никуда. Но вместе с тем почти каждый человек с яйцами имеет права и может управлять машиной, в результате чего водители имеют маленькую зп и хуже червя пидора, конечно если это не водитель какого-нибудь полковника, который сам майор или быть может это водитель какой-то йоба-строительной техники, которой умеет управлять 1 человек на 100 000. Вот и с программистами будет так же, ты станешь нахуй никому ненужной обслугой, которой, как грязи, бизнес никогда не позволит, чтобы ему рабочий класс диктовал какие-то условия.
Программисты дорогие? Наплодим тысячи программистов, чтобы рыночек порешал. В таких жёстких условихя в это говно либо нужно не вкатываться вообще, либо вкатываться так, чтобы быть программистов-майором у какого-нибудь полковника на подсосе, либо программистом, который знает ебалу, которую знает 1 человек на 100 000. Вот и выбирай что тебе учить.
>Это сфера в которую нужно лезть, дома ты ничего на научишься, таких материалов в широком доступе просто нет и у всех своя специфика
Неправда, есть опенсорс, который сам по себе лучше 90% коммерции. Не сам код, а соответствующая тусовка - мейллисты и т. п. У меня был наставником один из разработчиков Swift, например.
Сделай один хороший пуллреквест куда-нибудь, и работа у тебя в кармане, при чем сразу на позиции мидла.
>>38286
>Распиарен потому, что отбить вложеннок бабло гораздо проще
А в работе охранником отбить вложенное бабло еще проще.
В этом и прикол, что сюда идут только те, кто может пройти зефирный тест. Сама по себе работа как работа. В реакте например я так и не разобрался.
>Программисты дорогие? Наплодим тысячи программистов, чтобы рыночек порешал.
Но это невозможно. Результат такой политики виден в Индии, плодят, плодят, да нихуя наплодить не могут.
Ну так наплодили и их продуктами пользуется весь мир и бизнес с этого поимел сверхприбыли, потребитель тоже доволен, потому что по нему прошлись рекламой, он и не знает, что ест говно и можно иначе, наоборот рад и просит ещё. Понятно, что индусами ты серьёзных вещей не сделаешь, но для львиной доли рынка серьёзные вещи и не нужны, ит продажи строятся на том, чтобы внушить потребителю, что ему нужен этот продук, хотя на самом деле нет, это касается не только консумеров, но и энтепризе.
Всё держится на объёбе, и это на самом деле хорошо, благодаря этому объёбу работа хотя быть есть.
Читай STL, иначе большая часть советов из современной книги будет тебе просто не понятна.
>программистом, который знает ебалу, которую знает 1 человек на 100 000
Хочу это.
Ты имел ввиду с/с++?
>есть опенсорс, который сам по себе лучше 90% коммерции
>опенсорс лучше 90% коммерции
>опенсорс
>лучше коммерции
>опенсорс
>лучше
Посмотри исходники винды на досуге
Я тебе раскрою страшную вещь, но за опенсорс не платят, поэтому там нужно быть полным бесполезным долбоебом, чтобы тебя не приняли. Если ты полезен проекту, тебе будут помогать - объяснять какие-то вещи, ревьюить твой код, пока он не станет нормальным для пуллреквеста, и так далее. Естественно, нужно уметь в гайдлайны проекта - если ты пишешь код на уровне laba1.cpp, то конечно тебя нахуй пошлют.
Стыдно вспомнить, но я git rebase научился пользоваться именно после матюков.
Возьми проект, не сильно большой (там много бюрократии и ты нахуй не нужен - профессионалы на зарплате сидят коммитят), не сильно маленький (там два васяна годами пилят то, что хотят), короче тысяч 5 коммитов, с нетоксичным мейнтейнером (короче он не должен посылать нахуй с обсуждениях), по интересной тебе теме, зайди в issues и посмотри, что ты можешь пофиксить. У любого проекта на С++ ДОХУИЩА багов типа "здрастьте я юзер, я пукнул когда луна была в юпитере и у меня выпал сегфолт", который всем просто лень фиксить. А дело там скорее всего в паре строчек, и что кому-то лень фиксить, а для тебя принятый пуллреквест и строчка в authors.txt
У меня еще такая хуйня была, юзаю библиотеку с BSD-лицензией, в ней баг, который решен в виде пуллреквеста и висит год. Я на этот баг напоролся, охуел, но в общем наткнулся на этот пуллреквест. Ну и хули, написал автору, мол, давай я реквесты принимать буду, а то очень нехороший баг, а ты забил на свою репу, и теперь я мейнтейнер с правом приема пулреквестов. А автор этот член комитета стандартизации С++.
Только не участвуй во флеймах и прочей токсичной поеботе. Если такая хуйня начинается, лучше смени проект.
> А автор этот член комитета стандартизации С++.
Так чем закончилось в итоге?
Поебались? Он пригласил тебя в свои СШП в качестве молоденького супруга? Рассказывай, не томи.
Спасибо! Огромное!
Я вот просто без задней мысли, зашел на гитхаб, и нашел кое-что по душе - игру из юношества моего :)
Чуваки пилят форк.
Блин, не надо ничего из main.cpp) Я кажись догадался. У тебя statusLabel не создан, а ты берёшь и по указателю пытаешься что то в него поместить. У тебя даже в отладчике написано это в списке справа "statusLabel 0x0".
Бля внатуре похоже так. Чувак, приду домой, проверю, если починится, я тебя расцелую
он как хорошая жена - ночью в постели как шлюха, но на людях сама скромность!
Чёт не помогло, но проблему решило то после того как я поставил квалификатор const в конструкторе. НО всё равно не пойму почему, в GDB всё работало с первоначальным кодом.
Литералы это конст чар.
>Один ебучий треугольник нарисовать 120 строк кода.
Этот код пишешь один раз всего, потом копипастишь или оборачиваешь в либу.
Кстати, на Vulkan вывод треугольника - больше тысячи строк.
>вам по началу сложно было
Первый раз все сложно. Самое сложное там не программный интерфейс, а понимание компьютерной графики.
Нет, зачем?
Работает, анончик, вот тебе котятки.
Теперь осталось разобраться, почему айпишник нулевой присваивается.
Нет, это для глубокой теоретической информатики. Даже в теории алгоритмов сейчас вместо тьюринга в качестве абстрактной машины используют рам-модель.
>будущее программистов весьма хуёвое, оно будет напоминать сегодняшнего водителя
Плохая аналогия. Программировать в принципе могут не все, а нормально программировать - вообще очень маленький процент населения. Даже с нынешним наплывом вкатывальщиков, рыночек все равно всех проглотит и добавки попросит. Прогресс постоянно подкидывает новую работенку. Например, кто пятнадцать лет назад думал об ML и Data Science за пределами академий?
Потому что есть десятки чуть других способов вывода треугольника, и большинство из них нужны.
Ну какой-то здравый смысл есть. Я тоже раньше думал, что вот начнут массово детишек в школе питону учить, и тети сраки в бухгалтерии пдф-ки будут скриптом склеивать, а с базой будут на SQL работать. Кодинг-то не такой сложный вроде бы. Хуй. У большинства людей мозги не так повернуты, чтобы даже в визуальном редакторе ноды соединить правильно. Какой-то гайки в голове не хватает.
>Какой-то гайки в голове не хватает.
Даже без этого жопа с пальцем, как сравнить официанта и инженера-геолога. А с этим так вообще.
В крестах вроде всегда равен по стандарту. В сишке - нет. Были какие-то компиляторы для древних архитектур, где ненулевое значение.
Думаю он имел ввиду что использование NULL не всегда является однозначным, и если тебе нужен именно нулевой указатель, то в С++11 появилось специальное ключевое слово, которое гарантированно означает то, что тебе нужно.
У него сравнение в том смысле, что все водить умеют, но не каждый водитель. Как все писать умеют, но не каждый писатель. Вот так же и с программистами, все будут уметь кодить, но за деньги кодить будут или макаки или профессора.
У Страуструпа было написано используйте вектор везде где только можно в книге. Погуглил, даже в презентации он это сказао. Последняя строчка. Ну чем он плох? Это ж удобный безопасный массив, с ним не надо ебаться, как можно быть против?
Тогда я его понял неправильно вообще, лол.
можешь их накодить на плюсах, будет весело
легко проверять их, скармливая упражнения из академических учебников..
Зачем нужен ненадежный вектор, инвалидирующий все поинтеры в случае аллокации, когда есть божественная дека, лишенная этого недостатка и в качестве бонуса дающая спереди?
std::deque
У деки другой смысл, рандом акссес за О(н), речь о том, что чем плохо вместо массива вектор юзать всегда. Деку вместо массива не поюзаешь.
>Откуда неоднозначность?
Неоднозначности нет. Есть вариант, что ты хочешь вызывать f(void), но у тебя где-то заинклудится и вызовется f(int) и выстрелит тебе в ногу. С nullptr такой проблемы нет.
Извиняюсь за подпись, хотел посмотреть что за поле имя и забыл.
А как работает вектор, напомните? Он же дает произвольный доступ к элементам, но при этом может менять размер?
>рандом акссес за О(н),
Разве? Там же вроде массив указателей на субмассивы одинакового размера. То есть сначала ищется указатель на субмассив (за O(1)), а потом в нем элемент по индексу.
В gcc это некий __null
Обёрнутый в удобную упаковку с ручками динамический массив. А недавно один умный чувак сказал мне, что я ебанат и зачем использовать вектор, когда достаточно обычного массива, но как же ручки, потом безопасность и тд. Непонятно.
>Он же дает произвольный доступ к элементам, но при этом может менять размер?
Да. Но ты не можешь хранить указатели на элементы вектора. При увеличении размера он может аллоцировать память, и перемещать элементы туда. С декой - можешь (если не удаляешь элементы из середины).
Ну там от реализации зависит, либо вставка за О(н), либо доступ, мне когда двусторонняя очередь представляется как-то не понимается, откуда там должен быть рандом аксес, положь в конец, положь в начало, возьми с конца, возьми с начала и тд.
У меня нормально работает, студия 17
>что я ебанат и зачем использовать вектор, когда достаточно обычного массива
От ситуации зависит. Если тебе надо выделить на стеке пяток интов, то вектор действительно глупо использовать.
В деке как структуре зависит от реализации. И по мне так то, что в деке как структуре возможен рандом аксес бред немного.
>А зачем тебе указатели на его элементы?
Чтобы обращаться к ним через указатель, а не по индексу.
Массив с переменным размером?
>Почему? Разве он настолько много жрёт?
Он аллоцирует память в хипе, а это может быть дорого даже на современных машинах.
>это может быть дорого даже на современных машинах.
Ясно, ну похоже это ответ, я думал это давно уже не проблема.
Вообще особая штука. Указатель на что угодно, но в арифметике ведёт себя как char*.
>А по индексу тебе не нравится?
Тем, что указатель самодостаточен, ты можешь передать его куда-нибудь, сохранить, а с индексом для обращения к элементу нужен еще и сам вектор.
Ну по мне так странно требовать этого после реаллокации, с декой-то там блоками хуярится.
>Что значит дорого?
Что лучше очень часто не вызывать.
>А надо все в стеке делать? С хипом лучше не связываться?
Если функция часто вызывается, то лучше маллок в ней не делать.
>компилятор при дебаге
Почти квантовая поебень, наблюдение начинает влиять на ход эксперимента.
Ну так ты время тратил на каждое выделение, а теперь ещё и на каждое освобождение будешь тратить.
Представляешь примерно, как аллокатор общего вида работает? Он менеджит дохрена памяти, должен обращаться периодически к ОС, не допускать фрагментации, ходить по куче всяких списков и тд. И так каждый раз при вызове malloc или free. Маллок тут, маллок здесь на каждой операции программы - вот и просраны миллисекунды, медленно переходящие в секунды при длительной работе.
Если тебе нужна память именно на куче - выдели её один раз для твоей операции, и освободи в конце программы.
Конечно нет, просто относись спокойно к спецэффектам, вот без дебага было как: в двух тредах мютекс лок мьютекс анлок, тыц тыц, в cout выводит mutex1 mutex2 mutex1 mutex2, нормально, а с дебагом то же самое mutex1 mutex1 mutex1 mutex2 mutex1 mutex2 полный рандом.
Если под обычным массивом он подразумевал int yoba[], то он тоже ебанат, потому что обычный массив в С++ называется std::array.
А так вектор хорош в 99% случаев, еще 1% он плох, но в 99% из этого процента это будет преждевременной оптимизацией. Так что не парься.
>Тем, что указатель самодостаточен
Пока твой вектор жив.
>а с индексом для обращения к элементу нужен еще и сам вектор.
И это хорошо, потому что если вектор мертв, то он не жив
>под обычным массивом он подразумевал int yoba[]
Его, тк я переспрашивал мб стд аррай? , да и вот с std::array хуета, пушо один хуй аллокация будет хотел сказать я, но да погуглил, std array на стеке целиком, прикольно, век живи век учись. Спасибо двач.
Да такая специальная залупа для передачи управления между тредами как я понял, вот у тебя прога в одном треде работает, потом хоп мьютекс лочит тред и всё, а в другом треде ожидание пока он разлочится и хоп, захватился этим и тд, погугли, он сам за себя говорит.
Mutual Exclusion. Штука, которую может "захватить" только один тред. Используется для того, чтобы в любой момент времени только один тред владел какими-то данными или исполнял какой-то код. Остальные, обычно, ждут, пока мьютекс разлочится, чтобы захватить его самим.
int i(); это функция с именем i возвращающая тип int. Если хочешь вызвать дефолтный конструктор, пиши int i;
Не помню, это был разовый эксперимент в винапи, я гуглил и походу разбирался как сделать, наверное общий, но наверное может быть и больше, там какой-то ололо интерфейс был, как связать тред и мьютекс или типа того. Погугли.
У меня и там и там 0 получился.
Я хочу инициализировать "i" нулём.
>А, так дело во времени? А я думал, вся проблема в трате памяти.
Маллок - это системный вызов, а они медленные. Медленные - это верхний порядок в районе несколько сотен тысяч вызовов в секунду, когда все процессорное время чисто на маллоки будет уходить. Если функция нечасто вызывается, то можешь не париться вообще.
Никогда не работал с directx. Судя по диагональному прочтению, fence - штука, позволяющая ждать и объявлять определённые события. Эти скорее больше похоже на conditional variable или Events.
ЕМНИП в "Соверменных Операционных Системах" Таненбаума (или в любой книге про многопоточное программирование) описаны все основные примитивы синхронизации потоков.
>Маллок - это системный вызов
Не обязательно. Он может вызвать какой-нибудь VirtualAlloc/sbrk, а может и не вызвать.
>Он может вызвать какой-нибудь VirtualAlloc/sbrk, а может и не вызвать.
Там кроме этого еще мьютекс как минимум.
Кстати да, не подумал об этом. Но я думаю аллокаторы держат маленькие арены отдельно для каждого треда, чтобы избежать слишком частого дёрганья этого глобального мьютекса.
>Но я думаю аллокаторы держат маленькие арены отдельно для каждого треда, чтобы избежать слишком частого дёрганья этого глобального мьютекса.
Не получится. Ты можешь вызывать маллок в одном треде, а фри в другом. Как минимум фри синхронизировать придется.
Я так на DirectX11 пока рисовал треугольник чуть не пизданулся. Посмотрел, какой охуенный треугольник получился, и дропнул это дело.
>Даже если NULL не задефайнен в 0, должна вызываться f(int). Он же превращается после препроцесса в целочисленный литерал.
С разморозкой, начиная с C++11 NULL может быть определён как nullptr, который к целым числам не преобразуется.
>В деке как структуре зависит от реализации.
А может всё-таки от требований стандарта?
>И по мне так то, что в деке как структуре возможен рандом аксес бред немного.
Максимум может быть амортизированное константное время доступа.
> Один ебучий треугольник нарисовать 120 строк кода.
Пиздабол. Именно просто нарисовать с уже готовым всем остальным в однус троку можно. Матрцы проекции/хуекции в случае с трекгольником 2D, хуйня то бишь. А вообще OpenGL проебал дайрект иксу от мелкомягких где - то в 90 - ых, ну ты понял.
Не, пространство имен у меня жестко прописано. Суть в том что cout не возвращает значения вот и все, приходится, в данном случе, принудительно спрашивать.
Раз уж я взялся тебе помогать, в функцию listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) по умолчанию передаются переменные QHostAddress::Any значит, что прослушиваться будут интерфейсы IPv4 и IPv6. Для IPv4 будет прослушиваться адрес 0.0.0.0
Если передать нулевой порт, будет автоматом выбран любой свободный порт, что у тебя и происходит.
База - циклы, ветвления etc js списана с си, как пони.
Но что за хуйня идёт дальше? Указатели, ссылки?! Куда не посмотришь, теперь эти звёзды в кошмарах снятся.
Может кто посоветовать литературу, которая бы играла роль вазелина при переходе на си с более высокоуровневых?
Си в другом треде. Вкатится в дцппшную ебанину до последнего стандарта нужно иметь железное очко и крепкие нервы. Если тебя уже звезды напрягают то лучше беги не оглядываясь, глупец.
>Может кто посоветовать литературу, которая бы играла роль вазелина при переходе на си с более высокоуровневых?
http://wg21.link/std17
мозг
А мог бы сохранить его в отдельном классе и рисовать потом несколько треугольников.
Спс.
Либа подключена, пересобрал ее по гайду для своей студии. Вроде всё на месте. Мне подобные ошибки давало когда я только glad и glfw3 подключал, но там решалось всё вкидыванием файла glad.c в проект. А тут при вкидывании SOIL.h выдает пик.
Я так понимаю файлы где-то конфликтуют, но уже час ебусь и не пойму где.
поддвачну stbi
А почему нельзя cout << (expr ? "something" : "") << endl; ?
Нихуя у тебя и не получается, потому что обе ветви тернарного оператора должны иметь один и тот же тип. Или хотя бы быть приводимы друг к другу, если не ошибаюсь.
Скроллил треды /pr, случайно упоролся по С. Захожу и сюда иногда, планирую в последствии вкатываться в плюсики.
Никакого дальноидущего плана, просто для души и по приколу.
>Указатели, ссылки?!
Детские какульки по сравнению с сопроматом, играючи просто.
Слабо трифорс на direct x
А что не так с сопроматом в с++?
https://github.com/skypjack/entt
Если да, то как вам по сравнению с аналогами, не завалялся ли пример какой-нибудь "змейки" с использованием.
Там есть какая-то ебанутость, что хедеры опенгла и винды надо подключать в строго определенной последовательности. Погугли эту тему
я про шизиков, которые деку советуют. Страуструп прав.
std::deque реализация двусторонней очереди, двусторонняя очередь может быть на списке двойном сделана, там за о(н) доступ и я это считаю правильным, потому что это блядб двусторонняя очередь, какой нахуй рандом аксес, ты очередь видел вот люди в очереди стоят, чтобы добраться до 5 человека нужно пролистнуть пять и добраться, а так получается мы тупо берём пятого в ней и делаем с ним чтото, пока другие стоят и ждут. Беспредел.Сделелали бы отдельную хуету типа std::block_list и там соглы, никаких вопросов, а так бредово.
Да я уже stb_image скачал. А так эту хуйню я и сам заметил, там из-за ебанутых #ifndef порядок важен очень, иначе часть либы не подключиться и будет миллион ошибок. Я ебал в рот эти ресурсы по опенглу, на сайте висит книга которая должна быть копией сайта, но при этом там разный материал
Слушай, а сервер ведь только один порт слушать может одновременно? То есть экземпляр QTcpServer? А если я хочу несколько клиентов обслуживать, то мне надо будет несколько QTcpServer-ов инициализировать?
А как сервер будет отличать разные соединения? Ну вот например у клиента два сокета, на одном командные сигналы, через другой данные отправляются. А на стороне сервера все на один порт приходит. Еще и от других клиентов то же самое. И как серверу различать эти разные данные?
А тебе именно OpenGL нужен? Есть SFML - плюсовая обёртка на SDL, что, в свою очередь, сишная обёртка над OpenGL.
Я сейчас тренируюсь прогать именно на этой штуке, куда проще, чем опенгл + на оффсайте хорошие примеры.
>А как сервер будет отличать разные соединения?
Посмотри структуру пакета TCP. По source port'у клиента он будет отличать.
Вообще почитай Танненбаума Компьютерные сети как художественную литературу, книга толстая, но за неделю такого чтения все вопросы отпадут.
То есть сервер должен заранее знать, на каком порту что идет?
Таненбаума не люблю, у него слишком хуевая структура книг. Как будто ее студенты писали копипастом за зачет в семестре.
>То есть сервер должен заранее знать, на каком порту что идет?
Нет, порт клиента будет рандомный. После установки соединения клиент и сервер должны договориться. В твоем случае лучше всего клиенту послать установку команд или данных сразу после установки соединения. Таким образом у твоего состояния появляется стейт.
Но на дворе 2019 год, люди сидят с ноутбуков через вайфай самолета, летящего по разным странам, а все это происходит через TOR. Делать при таких условиях stateful протокол, в котором у тебя что-то зависит от IP клиента - хуевая идея. IP клиента может меняться хоть каждую секунду.
Тебе нужно делать stateless протокол, в котором клиент посылает сообщение, где каждый раз идентифицирует себя каким-то идентификатором сессии и затем описывает что именно он посылает.
А еще лучше не выпендриваться и взять готовое решение типа http или вебсокетов.
> Тебе нужно делать stateless протокол, в котором клиент посылает сообщение, где каждый раз идентифицирует себя каким-то идентификатором сессии и затем описывает что именно он посылает.
То есть слать по одному соединению все? И команды, и данные?
Конечно. Клиент должен посылать сообщения, каждое сообщение должно содержать в себе
1. Версию
2. Идентификатор сессии
3. Размер данных
4. Сами данные
Данные в свою очередь могут состоять из команды+параметры или же кусок файла, в самимости от заголовка этих данных.
Первое сообщение должно запрашивать у сервера идентификатор сессии. Далее если даже соединение разорвется или у клиента сменится IP, клиент его восстановит и продолжит
В зависимости от типа данных протокол желательно сделать текстовым - то есть версия это просто набор буквоцифр, затем пробел, затем сессия в виде набора буквоцифр и так далее. С самими данными сложнее, если они могут быть текстовыми (то есть в них отсутствует символ \0), лучше слать текстом, который завершится символом \0 и это будет концом сообщения, иначе придется выкручиваться за счет поля с размером. Само поле лучше оставить в любом случае, потому что парсеры бывает ломаются, и так у тебя будет больше шансов понять, что там случилось.
А вообще есть смысл использовать TCP, если использоваться будет только локалка, или проще все через файловую систему запилить?
Тяжелый - который серверу и клиенту тяжело поднять, поэтому приходится ебать байты.
SFML - это никаким боком не обертка над SDL, а отдельная реализация схожих вещей на плюсах в академичном ООП. SDL - это не обертка над OpenGL, а лишь одна из частей этого, причем не обязательная. Что ты вообще пишешь.
Ну епт, для роутера и сервера на 666 ядер тяжелый реалтайм это разные вещи, не догадываешься?
Правило простое, если HTTP тебе хватает, используй HTTP. Если же это для тебя выливается в большие траты на железо (например, ты ютуб), выдумывай что-то еще.
Тем, что для только небольшого количества типов игр подойдет http (вебсокеты).
Мужики, объясните, почему при таком объявлении длинны массива и самого массива int будут утечки памяти.
мужиком ты становишься когда приносишь вываренный череп врага в родную деревню, вечером все закатывают вечеринку, жарят свинью на костре, и под бой барабанов ты идешь ебать свою ровесницу в вигвам или че там они строили
Только там где требуется низкая задержка не подойдет, там проще UDP срать. И я про это писал
Вже...
Ты сильно промахнулся. Из какой ты пещеры вылез?
Зависит от игр, на серваках часто udp и его реализации eNet там.
То есть это указатель на конец массива? Тогда нахуя ты его называешь длиной.
length пишется так, а не lenght
Судя по коду утечек может и не быть, хо
UPD юзают где гарантии доставки не нужны. Как правило они не нужны там, где малость задержки важнее корректности. Поэтому я написал про реалтайм
Ну так создаешь длину массива как int, потом при добавлении элемента в массив этот int++, наверное это он тебе говорил. Не указателя на int.
Как у тебя Length->GetValue компилируется, если это указатель на int? Ты согласованные скрины кидай хотя бы.
Я утечек не вижу, в конструкторе 2 new, в деструкторе 2 delete.
Наверное, если в конструкторе Length->GetValue кинет исключение, то утечет память Lenght, но учитывая общую говняность кода этим можно пренебречь.
В смысле?
Попробуй modern effective c++ что-ли почитать. На сам деле новые стандарты делают многие вещи гораздо проще.
>Почему? Подробности плес.
-1. Самописный массив место стандартного. Но ты, допустим, учишься (чему?)
1. _Int и _Char вместо темплейтов
2. Указатель на int вместо int
3. Общая бессмысленность - Cls_Value_Int - это нахуя? Хранить интегер в куче просто так?
4. lenght вместо length
Стиль тоже так себе, мне не импонирует. Почитай там саттера и александреску "101 хуйня про С++"
Я и старый то не совсем понимаю. Вот auto где применять и в каких случаях он полезен?
Везде где только можно, он гарантирует что переменная определена.
>Самописный массив место стандартного.
Что ты под этим подразумеваешь? Да, учусь. Я это пишу ещё и потому, чтобы не копировать многократно обработку этого цикла, просто создать и использовать готовые методы с нужными проверками, которые я также прописал в функциях.
>темплейтов
Я как раз хотел спросить как быть, дабы лишь раз прописать класс массива, но чтобы в него можно было запихнуть разные типы данных, думал, шо через указатель void, а тут такое. Благодарю, это мне пригодится.
>Общая бессмысленность - Cls_Value_Int - это нахуя? Хранить интегер в куче просто так?
опять же для удобства, иногда бывает надо напрямую получить доступ к переменной в классе, а делать 100500 set и get явно плохой вариант.
Последнее опечатка же.
Стиль такой, чтобы не запутаться, не люблю стены текста с огромным количеством вложений.
Да. Особенно в шаблонах приятно так делать
//T - некий контейнер типа вектор
template<typename T> yoba(T x) {
auto a = t.begin();
}
вместо
T::forward_iterator a = t.begin(); // ну или как-то так
>Что ты под этим подразумеваешь? Да, учусь.
Вместо этого лучше бы почитал код STL'ного вектора и почему он устроен так, а не иначе. Я за свою жизнь насмотрелся на самописные контейнеры, заебало уже, ну нахуя, почему на питоне никому не приходит в голову первым делом запилить свой собственный словарь или еще что-то, а все пользуются библиотекой, а на С++ считают важным эту библиотеку переписывать.
>опять же для удобства, иногда бывает надо напрямую получить доступ к переменной в классе, а делать 100500 set и get явно плохой вариант.
Не вижу связи, как тебе класс-обретка для инта поможет в этом
Ну, это называется вывод типов и иногда он может быть чреват - худшей читаемостью кода либо тем, что ты думаешь, что тип один, а компилятор вывел другой. Drink responsively
> думаешь, что тип один, а компилятор вывел другой
Навел мыщку на имя и сверился со своими думами.
Пиши как удобно
> ну нахуя
Чтобы понять зачем это было придумано. Я только сейчас пришёл к тем же шаблонам и прочитав теорию легко это усвою, ведь я грубо говоря изобрёл велосипед и теперь буду использовать это уместно, а не пытаться использовать то, что не факт вообще стоит использовать.
>Не вижу связи, как тебе класс-обретка для инта поможет в этом
Как минимум не будет мозолить глаза, как класс она приятнее, не шучу.
>Чтобы понять зачем это было придумано.
Ну поэтому я поставил это под -1.
Хотя крестовый вектор ты все равно не переизобретешь.
>Как минимум не будет мозолить глаза, как класс она приятнее, не шучу.
Так себе мотивация.
В любом случае ты сильно помог мне подсказав про шаблоны, теперь меня ждёт очередной прорыв и сильное сокращение трудозатрат.
Вся проблема С++ в том, что хорошей книги для начинающих просто нет. У Страуструпа тоже говно.
Лично я рекомендую читать Кернигана и Ричи, Дизайн и эволюцию, Мейерса, Саттера, компилировать это все с своей голове и таким образом становиться хорошим программистом. Но это я рекомндую, больше так никто не делал.
А может лучше не читать, а больше практики?
Дизаен и Эволюция заинтересовала, правда её чот в интернете нету, видать придётся ползти на Удельную или где там книжная ярмарка бывает.
Надо чередовать. Если будешь читать то, что сам не переживал, пропустишь мимо ушей. А если дохуя практики, то будешь изобретать хуевые велосипеды уровня 70-х годов.
В интернете есть, посмотри где-нибудь на торрентах, раз правообладатель везде анально огораживает все
По моему скромному мнению, надо изучать от С к С++ дабы хотя бы понять, зачем что-то было внедрено в него.
>>39662
Это да, вот выше мне подсказали про шаблоны, до этого шугался, теперь написав много одинаковых классов с разными типами данных пришёл к ним.
>>39664
На рутракере глядел, не нашёл, может плохо смотрел, ведь мне нужна Русская версия, а там есть ещё и на оригинале, видимо программист, не знающий англ языка это нонсенс, а ведь он меня так раздражает.
Благодарю
авто по правилам деклтайпа выводит
вот оттуда же
Потому что в зависимости от условия мне нужно чтобы выполнялся cout или что - то другое (в данном случае вывод в стрим), не ужели это не понятно из скрина, вот жеж пишу >>39104 ? Вот как тут можно увидеть что я пытаюсь вывести то или иное в зависимости от условия ?
>Нихуя у тебя и не получается
>потому что обе ветви тернарного оператора должны иметь один и тот же тип. Или хотя бы быть приводимы друг к другу, если не ошибаюсь.
Во - первых получилось уже, во вторых, то о чем ты пишешь это следствие из того что перед оператором обычно становится return/переменная и тд куда он отсылает либо первое значение либо второе, то есть в первую очередь значения должны быть, ну а по типам там уже в завимиости от того куда отправляю, типы можно и свои какие угодно нарисовать.
Я канешно извеняюсь...
Но еб твою мать, если в зависимости от условия нужно что-то выполнять или не выполнять, то у меня для тебя хорошая новость:
В язык добавлена конструкция специально для таких случаев, она называется оператор if.
Запятую хоть перегрузил?
>Вот как тут можно увидеть что я пытаюсь вывести то или иное в зависимости от условия ?
Потому что твой ебаный код - это в точности вот это:
if (flag>0) false;
else cout << "хуйня" << endl;
И значит это, что ты в зависимости от условия хочешь либо что-то вывести, либо ничего не выводить.
А cout << "", ВНЕЗАПНО, ничего не выведет. Охуеть, да?
>во вторых, то о чем ты пишешь это следствие из того что перед оператором обычно становится return/переменная и тд куда он отсылает либо первое значение либо второе, то есть в первую очередь значения должны быть, ну а по типам там уже в завимиости от того куда отправляю, типы можно и свои какие угодно нарисовать.
Блядь, ты прикалываешься?
Может, ты сначала почитаешь про тернарный оператор и больше не будешь писать в своем коде такую хуйню?
Оператору ?: вообще насрать, что перед ним ставится, хоть ничего ему не ставь. Ты в курсе вообще, что ты можешь написать true ? void : void ? Это оператор, блядь, у него аргументы должны быть приводимы, а не левая сторона выражения. Если тернарный оператор вернёт строку, а ты попытаешься присвоить ее переменной типа int, ты получишь совсем другую ошибку.
Почему ты, блядь, не постишь со словами "никампилица" код типа 1 + vector<int>(10)? Или это почему-то для тебя очевидно?
>>39755
>>39104
А если уж говорить касательно того, что ты хочешь в зависимости от значения флага выводить либо в консоль, либо в файл, то почему ты ставишь заглушку в виде false?
И если бы ты, опять же, задумался, то почитал бы доки и сделал бы так:
(flag > 0 ? fout : cout) << "текст";
Но ведь это же не говнокод, правда?нет, это тоже говнокод
>>39755
>>39757
https://ideone.com/iJvxIr
я все правильно сделал??!
код же компилируется! и запускается!!))
Че, к кодстайлу хочешь приебаться? А я может еще и табами выравниваю, и хуле ты мне сделаешь?
не обязательно писать сюда куда именно ты пошел, главное что с доски съебал.
Достойный ответ(стрелки)
Предлагаю закрыть еблище, червяк который почему-то возомнил себя человеком
>>39784
>>39785
>>39786
>>39787
Вот тебе ( >>39781 ) пример работы с указателями, не блпгодари.
Автор | >>39783 | >>39785 |
>>39787
Не знаю о чем ты, я аообще мимо на эту доску зашел так как писал про тринарный оператор и сейчас с нее съебу, ИМХО просто писать что ты нихуя не понял при этом не написать что именно и как пытался (что читал, примеры кода), объясните простыми словами про такую очевидно простуи и важную вешь как указатели все равно что заявить о своем умственном недуге, а посему самое эффективное разъяснение это послать нахуй.
типа чем int *a лучше int a
поэтому попросил довольно просто визуализировать ситуацию, где будет применяться указатель, а не обычная хуйня и все, а ты начал вести себя как ебаное животное, и ждать в ответ на свой выпад что-то иное
Без указателей ты даже массив a не сделаешь. Указатели первичны, массивы вторичны. a это на самом деле *(a + i). Более того, ты можешь написать i[a], потому что это то же самое. Улавливаешь?
>std::deque реализация двусторонней очереди, двусторонняя очередь может быть на списке двойном сделана, там за о(н) доступ
От deque::operator[] требуется не более чем амортизированная константа. Хватит бредить.
>Ну если для тебя "бенефит" сложно перевести как "профит",
Борется с соломенным чучелом, молодца.
> Пытался разобраться
> я не понял в чем их преимущество над обычными переменными
> т.к больно сложная концепция
> ты ебаное животное
Ясно. Ну иди любой мало мальский полезный АТД организуй без них, ах да, helloworld.cpp же этого не требует, уточняй в следущий раз.
Да везде на самом деле. Есть у тебя контейнер, инвертарь в игре, например, это будет массив указателей на предметы. Ты, не зная, указатели сделаешь массив индексов в некотором глобальном массиве предметов и оно будет работать, но это хуже. То есть
struct Predmet{
void do();
};
далее
struct Chuvak {
vector<Predmet звездочка> karman;
};
либо
vector<Predmet> premdety;
struct Chuvak {
vector<int> karman;
};
В первом случае у тебя будет
Chuvak chuvak;
//... заполняем карманы
(*chuvak.karman[0]).do();
вто втором
predmety[chuvak.karman[0]].do()
Естественно первый способ лучше, потому что ты не привязываешься к какому-то массиву, а указываешь непосредственно на предмет. Но обойтись без указателей можно, поэтому новички и не понимаю, о боже, оперативная память, АДРЕСА какие-то, как страшно жить, лучше по-старинке буду индексы массивов везде передавать, и долго отказываются понять, что это такое.
Да везде на самом деле. Есть у тебя контейнер, инвертарь в игре, например, это будет массив указателей на предметы. Ты, не зная, указатели сделаешь массив индексов в некотором глобальном массиве предметов и оно будет работать, но это хуже. То есть
struct Predmet{
void do();
};
далее
struct Chuvak {
vector<Predmet звездочка> karman;
};
либо
vector<Predmet> premdety;
struct Chuvak {
vector<int> karman;
};
В первом случае у тебя будет
Chuvak chuvak;
//... заполняем карманы
(*chuvak.karman[0]).do();
вто втором
predmety[chuvak.karman[0]].do()
Естественно первый способ лучше, потому что ты не привязываешься к какому-то массиву, а указываешь непосредственно на предмет. Но обойтись без указателей можно, поэтому новички и не понимаю, о боже, оперативная память, АДРЕСА какие-то, как страшно жить, лучше по-старинке буду индексы массивов везде передавать, и долго отказываются понять, что это такое.
Не мешай педагогическому процессу, пидор.
Большая разница, если как в stl то амортизированная константа, а если на листе, то О(Н), и пиздец нелогично то, что в очереди(!) сука рандом аксес за О(1). Можно было сделать другую структуру типа список массивов, чем по сути и является std::deque и никаких вопросов не было бы. А так бредово, мы от самой структуры спускаемся к реализации, это как в мапе можно было бы цвет ноды возвращать, эта хуеты не должно быть снаружи, а она как фича выставляется.
>как в мапе можно было бы цвет ноды возвращать
Тип мапа это красно-чёрное дерево, что сложного добавить метод , которая бы возвращала цвет ноды, но нахуя? Снаружи это словарь, как и std::deque снаружи двусторонняя очередь, нахуя оставлять рандом аксес операторы, их вообще там быть не должно.
Ну сука, давайте к стеку operator[] тоже приделаем тогда, а хули. Короче бред пиздец.
Хуетки. И приму, нехуй мне тут напоминать, ясно тебе? Если я шизик это не значит, что я неправ и у меня нет чувства вкуса, чувства прекрасного. А приделать operator[] к очереди полнейший пиздец.
>двусторонняя очередь уже есть — это std::list
Это двусторонний список, блядь. По твоему мне зря в вузе структурами данных мозг ебли?
Нигде, на листе тоже никакого запрета нет, ебашь пожалуйста за О(Н) перебирай, если ебанат такой. Это сука очередь, её смысл в том, что ты не можешь в середину залезть и вытащить что-то оттуда или положить что-то туда, она не предназначена для этого, блядь.
В стеке и queue тоже нет запрета, хуле бы не влепить туда operator[], ну а чё, нормальная же тема.
>Это двусторонний список, блядь. По твоему мне зря в вузе структурами данных мозг ебли?
Структурами может не зря ебли, но зря не ебли логикой, поэтому ты вышел дебилом.
Двусторонняя очередь это абстрактное понятие в виде требования к набору операций (заталкивание и доставание элементов спереди и сзади), и это в std::list есть.
std::deque создавали в том числе ради рандом эксеса.
Это не контейнеры, а врапперы - ты можешь захотеть врапнуть лист, например, поэтому у них интерфейс ограничен.
Дек же это контейнер, то, что он расшифровывается как-то похуй
Блядь, лист это лист, дека это дека, это разные вещи, в лист ты можешь вставлять в середину, например, дека не для этого.
И что? По умолчанию там дека как контейнер используется, если лист поставил в темплейт параметре сам еблан и тд Оп
>По твоему мне зря в вузе структурами данных мозг ебли?
Кароче, единственная твоя претензия что в C++ под названием deque обозначается не то, что было в методичке Урюпинского Заборостроительного. Утёнок as is.
С каких это пор интерфейс сущности определяется по тому, что она делать НЕ должна, а не потому, что она делать должна? Есть push и pop - это стек. То, что у стека есть дополнительные функции, не стеком его не делает.
Ну так а нахуй тебе явно указывать лист, а потом рассчитывать, что рандом аксес не за О(н) отрабатывать будет. Суть-то в том, что в queue нет никакого рандом аксеса, а в двусторонней с какого-то хуя есть. Пиздец некрасиво, я говорю, ну нужна вам структура с таким функционалом, ну запилите вы какой-нибудь std::list_array или типа того и хуй с вами. Но нет, запилить очередь-не очередь, ибо нам поебать.
Моя претензия в том, что это бред, если вы называете что-то очередью, то пусть, пожалуйста, это что-то будет вести себя как очередь, пусть, пожалуйста, у неё не будет методов, которые превращают это во что-то не то, пользуясь особенностью внутренней реализации, не даёт функционала внутренней реализации вовне. Вполне адекватное ожидание, блядь.
>это что-то будет вести себя как очередь,
Он ведет себя как очередь, оба метода очереди (запихнуть в конец и вытащить с начала) предоставлены.
У тебя претензии не то что он ведет себя как очередь, а то, что он может вести себя как-то еще. А это хуйня, а не претензия, если бы это было бы проблемой, такой вещи, как наследование интерфейсов не существовало бы. А оно существует в любом языке.
Зачем из стека делать что-то большее, чем стек? Блядь, я вижу стек, я читаю стек, я ожидаю, что эта хуета поведёт себя так и только так, как может вести себя стек, мне поебать, что он внутри, а он снаружи мне с какого-то хуя предлагает в косынку сыграть и пиццу заказать мне от него только пуш и поп блядь надо и размер. Понимаешь меня? МЕня
Меня напрягает, когда вещи не то(а НЕ ТОЛЬКО ТО это тоже не то) чем кажутся. Такой хуйни не должно быть, сука.
Нет, если ты хочешь сделать деку-со-спецэффектами, то так и скажи класс дека-со-спецэффектами : дека или что там, а это просто хуета, когда детали реализации выносятся наверх и подаётся что это типафича, а на деле хуйня.
И именно реализации, только в такой реализации от operator[] на деке есть какой-то смысл.
То есть я понимаю, что такой проёб не просто так, наверняка это какой-то дикий костыль, без которого было бы геморно и похуй, надо так надо, но всё началось с того, что челу норм использовать деку как альтернативу массиву, хотя рандом аксес там торчащий из реализации костыль и ну хуй знает, короче. Так дела не делаются.
>>39859
Неправда, первый раз столкнулся, как правило в стл всё пиздец как чётенько и по делу.
Какой-то хуёвый реверс, что значит отсутствие, вынесенное наверх, когда блядь вынести можно только присутствие? Ну да, отсутствие в массиве интов операционной системы это детали реализации, вынесенные наверх. Не неси хуйни.
Да никто не воспринимает дек как дабл эндед кью. Точно так же, как никто не воспринимает вектор как вектор из линейной алгебры. Или например std::set это всегда дерево, а никакой не хэш.
Это философия С++ тащемта, абстракции не должны стоить производительности.
Я воспринимаю, как бы смысл от них, если они не то, чем они являются, нахуй нужен такой стл где стринг это не строка, например.
>это всегда дерево, а никакой не хэш.
Разница между упорядоченный и неупорядоченный существенна, да и сет/мап это множество/словарь, а не дерево, вот как раз то, что оно дерево это уже реализация, которую нахуй не нужно нам знать и мы её, в отличие от хуйни с декой, и не знаем.
> абстракции не должны стоить производительности
Ну вот может быть, что operator[] там костыль, на котором половина стл держится, уверен, что этому есть причина, иначе бы там не было его.
>Я воспринимаю
Ну типа что вектор в линейной алгебре, элемент пространства, по сути упорядоченный гомогенный набор элементов, чем он и является в крестах.
>Я воспринимаю, как бы смысл от них, если они не то, чем они являются, нахуй нужен такой стл где стринг это не строка, например.
Тем, не менее, у std::string есть такие методы, как reserve и capacity. Низкоуровневые детали.
>>39868
Вектор в линейной алгебре имеет кучу свойств типа существования vector operator+(vector, vector).
А вектор в С++ это динамический массив
Суть передана, всё же понятие вектор есть и в программировании, где оно означает именно крестовый вектор. Вики не даст соврать
>Вектор — (последовательность, кортеж) однородных элементов. Это наиболее общее определение в том смысле, что может быть не задано обычных векторных операций вообще, их может быть меньше, или они могут не удовлетворять обычным аксиомам линейного пространства. Именно в таком виде вектор понимается в программировании, где, как правило, обозначается именем-идентификатором с квадратными скобками (например, object[]).
>>39869
Для стринг это нормально, стринг по сути vector<char> с оговорками.
Какого хуя First example выводит все слова чторазделены пробелом, то есть проходится по всему файлу а Second example всегда хуячит одно и тоже слово, то есть функция fscanf все время с одной и той же позиции ищет вхождение, но ведь в First example тоже также тогда должно быть, какого хуя там ей понятно что предидущее вхождение нужно скипать и искать следующее пока eof не настанет. Ну что за ебатория - то...
В случае с декой, которая чисто программистское понятие, такая хуйня не прокатит. Да пофиг, то, что это костыль это ладно, я не против, а вот то, что этот костыль используется как фича, вот это тупо. Будешь такой код читать, где чел юзает деки вместо массивов и хуеть. И вроде как бы похуй, но вроде как бы и топор-отвертка получается, дрова норм рубит, но сука постоянно этот ебучий кусок отвёртки на обухе в глаза бросается, нахуя он, а потом видишь, как кто-то этим куском шурупы крутит за топор и вообще охуеваешь.
Впрочем тот чел с таблетками прав, меня опять на ровном месте понесло с нихуя скорее всего, какая-то мелочь кажется пиздец какой важной, завтра прочитаю и стыдно будет, опять загнался по хуйне.
При чем тут возращаемое значение (количество преобразований) ? В первом случае fscan помещает в pBuf слово за слово постепенно с каждой итерацией новое и так до конца файла. Во - втором случае она помещает в pBuf каждый раз первое вхождение (считай первое слово) и все, ни идет дальше. Разъесни почему ?
>Во - втором случае она помещает в pBuf каждый раз первое вхождение
Нет, только в первый раз.
Потом просто значение не меняется.
> Разъесни почему ?
Не может идти дальше. Тупик.
Ну да, нормально значение только в первый раз заносит, в остальные вообще пусто. Так какого хуя тупик - то ? Я же просто комбинирую и в отличие от первого случая указываю какие символы должны быть в слове, то есть что не выбрасывать, до какого символа читать грубо говоря.
почему тогда в первом случае "%s" не тупик ? в " " указывает то что ищем/получаем так ? "%s" значит до пробела/skip whitespace и чем это принципиально отличается от "A-z" что трактуется как все пока не встретится что - то что не !"A-z" а в комбинации с %s это что - то только до пробела.
http://port70.net/~nsz/c/c11/n1570.html#7.21.6.2p8
> Input white-space characters (as specified by the isspace function) are skipped, unless the specification includes a [, c, or n specifier.
Как, я уже нихуя логику это срани не понимаю...
Пэкспереминтировал, в первый раз эта хуита возвращает 1 (типа че - то нашла) дальше естественно только 0, как тут заставить ее начать искать дальше ...
Кароче, бери std::string, читай туда всю строку через std::getline и разбивай по регулярке (std::sregex_iterator)
Потому что я более - менее знаком с RegExp и для меня какой - то бред использовать его всего то для выделения ебаных слов из файла.
Алсо ты можешь как мудила посимвольно считывать и проверять, что твои ебучие символы попадают в интервал нужный.
sscanf(from, "%[a-zA-z]", to) Выводит любое eng слово в любом регистре, в т.ч смешанном, заебок, но, нужно добавить ссаную кирилицу. Пробовал и %[а-яА-я] и %[a-zA-Z\u0401\u0451\u0410-\u042f\u0430-\u044f] в последнем случае выдает все eng-слова, но ебаный русский только в all-capitalize виде "ПРИВЕТ" выведет полностью, а "Привет" только "П", "привет" вообще не выведет, сцука, причем так будет если даже прописать только %[а-я] или %[А-я].
А потом они спрашивают почему я не люблю работать с каким - либо текстом, блядь да потому что это всегда анальная эквилибристика еще и ситуативная, блядь, а не программирование.
По факту блядь ну все готово 3k+ строк кода, хуева туча всего, все отлажено и причесано и я сижу и ебусь с ебаным текстом дольше чем не самые простые задачи решать времени. Нинавижу это говно.
>>39930
Покапавшись стало ясно что мозги ебет, кто бы мог подумать, кодровка. Энглишь поэтому норм проходит, а вот русланд хоть и нормально выделяется до пробела, дальше - то я описываю условие через коды в unicode, а текст насколько я понимаю не внем хранится, хотя я пробовал кормить все кодировки. Из больших символов например не распознаются Щ и Ы еще. Ну или я хз....
lconv
Школьник использует дефолтные настройки IDE - вот это да
>Но ведь по-хорошему так и надо.
Сейчас набегут питоношкольники, которым ANSI не указ.
Впрочем, даже у K&R открывающая скобка на одной строке с декларацией.
в треде жабопидоров
И через десять лет покажешь альфу своей игры.
Учи геометрию, кинематическую физику, OpenGL и GLSL.
И моделирование, без него никак.
И вообще иди в /gd
Качаешь опенсорсный движок, компилируешь...
>И моделирование, без него никак.
А вот например в пубг все модельки позаимствовали из опен сорса.
Не знаю, с помощью хука внедрись в калькулятор, или сообщения элементам окон попосылай
Ну так я и не могу понять.
И плюса и у function call установлена left-to-right ассоциативность.
Почему она игнорится у function call?
Это коммутативность
(a + b) + c = a + b + c Левая ассоциативность
a + (b + c) = a + b + c Права ассоциативность
Да вроде нет
https://ideone.com/sG0bIi
Существует вообще способ сделать правоассоциативный operator()
>>40525
Точно, я соснул
Почему в твоем примере применяется ассоциативность к (), а на пикрил не применяется, а уже отсылают к порядку вычислений, который не определен?
А где тут ассоциативность, если у тебя нет двух operator() подряд?
Тут важен только приоритет операций, а у вызова функции он выше, чем у умноежния и сложения
>нет двух operator() подряд?
Нигде не видел такого определения ассоциативности, чтобы требовались подряд идущие операторы.
Везде говорится о том, что ассоциативность разруливает ситуацию, когда встречаются операторы с одинаковым приоритетом.
Окей, но в твоем примере и этого нет. Там из списка a++ a-- type() type{} a() a[] . -> только a() и есть.
Одну профессионалы не пишут. Надо три:
if (yoba) {
...
}
Две - сраный лисп, одна - студент с laba.cpp
Четыре - чел пришел с паскаля какого-нибудь
Есть четыре оператора вызова.
На одинаковых операторах ассоциативность тоже вроде как должна работать https://en.cppreference.com/w/cpp/language/operator_precedence
Не знаю, мне лень скобки ставить и лишний раз нажимать Enter, так что я всегда пишу просто
if(yoba) printf("Eto ty? \n");
Короче. Тебе делать больше нехуй? Есть простое правило - сомневаешься, поставь скобки. Вот и все. Страдаешь херней какой-то. Лучше программировать это тебе не поможет.
Чем меньше скобок, тем лучше. Иначе получится что-то вроде ((((((((()))))))))).
Гораздо меньше. Лучше подумать, а потом сделать. Особенно, если речь о C++. А ещё я не пользуюсь IDE и компилирую через консоль.
Лол, у меня такое ощущение, что в том примере никак невозможно расставить скобки так, чтобы произвольно задать порядок вызова функций. Как скобки не ставь, будет либо тож самое, либо нарушится порядок сложения и умножения.
Только расчленять на отдельные выражения.
Непроизвольный порядок вызова функций выглядит так: f(g(x)). yoba()() частный случай этого. Если результат одной функции не зависит от результата другой, они могут вызываться как угодно. Даже в случае
a(t)+b(t)c(t) если ты думаешь, что b(t) вызовется первым из-за приоритета, это не так. Приоритет касается только парсинга в AST, a(t)+b(t)c(t) будет распарсено как
a(t)+(b(t)@c(t)), то есть будет нода +, у нее две ноды, call с поднодами a и t, и умножить с поднодами b(t) и c(t). А порядок вызова это уже на этапе компиляции, и тут компилятор может запихнуть как ему удобно
У меня для тебя.
ЧИТАЕМОСТЬ, ЯСНОСТЬ КОДА
Не удивляйся, если тебе ебало набьют за твою дикую любовь к микрокоду, который только тебе понятен.
>который только тебе понятен.
Во - первых в данном случае лишняя операция, а не только читаемость. Исходя из того что код в первую очередь должен работать и желательно быстро его как раз таки нужно делать наиболее читаемым не для дауна человека, а для машины. В этом и состоит смысл программирования, как можно точнее и короче объяснить ЭВМ чем ей вообще нахуй заняться. Если человек не может прочитать это, значит мы находимся в доме-приюте для слабоумных, погромисты-дауны не агрессивны сами по себе, значит перед нами просто не погромист, а значит он вообще нихуя не понимает и порду набъет в люьом случае, или не набъет в любом случае. Банально, читаемость как раз - таки становится в разы лучше так как из 500 строк кода становится +-150, где быстрее можно ориентироваться ? Наблюдая всю картину уже куда легче сконцентрировать внимание где нужно и там не уже не составит труда разобраться.
mimo shel
Хз, меня тимлид за такое ебал, приучил если есть if/for/while, значит должно быть
{
...
}
без вариантов, даже если там одна строчка внутри.
Бля анон ты не одтинок, я вообще выделяю части задачи - микрозадачи и хуярю обычно все в одну строку к ней относящееся, у всех кто читает горит они КАЖДЫЙ ОПЕРАТОР ХУЯРЯТ ЧЕРЕЗ #13#10, но, я вот не понимаю, есть код, хочется тебе его видеть в том каком - то виде, ну возьми да отформатируй его есть же инструменты, можешь под свой конфиг в два клика это сделать.
Я вообще фанат такого подхода, те же сайты,раньше для них писал CSS стили так как всегда не нравилось как они выглядят а еще больше UX, велосипеды там рисовал, переделывал UI/UX насколько это возможно попутно вхуячивая свои JS скрипыты, а эти суки один хуй через месяц все меняли, начали генерировать рандомный неймы/id и тд для жлементов, в общем пиздец. Ну я их понял, теперь я просто граблю всю инфу что мне нужно и уже на своей платформе наслаждаюсь ее представлнием как мне нужно и взаимодействие через API. Только то что мне нужно и как. ХЗ, может это болезнь.
Вы же не пишете:
Если я заболею {
я не пойду в гости
}
Скорее всего вы напишете просто:
Если я заболею, то я не пойду в гости.
Ну и, наконец, в-третьих. Зачем использовать то, что не нужно и не обязательно? Зачем загромаждать код лишними символами и конструкциями, которые ничего не дают? Зачем делать лишнюю работу, если можно этого избежать?
В общем, надеюсь, что достаточно авторитетно и ясно поясни, как именно следует писать код, чтобы не быть макакой. Дальше выбор за вами.
Слишком толсто.
> Во первых, код должен быть как можно короче.
Нет, код должен быть понятным. Ты троллишь тупостью в самом неподходящем для этого треде.
Если ты поставишь лишние скобки там, где это не нужно, то код от этого понятнее не станет, скорее наоборот даже.
И есть ли смысл опен сурс версию ставить? Или только триал 30 дн?
Есть какой-то экспресс вариант до 300 страниц kind of The C Programming Language?
Я как-то кейлоггер писал на winapi, который при запуске прописывается в регистре. Так и работает уже почти год, ни разу о себе знать не давал, все исправно пишет. Только хотел вставить фичу отправки лога на емейл, но руки не дошли.
бамп
Для геймдева
Скорость чтения книги зависит не от ее объема, а от ее сложности.
Экспресс вариант будет тупо сложнее за счет более лаконичных и неоднозначных формулировок.
>Я как-то кейлоггер писал на winapi,
Что там писать - то, хук подрубить в виде dll ?
>который при запуске прописывается в регистре.
А должен перманентно инжектится в сис процессы, winapi же.
Я ими не особо пользовался, знаю, что это делает то то, но сам юзал наследие/шаблоны и прочее только чтобы проверить написанное в книге.
A Tour of C++
> но сам юзал наследие/шаблоны и прочее только чтобы проверить написанное в книге.
наследие и шаблоны такие своеобразные конепции что чтобы было выгодно и безопасно их использовать задачи чуть ли не выдумывать и приходится, в остальном диномичское функциональное программирование делает сове дело. Насчет стандартов, я не знаю нахуй это вообще нужно все, у мну ни один заказчик/работодатель кода не смотрел. Задачу выполнил, молодец, работает быстро и без отказно -- вообще красавчик, ну а каким хуйем не важно.
>наследие и шаблоны такие своеобразные конепции что чтобы было выгодно и безопасно их использовать задачи чуть ли не выдумывать и приходится,
Туда ли ты зашел, петушок?
>Туда ли ты зашел, петушок?
Опищи конкретную часто решаемую и востребованную задачу где необойтись без наследования классов или шаблонизации, либо использованаие таковых сраз эту задачу решает. Вперед.
То что я написал ранее я читал в нескольких книжках разными словами. Про те же наследование классов написано что нужно хорошо подумать прежде чем их использовать, не говоря про класс интерфейс там и прочее виртуальное.
>Опищи конкретную часто решаемую и востребованную задачу где необойтись без наследования классов или шаблонизации, либо использованаие таковых сраз эту задачу решает. Вперед.
std::vector, реши без шаблонизации. Вперед.
>Опиши задачу
>ну это вектор бля во вектор сделой мне вектор без шаблонизации, понял бля !
Ясно. Вперед, нахуй.
У тебя есть разное железо - например, opencl и cuda и нужно написать полиморфную прослойку, которая позволяет делать код либо
Prosloyka<ProsloykaCuda> instance; либо через наследование.
Дальше все упирается в то, нужно тебе разруливать это в динамике или статики достаточно, во втором случае можно взять шаблоны, в первом - наследование.
А если ты захочешь eDSL в кресты встроить, то там совсем весело будет.
>У тебя есть разное железо - например, opencl и cuda
Это не задача, здесь нет проблемы.
>нужно написать полиморфную прослойку
>ну там это задача как раз в том чтобы полиморфизм наш юзать, нуа хули, он нахуй нинужен вот задачи и выдумываю.
Где здесь проблема и задача ? Дословно, ты пишешь : А как ты не будешь использовать шаблонизацию если в задаче написано сделать шаблонизацию и полиморфизм. Вот только никогда проблема не являет собой саму необходимость использования того или иного АТД/Алгоритма/Инструмента/Etc
>то там совсем весело будет.
Весело мне когда я вижу ебанутые запросы с не менее ебанутыми вариантами их реализации.
>Вот только никогда проблема не являет собой саму необходимость использования того или иного АТД/Алгоритма/Инструмента/Etc
Иными словами, когда ты пишешь "Опищи конкретную часто решаемую и востребованную задачу где необойтись XXX" ты заранее задаешь провокационный вопрос, на который невозможно ответить, не зависимо от того, что подставить XXX.
Зачем задаешь тогда, аутист ты ебаный. Пиши все в машинных кодах и съеби из крестотреда.
Хранить указатели на void и указатель на функцию преобразующую назад к указателю на нужный тип.
>указатель на функцию преобразующую назад к указателю на нужный тип.
Откуда функция будет знать какой тип нужный?
А как ты собрался деструкторы дергать, когда у тебя одни указатели на воид?
Если ты не используешь что-то в своей повседневной деградации, то это еще не значит, что оное никому не нужно.
Приветствую, аноны. В веб-программировании шарю чуть менее, чем нихуя, в гугле пока не забанили, но отчаянно пытаются, поэтому залетаю сюда.
Есть у меня сервер на апаче. И есть у меня желание, чтобы при определенном событии на странице сын собаки javascript отправлял данные на сервер, что-нибудь принимало эти данные, пинало бы крестовую программку и передавало ей данные, а она бы ими редактировала html-документ. Внимание, вопрос: каким образом такое можно реализовать и что использовать в качестве пинательно-приемопередаточно посредника?
Вся надежда на вас, анончики
Шаблоны это синтаксический сахар. Видел параметризованный по используемому типу список на чистых сях сделанный через дефайны. Выглядело как говно, но работало.
Ты дебил? Я говорю что на сишном препроцессоре можно соорудить некое подобие простейших шаблонов, но это будет практически нечитаемо.
Ты дебил? Возможность соорудить некое подобие не значит, что шаблоны это синтаксический сахар.
Вот >>1339902 (OP)
ПЕРИКОТ >>1339902 (OP)
ПЕРИКОТ >>1339902 (OP)
ПЕРИКОТ >>1339902 (OP)
ПЕРИКОТ >>1339902 (OP)
Гугли CGI из простого
Не пизди.
И правильно ебал, чтобы после вашего говнокода в поддержке проблем меньше было.
Все правильно он написал - три, в плюсах тоже. Т.к. при 4 при сворачивании блока у тебя будет висеть лишняя пустая строка, которая нахуй не нужна.
Полнасцью
Меня заебало каждый раз удалять все говно и прописывать библиотеки. Пробовал создавать шаблон по гайду майков, но все хуйня.
Создавай пустой проект всегда
Кнопочка "файл" левый верхний угол ->
Создать ->
Проект ->
Выбираешь Visual c++ ->
Выбираешь "Пустой проект" ->
Нажимаешь Ctrl+Alt+L ->
В обозревателе решений во вкладке "исходные файлы " жмешь ПКМ и "Добавить" ->
нажимаешь "создать элемент" ->
вкладка Visual C++ нажмешь "файл С++" ->
"Добавить" -> Пишешь говнятину.
Я уже блять не знаю как проще объяснить
Бля тред без шапки выпилили
Немного не то, но я чуть подшаманил с шаблонами и сделал что хотел. Чтоб при создании проекта сразу было написано то, что мне надо
Спасибо!
Ну это не то, бездуховно. Как по мне, пока новичок, лучше самому прописывать библиотеки и класы всякие. Просто тут иногда бугуртят из за того что начинающие создают не пустой проект.
char c = 0;
std::cin.get(c);
std::cout << c << std::endl;
как этот код вообще работает? как функция находит адрес локальной с?
Линкуется с libastral.so
Я просто спортивный
Этот феномен вроде ссылка называется.
Если проект не масштабный, а домашний/игрушечный, то в качестве отличной практики можно попробовать всё самому написать. Сетевая часть не далеко от quake убежала. Есть отличная статья на хабре, описывающая основные моменты. Куча статей про детальный реверс.
https://habr.com/ru/post/324804/
https://cs-mapping.com.ua/forum/showthread.php?t=37309
Вы видите копию треда, сохраненную 10 марта 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.