Это копия, сохраненная 25 августа 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
ору с дурачка, весь раздел засрал
В следующий раз у тебя обязательно получится! Не сдавайся!
Заставь дурака тред перекатывать.
> https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file
Кстати, то, что для инстанциации шаблонов нужно иметь исходники — это чисто деталь реализации. Стандарт разрешает инстанциацию шаблонов без их исходного кода.
https://timsong-cpp.github.io/cppwp/n4659/lex.phases#1.8
> The definitions of the required templates are located. It is implementation-defined whether the source of the translation units containing these definitions is required to be available.
>www.vitorian.c...
Хм А почему этот сайт мне средство увелечения пениса предлагает? В это м есть какой-то скрытый смысл?
Ты JS-ник и у тебя нет пениса.
1) Нестед классы ведь видят друг друга, не так ли? Если мой interface является другом insides, то он должен быть способен пользоваться приватными методами и переменными, не так ли? Так какого хуя компилятор жалуется на приватность?
2) invalid use of non-static method - это ещё что за хуйня? Гугл не помогает. Почему я не могу получить доступ к переменной, и при чём тут метод?
Ты из какого языка пришел?
Напоминаю, что класс - это описание того, как обходиться с данными объектов, причисляющих себя к этому классу. У тебя в программе не создано ни одного экземпляра/объекта класса. К чему по-твоему должен относиться insides::filepath? Этих данных просто не существует.
С исключительно базового си.
>Этих данных просто не существуют.
>Нет объекта.
Да, ты прав. Я в своём примере обращал к переменной без его объекта. Там явно должно было быть не
insides::filepath, это уж точно.
У тебя очень своеобразный подход к ООП-дизайну, поэтому я подумал, что ты из чего-нибудь эдакого пришел, например из жс или питона. Там подобный код даже прокатил бы.
>attorney-client
Я в проде не встречал подобного. А на стековерфлоу как бы намекают, мол нахер надо. Действительно, зачем тебе это нужно, если есть наследование? Создай базовый класс interface с чисто виртуальными функциями, отнаследуй от него insides и перегрузи (реализуй) методы. Или, еще тупее, "раскрой скобки", то есть все содержимое класса insides засунь в приват bike_file, все методы из interface выкинь в public и удали нахер два бесполезных вложенных класса.
Друзья не нужны.
>Создай базовый класс interface с чисто виртуальными функциями, отнаследуй от него insides и перегрузи (реализуй) методы.
Собирался запилить вместо друзей, но вначале решил попробовать их.
>Или, еще тупее, "раскрой скобки", то есть все содержимое класса insides засунь в приват bike_file, все методы из interface выкинь в public и удали нахер два бесполезных вложенных класса.
Что-то подобное запилил на пикриле сам.
1. избыточный синтаксис, inner_obj не нужен.
2. к каждому интерфейсу прикреплены свои личные кишки; нахуй это сдалось, кишки должны быть независимы от своего интерфейса, и наоборот.
3. не стандарт.
100% ещё что-нибудь не так. Такие дела.
Плюсики, я уже обращался по этому вопросу, но все же.
>C. В программе должен быть создан визуальный интерфейс.
Тогда я вопросил является ли CLI визуальным интерфейсом, особенно если там реализованны диалоговые меню с применением спец символов + таблицы с преминением псевдографики.
Анон тогда ответил что CLI является абстракцией визуального интерфейса и мол я могу пилить курсач не боясь обосраться.
Так вот, запилить - то я его запилил, верстаю сейчас РПЗ. Тут нужно в пункте про разработку визуального интерфейса накидать побольше аргументов в мою пользу иначе препод может доебаться а крыть мне будет особо нечем.
Если CLI дейтствительно счтается за визуальный интерфейс (суть в том что не указано же прямо -- графиеский), не могли бы вы предоставить пруф какой, или интересную позицию на это счет.
Спасибо.
>Двощ, обоссы.
Всегда пожалуйста.
>Нестед классы ведь видят друг друга, не так ли?
Видят, но не так, как ты думаешь.
>Если мой interface является другом insides
bike_file::interface не является другом bike_file::inside.
Класс, впервые объявленный во friend declaration, объявляется в ближайжем окружающем неймспейсе, в твоём случае, видимо, глобальном. Там же, где mister_client.
Это знать надо. Это классика, блять.
Объяви класс bike_file::interface до bike_file::inside. Типа
class bike_file {
private:
class interface;
class insidea {
...
frind class interface; // interface здесь == bike::interface
};
Мне кажется, что в крестах без хорошего образования будет тяжело зарабатывать. Нормальные деньги платят только за лютое задротство вроде HFT или Computer Vision (и то не всегда), но даже там зарплаты максимум на уровне обычных крудошлепов/фронтендеров. "Обычный" кодер-плюсовик без глубоких познаний в математике получать будет в среднем процентов на 30 меньше аналогичных спецов по другим языкам.
Не знаю, кто тебе такой совет давал, но здравый смысл (и опыт обучения в наших вузах) говорит о том, что они хотят именно формочки с кнопками - может быть, прокатит, но не скажу наверняка.
> максимум на уровне обычных крудошлепов/фронтендеров
Ну тут хуй знает, но в остальном ты прав - средний плюсовый макак будет пилить легаси в каких-нибудь госконторах за гроши.
> Тут нужно в пункте про разработку визуального интерфейса накидать побольше аргументов в мою пользу иначе препод может доебаться а крыть мне будет особо нечем.
> Если CLI дейтствительно счтается за визуальный интерфейс (суть в том что не указано же прямо -- графиеский), не могли бы вы предоставить пруф какой, или интересную позицию на это счет.
Ты о совершенно не связанных вещах говоришь.
Аргументы в пользу CLI - малые времязатраты, обладает всеми нужными возможностями, универсален.
Является ли он визуальным - да, йдля взаимодейчтвия с таким интерфейсом необходимо на него смотреть.
>ActiveX, MFC
Совсем говно мамонта? Вакансия не предполагает глубоких знаний, но на месте разобраться и работать с этим заставят.
Да, совсем.
Вкатывался такой в кресты 3 года, а потом оказалось, что рыночек порешал и бизнес хочет себе сишарп или джава девелоперов со знанием кучи фреймворков, в которых ты не шаришь.
>хотя бы неплохая база для изучения других языков будет
Какой смысл в языке, если ты не разбираешься в том, как устроен современный процесс разработки, не знаешь ни одного бизнес-фреймворка и не шаришь в предметных областях энтерпрайза? Снова в 30 или сколько там лет пойдешь грести джуниор джава девелопером на галеру? Лучше уж дальше в роли синьер цпп дева месить легаси за 60к не снимая свитер.
Пацаны, не знаю еще куда обратиться, поэтому пощу здесь:
Я далек от архитектуры операционок, поэтому назрел вопрос: по какой причине на Винду имеется столько разнообразных вирусов всех форм и мастей, а в UNIX-подобных системах таких раз-два и обчелся?
Обе операционки написаны в основном на С/С++ - но откуда такая разительная разница?..
Спросил бы у препода а не двача, лол.
http://gs.statcounter.com/os-market-share/desktop/worldwide
Зачем тратиться ради 1.63% пользователей, которые к тому же скорее просто просто вайпнут диски, а не станут платить разблокировать экран?
UTF-8 совместим с первыми 128 чарами из ASCII (7 бит, 127 чаров на латиницу + спецсимволы).
Т.е часть того что есть в ASCII закодировано точно также и в UTF-8, но разумеется UTF-8 - более обширная кодировка, и для всего что не входит в ASCII (например для кириллицы, или китайских иероглифов) код чара будет занимать больше 8 бит. Цифра рядом с UTF это минимальный размер одного чара, но максимальный может быть и 32 бита.
Ну а вообще никак не может. Разве что некоторые символы хранить в нескольких чарах.
В этом посте подразумевается что чар = символ, а не char-тип из С/С++
utf8everywhere.org
Шлее
>>394669 этот в большей степени прав, на виндах можно нормально админить, так что никакая зараза (почти) не пролезет, но пользователи обычно раздают UAC на лево/право. Фактически, юзверь сам ставит вирусы, если брать шинду в вакуууме то заюзать какой - нибудь эксплойт будет не легче чем на никсах, а того и сложнее.
По факту, мест куда можно запрятать малварь в ляликсе в десятки раз больше чем на шинде, однако хуй кто в эти места пустит без uid = 0
S->Sa|Sb|Ac
A->Ac|d
знаю что он недетерминированный и что РС-методом описать не получится, но алгоритм то есть?
Хз что делать с нетерминалом А, пытался до этого сделать в тупую:
bool scan(){
enum state{H,A,S,Er}
state CS=S, char c;
do { switch(CS) {
case H:
if(c=='d') {gc(); CS=A;} else CS=Er;
break;
...
но вот че с А делать хз.
Мне кажется, что эта грамматика описывает строки, начинающиеся на d, имеющие несколько подряд букв c, а затем в любом порядке a или b, то есть регулярка будет выглядеть как-то так:
> dc(a|b)
В крестах остается только закодировать регулярку (гугли std regexpr) и матчить входящие строки
Даже если я не прав, обычно алгоритм такой:
1. Устранить левостороннюю рекурсию
2. Построить из грамматики автомат
3. Используя автомат, матчить строки
Посмотрел вот это: https://www.youtube.com/watch?v=g2iyNH2Gh1k
Ахуел когда узнал что С++ пишет всего несколько человек. ПИЗДЕЦ! Как так?
Кресты непродуктивны. Кому в 2к19 нужен язык без менеджера пакетов, с ограниченной стандартной библиотекой (нет бд, нет сети), с ручным управлением памятью, и необходимостью компилировать под каждую отдельно взятую систему? Сравни с жавой, питоном, да и вообще любым современным языком, где имея пустую операционную систему ты за 10 минут без заранее написанных скриптов поставишь все необходимое для разработки и напишешь простенький клиент для бд, который соберёшь один раз и он сможет на работать на всех компьютерах в мире.
Ты смотрел хоть видео которое я скинул? Там парень на рабочем примере, в реальной топ-тир компании в Яндексе, на реальной рабочей задаче, получил прирост в 100 раз по-сравнению с джавой. 10000% прирост, Карл.
На вот еще посмотри что завезут новым стандартом, ахуеешь. https://www.youtube.com/watch?v=g2iyNH2Gh1k
С++ активно развивается, быстрее чем джавазвучит иронично, к 2023 году это будет просто вынос мусора с рынка.
>На вот еще посмотри что завезут новым стандартом
Очередная хуйня для написания собственных велосипедов вместо сервисов, написанных на jvm? С++ как всегда нереально далек от современных бизнес-задач.
>бизнес-задач
Бизнес-хуизнес.
Как же заебли эти кабанчики, у которых вместо логики бизнес-логика, пиздец просто.
Извини, эпоха гаражных программистов и сомнительного десктоп-софта ушла.
Запилить прототип йоба софтины, которая решает все бизнес-задачи сводится к предсказанию будущего.
Тянуть бабло с заказчика настолько долго, на сколько это возможно.
Так-то С++ на еще больших платформах поддерживается, чем JAVA. Холивары JAVA vs C++ в 2019 году... Ну это как-то уже не смешно даже.
тут у плюсов случился андефайнд бихевиор вместо переката, а ты смеешься
Всюду замудрёные шаблоны в шаблонах в шаблонах, из-за которых я не могу использовать stl, если я его не изучал, потому что никаких комментариев нигде нету, имена аргументов в методах вырвиглазные, не всегда возможно по описани что конкретно какая функция возвращает, поэтому нужно постоянно заходить на cppreference, вместо того чтобы просто наводить мышку на метод и смотреть и видеть краткую документацию.
Это норма или я чего-то не понимаю?
Нет, не случайно.
> на реальной рабочей задаче, получил прирост в 100 раз по-сравнению с джавой. 10000% прирост, Карл.
Некорректное сравнение. Он пользовался до этого сторонней жава-программой, которая использует нечколько общих алгоритмов, что в сумме неэффективно, вместо одно специализированного. Вот если бы он для сравнения написал бы на жаве программу с эффективной реализацией, как и на С++, тогда было бы на что смотреть.
Ну допустим легаси, ладно, пускай си.
Но нафига мне современный компилятор пишет варнинг, когда я функцию по назначению использую?
Или
char symbol = toupper(x) - это говнокод?
> Он там говорит, что пытался переписать и его коллеги тоже, ничего лучше не вышло.
Он сказал, что другая компания пыталась сделать улучшенную версию этого логгера. То есть даже не специальный оптимальный алгоритм конкретно под ту задачу.
Да не, я из Питонопараши пожаловал
We’ve detected some activity that violates our Microsoft Services Agreement and have locked your account.
И так с каждым аккаунтом. Это microsoft выпрашивает номер?
XCode это одна из самых хуевейших IDE в мире.
И это не только мое мнение смотри его рейтинг в апсторе
Ну тогда енжой йор Clion.
Clang address sanitizer. Больше никак. Ещё можешь создавать вектор вместо массива и передавать ссылку на вектор вместо указателя.
>>394033
1) Скорее всего, ты показываешь не начало списка ошибок. Ошибки надо исправлять в порядке появления и запускать компилятор заново после исправления.
2) Класс и его экземпляр - разные вещи.
>>394298
Во время защиты закроешь экран ноутбука и спросишь его, может ли он пользоваться программой. Есл++++и не может - то визуальный.
99,99999% программ имеют визуальный интерфейс (инбифо Брааль, звуковое меню и т.д.). Если твои преподы имели ввиду графический, как ты думаешь, кто выиграет? Псевдографический интерфейс - название того, что ты сделал.
>>394529
Есть вероятность того, что в стандарт втащат ещё больше полезных фич (хотя бы модули), и плюсы будут намного лучше.
>>394540
Потому что парк софта намного больше. Нужно писать больше червей только ради того, чтобы получить в 50 раз меньше заражений. Олсо, дырок в опенсоусном софте меньше и патчатся они быстрее.
>>394863
char не хранит utf-8 символы (кроме ASCII). Символ в таких случаях - это строка длиной от 1 до 4 байт, и сравнивать надо, как строку.
>>395547
Комментирую:
2:51 https://en.cppreference.com/w/cpp/io/basic_istream/readsome
3:40 нахера ему .c_str()?
3:53 функция для получения массива байт из файлы занимает одну строку, а ещё есть memory mapped file почти во всех ОС, и он есть в Бусте. Код на экране считывает не любой файл.
>>395785
Не совсем правда. На закрытых платформах может быть Жаба, но не нативный код.
>>395810
Это норма, но исправимая. На цппреференсе есть файлы справки для разных IDE.
>>395829
Функция принимает в том числе EOF.
https://en.cppreference.com/w/c/string/byte/toupper
и вернёт она EOF в таком случае. Компилятор ругается на неявное сужение? Щито поделать. Можешь касты писать, ругаться не будет. Можешь именно такие предупреждения отключить.
Clang address sanitizer. Больше никак. Ещё можешь создавать вектор вместо массива и передавать ссылку на вектор вместо указателя.
>>394033
1) Скорее всего, ты показываешь не начало списка ошибок. Ошибки надо исправлять в порядке появления и запускать компилятор заново после исправления.
2) Класс и его экземпляр - разные вещи.
>>394298
Во время защиты закроешь экран ноутбука и спросишь его, может ли он пользоваться программой. Есл++++и не может - то визуальный.
99,99999% программ имеют визуальный интерфейс (инбифо Брааль, звуковое меню и т.д.). Если твои преподы имели ввиду графический, как ты думаешь, кто выиграет? Псевдографический интерфейс - название того, что ты сделал.
>>394529
Есть вероятность того, что в стандарт втащат ещё больше полезных фич (хотя бы модули), и плюсы будут намного лучше.
>>394540
Потому что парк софта намного больше. Нужно писать больше червей только ради того, чтобы получить в 50 раз меньше заражений. Олсо, дырок в опенсоусном софте меньше и патчатся они быстрее.
>>394863
char не хранит utf-8 символы (кроме ASCII). Символ в таких случаях - это строка длиной от 1 до 4 байт, и сравнивать надо, как строку.
>>395547
Комментирую:
2:51 https://en.cppreference.com/w/cpp/io/basic_istream/readsome
3:40 нахера ему .c_str()?
3:53 функция для получения массива байт из файлы занимает одну строку, а ещё есть memory mapped file почти во всех ОС, и он есть в Бусте. Код на экране считывает не любой файл.
>>395785
Не совсем правда. На закрытых платформах может быть Жаба, но не нативный код.
>>395810
Это норма, но исправимая. На цппреференсе есть файлы справки для разных IDE.
>>395829
Функция принимает в том числе EOF.
https://en.cppreference.com/w/c/string/byte/toupper
и вернёт она EOF в таком случае. Компилятор ругается на неявное сужение? Щито поделать. Можешь касты писать, ругаться не будет. Можешь именно такие предупреждения отключить.
CLI - command line interface.
У тебя же полноценный интерфейс, просто он выполнен ин из псевдографики.
А вот если бы ты передавал все через аргументы запуска то это был бы CLI.
Есть что-то своё встроенное, чтобы не тащить сторонние фреймворки вроде QT.
>Есть что-то своё встроенное
Нет. В плюсах вообще есть что-то встроенное, что отвечает современным запросам общества? Используй QT, это единственный нормальный фреймворк для рендеринга красивых интерфейсов на Linux.
Покажи содержимое батника. Если нам повезет, окажется, что он сам все соберет при запуске и без VS.
Энивей, тебе нужно разбить файлы на проекты в VS так, чтобы у тебя на каждый проект была ровно одна функция main. Все проекты при этом могут быть в рамках одного солюшена. Погугли как пользоваться VS.
Но лучше бы ты выложил содержимое файлов куда-нибудь, чтобы мы не гадали, как там все организовано, если ждешь от нас помощи.
Где бы только найти человека, который готов таким заняться. Мимо другой анон, который ищет чела, который за деньги напишет прогу для курсача
Что ещё за файл ему нужен? Нихера не понятно, откуда его брать. Как дохуя файлов в проекте. Видимо, программирование не для меня.
Обычно это делается так: ты добавляешь .h и .cpp-файлы в список файлов в IDE. Что происходит дальше: при нажатии кнопки "собрать" IDE компилирует .cpp-файлы и линкует объектные файлы. Типа такого:
gcc -o a.o a.cpp
gcc -o b.o b.cpp
gcc a.o b.o
На третьей строчке получается запускаемый экзешник. Если в b.cpp используется класс (или что угодно другое) определённое в a.cpp, то в b.cpp должен быть включён соответствующий a.h , созданный автором a.cpp .
Липмана не читал.
Найди этот ебучий Version_tests.h и добавь его в солюшен, как и все остальное. Если его нет в папке, значит он лежит где-то в другой секции дополнений к книге. Или попробуй удалить его из кода. А вообще, я думаю, тебе сначала стоит изучить, как вообще работает компиляция и линковка в С-языках. Про операционные системы почитать и все такое. Либо вкатывайся в веб и интерпретируемые языки, туда порог вхождения ниже и платят больше.
>тебе сначала стоит изучить, как вообще работает компиляция и линковка в С-языках. Про операционные системы почитать и все такое
Какую литературу посоветуешь?
Спасибо огромное, анон. Нашёл ебучий Version_tests.h. Он был в корневом каталоге архива. Буду впредь внимательнее, чтобы не доёбывать сеньоров 300ккк/нсек такой ерундой.
На почту напиши, там спишемся.
> Это норма, но исправимая. На цппреференсе есть файлы справки для разных IDE.
А где? Я что-то не могу найти, только архив с оффлайн версией сайта нашёл.
Что за говнище на скриншоте? Ты ебанутый? Скачивать visual studio 2019
Про "разные IDE" я переборщил.
https://en.cppreference.com/w/Cppreference:Archives
Есть для QtCreator в том числе.
Могу тебе сказать, что вот это вот упражнение - это практически единственное место на всю книгу у него, где его исходники нужно включать к себе в проект.
Дальше достаточно руками набивать то, что в книге пишут. В исходники только заглядывать в особо мутных случаях.
Если указать например int вместо Т то оно работает.
Ну тогда всё нормально. Код в книге достаточно хорошо разжёван, чтобы не вызывать трудностей. Но я понял, что помимо изучения языка надо научиться работать со средой разработки, понимать структуру проекта, почитать про линковку и компиляцию.
А как насчёт 2D/3D графики? На чём обычно сейчас графику в плюсиках делают?
>VULKAN
Это API для новых игровых видеокарт (управление железякой), а не фреймворк для рисования графики (набор готовых библиотек, из которых ты складываешь, как из кирпичей графику).
БАМП
встроенное что есть, ничего?
sdl и sfml - это движки для игр, на которых можно и GUI делать, а qt - просто библиотека для GUI, приложения шлёпать.
Не окажется у тебя поддержки у железа этих sdl и sfml, типа опенжл там какой-нибудь и ещё что-то, и всё пц, никто твоих гуишечек уже не запустит, qt - другое дело.
Я помню, разбирался и пришёл к выводу, что SFML как бы вообще не нужен, сразу учишь и используешь SDL и всё и SDL вообще топ и лучшее, что есть.
После него идут уже полноценные игровые движки с полными наборами со специальными IDE для игроделания итд.
Короче, если ты делаешь не игру, а просто графику некоторую небольшую, то лучше брать SDL.
Но я читал, что компании-игроделки пользуют не SDL для менюшечек.
нет речь не про полноценные игровые движки, а про эти наборы библиотек.
а для графики?
И есть ли автоматика, которая сама разберётся, что лучше на видяхе обрабатывать, а что на ЦП?
Тебе надо явно обозначить с помощью typename, что ты вектору в <> передаешь именно тип до момента создания экземпляра неизвестно, что у тебя там - тип или что-то другое.
Я то по наивности думал что плюсы это переусложненная параша которую уже ни один человек не способен понять в принципе, а оказывается еще больше людей надо чтобы еще больше говна натащили, ну ОК.
бамп, пмгите
Реально не понимаю, почему кресты считают переусложненными. Они сложные, когда вы хотите сделать что-то реально сложное, например написать БД, какой-нибудь серьезный инструмент типа фотошопа или бекпропагатор. В тех задачах, для которых обычно используют питон или джаву, то есть круд написать или веб-сервис простенький, они просто будут чуть более вербозными.
>Поддерживаемость
Кресты невозможно читать и писать. Не имея опыта, ты будешь стрелять себе в ногу каждую строчку. Будучи уверенным мидлом и синьером, будешь стрелять себе в ногу каждые несколько строк. Даже имея 20 лет опыта, все равно будешь стрелять в ногу время от времени. Люди не машины; с годами опыта прибавляется, но внимательность падает, а ошибиться в крестах очень легко.
>Переносимость
Необходимость компилировать код под каждую платформу.
Быдлокодить на плюсах не сложнее чем на питоне
Разрабатывать что-либо - абсолютно другой экспириенс
Они наплодили очень много лишних сущностей и правил чтобы легаси говно работало. А сложность по определению как раз напрямую зависит от количества сущностей.
Вприницпе, писать можно и не зная абсолютно всего, это так. Но вот верно говорят - в С++ ты платишь только за то что используешь. Но не только производительностью, а ещё и своей ногой, потому что будешь постоянно отстреливать её, натыкаясь на очередные хитрые правила и новый смысл каких-то известных тебе понятий, когда они в другом контексте используются. Поэтому с++ это единственный известный мне язык, который реально не так уж просто изучить, это потребует заметное количество усилий и времени.
Я все еще жду чего нибудь конкретного, потому что это вообще какое то совсем беспредметное ко-ко-ко-кукареку
>Кресты невозможно читать и писать.
Да ты шо
Да это само собой, я об этом и говорю - можно действительно писать код имея лишь самые базовые знания с++. И с точки зрения производительности никоим образом плохим не будет.
Но если так уходить в крайность - то итоге писать ты будешь писать на С++ как на Си. Поэтому если уж решил писать на С++ - видимо тебе надо использовать какие-то возможности С++, которых в Си нет, чтобы сам процесс написания кода стал быстрее, в этом его и предназначение как бы. Если ты С++ наизусть знаешь то это не проблема, а вот если нет - тогда ты гарантированно стабильно будешь натыкаться на какую-то очередную тонкость, о которой раньше ты не знал. И иногда тебе ещё придётся охуесть чтобы выяснить что это такая за тонкость и где аконкретно и что не так в твоем коде.
В других языках программирования такого намного меньше.
>I thought ‘I wonder what would happen, if there were a language so complicated, so difficult to learn, that nobody would ever be able to swamp the market with programmers?'
из шапки
>Роберт Седжвик Фундаментальные алгоритмы на C++ 2001
>Стандартный курс алгоритмов с примерами на C++. Для его чтения не нужно знать мертвые языки, в отличие от этого вашего Кнута
Есть смысл читать это в 2019? Или лучше взять си-версию?
Куча примеров вместе с Qt ставится (папка examples), они там почти все без формочек, только плюсами написаны.
>>397341
Если вкратце, то гугли OpenCL. Написать в коде "вот это сделай на ГПУ" невозможно.
>>397728
>Необходимость компилировать код под каждую платформу.
Это не переносимость.
>>397756
например:
- необходима пересборка после изменения layout класса, никакой ошибки не будет, просто программа будет падать
- cin по-умолчанию текстовый (важно для винды и макоси)
- cin привязан к stdin, из-за чего ввод медленный
- различия между vector<int>(5) и vector<int>{5}
- cout<<int8_t(5) выведет не число 5 с большой вероятностью
- setprecision принимает отнюдь не любое число
- ссылку на локальную переменную люди возвращают иногда, так как считают, что раз const T& huy=T{};продлевает жизнь временного значения, то и при возврате из функции будет то же самое. Я даже на стаке видел опытного человека, который так считал.
- статические переменные в шаблонах делаются на каждый инстанс
- локальные интегральные переменные могут не инициализироваться, глобальные инициализируются всегда
- циклы при использовании shared_ptr. В языке нет инструмента для проверки отсутствия циклов
- функция, не возвращающая значение, которое она должна вернуть, верна. Ты его случайно не вернул и используешь, а там мусор.
Многие проблемы можно решить настройкой предупреждения и Werror, но не все.
>Куча примеров вместе с Qt ставится (папка examples), они там почти все без формочек, только плюсами написаны.
Ну и примеры эти документированы, на сайте и прямо в QtCreator.
Кормена лучше возьми.
Вижуал студия даёт на клыка моей Макоси. Неужели тут никто с яблоками не дрюкает кресты?
Почему синтаксис плюсов похож на лютою криптографическую срань? почему никто ничего с этим не делает? и как хоть кто-то то понимает?
Единственная криптографическая срань в плюсах - это типы. Мой любимый - функция, возвращающая указатель на массив. Что ещё кроме них?
Кресты - язык для свитерков и прочих любителей подвигать байтами. Как думаешь, кто из них пишет на маке или под мак?
>Если вкратце, то гугли OpenCL. Написать в коде "вот это сделай на ГПУ" невозможно.
Пиздос, как это невозможно?
наверное можно передавать в трансформ лямбду а внутри лямбды уже обычный тронсформ с плюсом я лучший программист в мире.
Я почему-то подумал, что два 1d вектора, заглючило. Два цикла как по мне норм решение.
>>Переносимость
>Необходимость компилировать код под каждую платформу.
Так это наоборот переносимость как раз и есть.
ну первый кукарек вроде раскрыли более менее, а
>Расширяемость
куда то проебалась, что это такое?
На пиках все кто участвует в конференциях, а именно КОД крестов пишет по 1 человеку под каждую ось, ядро тоже написано одним человеком.
А где страуструп?
Если я перейду с std::thread и std::mutex на нативные линуксовые либы, быстрее будет работать? Насколько?
C++ для чайников. 7-е издание. Дэвис С. на русском на халяву, полную книгу.
-9 % -13
-9 = 1 x (-13) + 4
Откуда мы вязли, что там 1 должен быть?
Частное округляется до большего.
В твоём примере:
ceil( (-9) / (-13) ) = ceil(0.69230769230769230769230769230769) = 1
( ( -9 ) - ( 1 × (-13) ) ) = (-9) - (-13) = (-9) + 13 = 13 - 9 = 4 - остаток.
>>398210
Из примера 4:
ceil( (-15) / (-7) ) = ceil(2.1428571428571428571428571428571) = 3
( ( -15 ) - ( 3 × (-7) ) ) = (-15) - (-21) = (-15) + 21 = 21 - 15 = 6 - остаток.
В сраку себе свои вендор-локи засунь.
>>398201
Если вкратце, то нет. Для плюсов под каждую ось пишется либа (libstdc++ или как оно там в линуксах) и там используются нативные либы.
>>398205
Мы это не брали.
https://ideone.com/LUHKo0
Олсо http://eel.is/c++draft/expr.mul#:operator,remainder
Не обоссывайте,я сильно ньюфаг
libc++ реализует лок мьютекса просто через посиксовый мьютекс:
https://android.googlesource.com/platform/ndk/+/5de42e6621b3d0131472c3f8838b7f0ccf3e8963/sources/cxx-stl/llvm-libc++/libcxx/src/mutex.cpp#27
Так что выигрыша не будет никакого (только если ты не считаешь прямой вызов одной функции чем-то серьёзным).
На винде я помню была давно какая-то лажа, что простой CRITICAL_SECTION работал раза в 2-3 быстрее std::mutex. Сейчас исправили вроде.
Когда фишка отпускается чекай ее позицию. Если она раядом какой-то лункой то перемещей ее в лунку, если нет то возращай в исходное положение.
Ты идиот?
Максимальная производительность на CUDA, а не на левых дерьмовых да ещё и мусороопенсорсных либах, придура.
Ну это смотря что у тебя в приоритете. Если это числодробилка, которую ты будешь запускать на своем вполне определенном железе (или даже покупать железо специально под нее), то CUDA лучше, ибо быстрее на несколько десятков процентов. А если ты хочешь ускорить распространяемый тобой софт, то OpenCL, вероятно, лучше, ибо вычисления на GPU все равно не будут боттлнеком, а ебли с настройкой под разные платформы будет меньше.
>don't use exceptions
Сразу нахуй. Исключения это лучшее из всего, что есть в C++ поверх C, даже важнее шаблонов, наверное. Копипаст без шаблонов еще можно как-то читать, но когда в коде начинается возврат ошибок с проверкой на каждом уровне, то это полный пиздец. По сути, сишники переизобретают весь механизм распространения исключений, только отображаемый вперемешку с пользовательским кодом и потенциально забагованный.
Спасибо
Явное указание замысла. Видя свитч ты сразу понимаешь что у тебя есть одно выражение, по результату которого выполняется действие. Тогда как с простыней ифов тебе нужно проверить условие каждого ифа, чтобы убедится что это действительно так. Ну и годные компиляторы могут оптимизировать свитчи (строить на его основе branch table, будет выполняться меньше сравнений чем при использовании ифов), но это такое. Главное преимущество в том что сразу видно то происходит. Явное лучше неявного, все дела.
Есть еще разная хуйня типа устройства Даффа которую на ифах сложно постоить, но не стоит вскрывать эту тему
помогите пожалуйста разобраться в теме сокетов.
Допустим у меня есть одна программа(п1), которая делает обработку информации. И есть вторая программа(п2), которая должна получать из этой первой программы эту информацию. Их нужно соединить к помощью сокетов, где п1 это сервер, а п2 это клиент.
Мне нужно соединить эти две программы. Для сервера я нашёл следующий код
https://gist.github.com/codehoose/020c6213f481aee76ea9b096acaddfaf#file-bbtcpserver-cpp
и немного его преобразовал, всё создание сервера обернул в функцию и запустил эту функцию в std::thread в main первой
программы, а для клиента я использую qtcpsocket.
В первой программе информация может поменяться, но как в этом случае сообщить об этом второй программе?
То есть наверное нужно создать в первой программе класс-обертку для сервера, который работал бы асинхронно с остальной логикой программы? Подскажите пожалуйста, может быть есть пример такого класса для сервера?
> рмация может поменяться, но как в этом случае сообщить об этом второй прог
Не обрываешь соединение после связи. Тоесть клиент коннектится и потом сидит и слушает. Сервак отсылает новую инфу когда она появляется.
вот мой код для сервера
https://pastebin.com/rzRDCjCB
я не понимаю, как мне в случае изменения данных на сервере переслать на клиент новую информацию, если мой сервер работает в отдельной функции в отдельном треде? как мне попасть в while (true) serverFunction()?
Ты туда не попадаешь. Создаешь очередь сообщений для пользователей. Когда твой сервер обновляет данные то он формирует сообщение для пользователя с обновленными данными и помещает его в очередь. Дальше у тебя есть джва варианта. Простой и неправильный это внутри while (true) ты на каждом цикле чекаешь эту очередь. Если она не пустая, то вытаскиваешь и отправляешь сообщение. Правильный это тоже самое, только если очередь пустая то ты засыпаешь тред с помощью std::condition_variable (вызываешь std::condition_variable::wait() в треде), а когда в очередь добавляют новое сообщение то будишь с помощью std::condition_variable::notify_one() в той функции что обновляет очередь. По необходимости обмызываешся локами (мьютексами). Асло сокет должен быть неблокирующим, иначе у тебя синхронный сервер. И обрабатывай результат recv, обрывай коннект на ошибках.
>очередь сообщений для пользователей
то есть std::queue?
> Простой и неправильный это внутри while (true) ты на каждом цикле чекаешь эту очередь
Почему такое решение будет неправильным?
>ты засыпаешь тред с помощью std::condition_variable (вызываешь std::condition_variable::wait() в треде), а когда в очередь добавляют новое сообщение то будишь с помощью std::condition_variable::notify_one() в той функции что обновляет очередь
я не совсем понимаю, что тут происходит. while (true) всё равно остаётся? std::condition_variable::wait() вызывается в serverFunction()?
>Почему такое решение будет неправильным?
Это будет так называемый busy waiting. В большинстве случаев он неэффективен и заставляет напрасно крутиться процессор, пока он мог быть занят другими полезными вещами.
condition_variable позволит треду заблокироваться, пока в очередь действительно что-то не придёт.
Мимопроходил
> Почему такое решение будет неправильным?
Потому что у тебя тред будет постоянно крутиться отжирая ресурсы. Конечно если туда добавить задержек (например усыплять тред на миллисекунду на каждой итерации, или добавить таймаут в recv, если это возможно) то затраты будут небольшими но все равно это не красиво.
> std::condition_variable::wait() вызывается в serverFunction()?
Да. При этом тред уснет пока ты его не разбудишь при обновлении данных (вызовом notify_one()).
> При этом тред уснет
это значит что сервер не будет работать? То есть к серверу нельзя будет подключиться в это время?
вот код, который используется в функции в отдельном треде
https://gist.github.com/codehoose/020c6213f481aee76ea9b096acaddfaf
в каком месте нужно добавить std::condition_variable::wait()?
> в каком месте нужно добавить std::condition_variable::wait()?
Там где ты провенряешь очередь сообщений и замечаешь что она пуста.
Слушай, зеро, твой OpenCL - в сравнении с CUDA в плане производительности, это как Java сравнить с С.
"Зато кратковременность." Ооо...
ОпенСЛ уже в 2-5 с лишним раза медленней работает на новых видеокартах, а дальше ситуация всё больше улучшается в сторону CUDA.
https://devtalk.nvidia.com/default/topic/1029272/significant-speed-gap-between-cuda-and-opencl-how-to-debug-/
Nvidia душит OpenCL, чтобы производителей был фактически выбор
1. Писать только под CUDA и лочиться на нвидивские карточки
2. Писать и под CUDA и под OpenCL, чтобы владельцы нвидии использовали CUDA, а владельцы амуде и интел использовали OpenCL.
Естественно первый вариант проще с точки зрения разраба и обещает много денег nvidia.
Наверное потому что Нвидиа специально гимпит реализацию OpenCL, чтобы все переходили на куду? Какую последнюю версию поддерживает Nvidia? 1.2, или за последние годы что-то поменялось?
>Вот знаю я С++
Уверен в этом? Стандарты 11/14/17 на зубок отскакивают? Пишешь современный код?
Ты опоздал лет на 10, сейчас балом правят языки мобилок и веба: джава (и все остальное на jvm), джаваскрипт, питон, го.
конечные автоматы удобно делать (кто ими занимается) Просто блять переходишь в нужное состояние. Логично и естественно. Мне в питуховене этого не хватает. Если вася сосет хуй, то он пидор.
Прочитал сначала "конченые автоматы"
Змеедавы пропагандируют, мол, для всего должен быть единственный явный способ, а сами создают КОНТЕЙНЕР с одноразовым содержимым для ветвления, лол. Это костыль уровня Duff's device, только без ускорения.
Давайте в суд на них подадидим.
по ссылке, стримы нельзя копировать
void functsiya(vhfpotok& vvod, vyhfpotok& vyvod);
int glavnaya()
{
vhfpotok vvod("vvod.dvoichny, ios::dvoichny);
vyhfpotok vyvod("vyvod.dvoichny, ios::dvoichny);
functsiya(vvod, vyvod);
}
Например точно знаю, что мозга для мерседесов на плюсах(как раз современных) пишутся. Ну так че, дорог так много, а я один, надо что-то одно выбрать и прокачивать, спецом становиться, бабки получать, толку от моих знаний крестов одних без знания области применения?
Читал об этом, что из-за этого исключение не обрабатывается до конца и идет выше по стеку до другого исключения, т.е. в случаях, когда есть несколько исключений и мы конкретно не знаем, какое поймали?
Например, если ты освобождаешь ресурсы, которые выделились в try-блоке и не завернуты в объект с деструктором. Или если ты только часть обработки делаешь, например, фиксишь обосравшиеся локальные объекты, а потом исключение уходит в глобальный обработчик ошибок, который ничего не исправляет, но зато подробно запишет все в лог.
throw без параметров либо пробрасывает дальше текущее исключение либо делает терминате, если текущего нет.
https://stackoverflow.com/questions/2363206/windows-game-loop-50-cpu-on-dual-core
Classic busy/wait loop. Your CPU is busily checking (and rechecking ad infinitum) for messages. You need to wait for messages in a blocking way or, more likely, use a timer that periodically wakes up your game thread so it can do its work. The game thread would then go away until the next time it is woken up.
Не знаю даже, что показывать. Обычное окно.
Делаю как написано в этом руководстве:
https://docs.microsoft.com/en-us/cpp/windows/walkthrough-creating-windows-desktop-applications-cpp?view=vs-2019
Читаю также этот учебник:
http://booksdescr.org/item/index.php?md5=CC408CAF8E4FA2FC4FA9A842574AE256
If there's anything I would change, it's to use GetMessage instead of PeakMessage for the message pump. This will potentially improve performance and keep the CPU utilization down. There's a demo project that uses this approach in this forum post. The post is old, but the concept of message pump is still the same.
ванга
Какой-то сборник офигительных советов. У меня, ведь, просто окно. Мне не нужен максимально производительный рендер.
Как сделать "wait for messages in a blocking way"?
>>401183
А делать-то мне что? Как снизить потребление ЦП?
Я попробовал переделать цикл обработки сообщений с использованием PeakMessage. Не помогло.
Написано же усыпляй по таймеру. Запоминаешь время. Формируешь кадр. Смотришь сколько времени прошло (с момента запоминания) - вычитаешь из 16 миллисекунд (и сколько тебе там фпс надо) и засыпаешь на это время. Когда просыпаешся отрисовываешь подготовленный кадр и начинаешь все заново (с запоминания времени). На самом деле там ебенячая куча подводных камней (с тем чтобы синхронизировать просчет кадра и отрисовку), но пока можно не трогать. А вообще тебе должна помочь простая задержка на 1 миллисекунду на каждой итерации твоего цикла, это если ты не хочешь изъебываться.
"wait for messages in a blocking way" означает что у тебя есть какая-то очерель в которую помещаются сообщения, а тред который их обрабатывает не крутится постоянно, а в случае если очередь пуста засыпает. А когда там появляются сообщения то просыпается и обрабатывает. Можно сделать с помощью std::condition_variable.
>Формируешь кадр
Какой кадр? У меня клиентская область пустая. Потом, может, добавлю каких-нибудь WinAPI-control'ов.
>усыпляй по таймеру
Это считается хорошей практикой? Усыплять главный тред окна? Он, ведь, обрабатывает асинхронные (nonqueued) сообщения.
Когда треду нечего делать то он должен усыпать и давать возможность спокойно работать тем кому есть что делать. Понятно что таймер это для предсказуемых вариантов (тебе каждые 16 миллисекунд нужно обновлять инфу). Если нужно резко реагировать на сообщения то там используют какие-то прерывания или подобные технологии чтобы будить тред.
А вот с этого места поподробнее.
Приняли в 20 стандарте вместе с корутинами, контрактами, модулями и прочими приятными фичами: https://habr.com/ru/company/yandex/blog/438864/
В том же кваке первой, если есть мы дедикейтед сервер с таргет тикрейтом:
1) Проходимся по сообщениям винды с помощью PeekMessage
2) Лоигка игры, рендер
3) Если слишком быстро получилось, то спим
https://github.com/id-Software/Quake/blob/bf4ac424ce754894ac8f1dae6a3981954bc9852d/WinQuake/sys_win.c
Какой же С++ ахуенный становится, к 2025 будет конфеткой. А как там джава развивается?
Какой?
Jai (ещё не вышел, может получиться opinionated хренью одного парня, который возомнил себя богом)?
Odin (недоделанная хрень)?
Zig (скорее заменитель Си, но вроде как довольно приятный язык с прикольными фишками которые даже уже работают)?
D (слишком долго мусолили, уже мёртв)?
Rust (решает проблемы, с которыми лично я почти не сталкиваюсь, и поэтому мне он не особо нужен)?
Nim (непонятная смесь всего и вся)?
>У C нет нормального ООП?
собственно классы эмулируются посредством структур с полями-данными и с указателем на таблицу (структуру, что-то другое) указателей на функции, которые значит будут выполнять роль методов класса, как то так..
инкапсуляция на уровне единиц трансляции, плюс есть ключевым слово static, плюс есть неполные типы.. вполне себе инкапсуляция..
наследование - сначала при помощи структур и указателей на функции эмулируются интерфейсы, далее соотвественно можно эмулировать и наследование интерфейсов (но не наследование реализации! вместо наследования реализации предпочитается методика агрегирования)
динамический полиморфизм легко реализуется посредством собственных vtable
единственная проблема - это статический полиморфизм, обычно задачи для которых он нужен решаются посредством макросов, что конечно не очень хорошо
1. Когда я вызываю delete[] откуда ОС знает где кончается массив? Впрочем важно больше не это, а почему я не могу у ос спросить где он кончается, а вместо этого должен какой-нибудь 0 в конец записывать или содержать переменную с числом элементов?
2. Принято писать функции безопасно - что бы ты туда не передал в аргементах - она либо нормально отработает, либо выкинет исключение. Но, для того чтобы выкинуть исклбчение порой делается немало проверок- если одна переменная равна тому-то. Если эта функция вызывается 1000 раз в секунду, то проверок становится в 1000.
Или еще из той же серии - предположим есть какой-то класс ориентированного по осям прямоугольника и ему для задания параметров нужно соответственно знать 4 координаты4 значения. Наверняка у него будет конструктор принимающий их типа Rectangle(const Point &p1, const Point &p2), и внутри него будут очередные проверки с логикой типа if p1.x < p2.x then left = p1.x...
И суть в обоих этих примерах в том, что порой когда мы передаем в какую-то подобнобную функцию аргемнты - мы можем уже тогда знаем в каком виде они там нужны и проверки будут бессмысленными.
Например
Rectangle a ...
Rectangle b(a.TopLeft(), a.BotRight()); - мы уже передаем в нужном виде данные.
Собственно, мне интересно - может ли это заметно повлиять на производительность и если да, то придумали ли что-то для этого?
>откуда ОС знает где кончается массив?
Не ОС, а менеджер памяти, он может быть кастомным. Менеджер памяти хранит таблицу соответствия указателей и длин.
>почему я не могу у ос спросить где он кончается
Потому что разные ОС реализуют эту хуйню по-разному или вообще решили, что нинужно. Ты можешь сделать кастомный менеджер памяти, который будет запоминать это дело сам или обращаться к ОС, если знает как, но в язык это не встроено, потому что мало кому надо, а ресурс будет кушать.
>Если эта функция вызывается 1000 раз в секунду, то проверок становится в 1000
Для часто вызываемых функций так делать не надо, проверяй корректность сразу при конструировании/изменении объекта, потом вызывай без проверок. Если объект создается очень часто, то рассмотри возможность не выделять его в отдельный объект, а сделать контейнер, в котором хранить сырые данные и делать массовые операции над ними без проверки.
> Когда я вызываю delete[] откуда ОС знает где кончается массив?
Ниоткуда, ОС выделяет память страницами и понятия не имеет о твоих данных. new, delete, malloc, free etc на самом деле обращаются к оптимизирующему менеджеру кучи в malloc.с который и организует отображение твоих адресов на выдаваемые ОС страницы (которые сама ОС может как хочет отображать на физическую память), и где кончается массив знает именно он.
Таким образом аллоцирование/деаллоцирование памяти в общем случае не обязано за собой вести захват/освобождение памяти у ОС.
ЗЫ а примитивный сборщик "мусора" был уже в сях.
"Pointer to member" это другой тип, его нельзя использовать как "pointer to function". Ты должен явно указывать в типе указателя, какого класса этот метод. Вот подробный гайд https://isocpp.org/wiki/faq/pointers-to-members .
> указатель на нестатическую функцию-член
у них особый синтаксис
https://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm
Проще всего заебенить псевдоним.
Предположим я пишу какую-то библиотеку и я сделал класс Б, который наследуется от класса А, и класс В, которы тоже наследуется от класса А.
Другой человек взял мою библиотеку сделал класс Ц, который наследуется от Б и В. Ему получается никак не сделать чтобы клксс Ц содержал лишь одну копию А. Должен ли я по дефолту всё, от чего в теории могут наследоваться, наследовать виртуально, или если этот человек решил класс Ц сделать - то это он уже сам виноват что хуйню творит?
Чтобы такой хуйни не было, нужно все библиотечные классы делать шаблонными, а наследовать через CRTP. Тогда этот хуй сможет декорировать класс А, сделав Авирт, который нихуя не добавляет, а просто наследуется от А виртуально. И потом передать Авирт в Б и В, от которых унаследуется Ц, и все будет заебись.
>Ему получается никак не сделать чтобы клксс Ц содержал лишь одну копию А.
Можно, гугли виртуальное наследование.
Так, разобрался. Нестатические методы принимают this неявно первым аргументом, т.е. метод с явным одним параметром для компиллятора виден как принимающий 2. Я же пытался его передать туда, где ожидался std::function, принимающий только один. Решил с помощью std::bind, привязав первый параметр к this.
class Class
{
public:
void member(){}
}
void f(void (Class::ptr) (void), Class a)
{
a->ptr();
}
int main()
{
f(&A::member)();
}
Вот так подробнее.
Если сделать класс для последовательности, который содержит std::set для элементов и std::vector от итераторов для хранения порядка - это идиотизм или нет? Ах да, нужно также сделать операции вставки одной последовательности в другую и исключения. Получается при операции исключения будет тупа пробегаться вектор итераторов по порядку, также, как и если бы все данные просто хранились в массиве, да ещё и придётся дополнительные действия над сетом совершать. Разве что можно операцией поиска сразу проверить есть ли нужные элементы, и если есть - идти также смотреть порядок по вектору.
В случае вставки аналогично - никакого выигрыша от сета нет, мы не пользуемся операцией поиска, мы просто вставляем элемент и в сет и в массив векторов итератор на него.
Есть такие файлы:
global.h:
#ifndef GLOBAL_H
#define GLOBAL_H
extern int a = 228;
extern void doShit(int foo);
#endif
global.cpp:
void doShit(int foo) {/ does some shit /}
Что нужно написать в meh.cpp и mda.cpp чтобы там были доступны соответствующая переменная и функция?
Касательно неймспейсов я ничего еще не пробовал. Хочу, чтобы все было доступно без указания областей видимости, если это возможно.
Инбифо: "ололо, ты долбоеб, глобальные переменные нинужны", — да, да, я знаю.
Блять, оказалось, что я действительно долбоеб. Стоило только на сосач написать и все починилос. Вопрос закрыт.
В cpp файл int a = 228;
В хедер extern int a;
Хотя лучше глобальные переменные не использовать совсем.
В global.cpp наверх добавь
#include "global.h"
Из global.h убери присваивание, так делать нельзя, просто оставь объявление.
дальше выбери любой cpp файл и там напиши int a = 228;
>Что нужно написать в meh.cpp и mda.cpp
#include "global.h"
Лучше сделай так. В хедере
struct Global {
int a = 228;
void doShit();
};
в .cpp файле:
void Globall::doShit() {
}
Глобальные переменные не нужны
Хуета.
1. Класс не инстанцируется, поэтому тогда уж надо делать всё статик.
2. Присваивать так нельзя для статика, это придется не в хедере.
Блядь, я ему говорю, что глобальные переменные не нужны, а он собирается "делать всё статик".
Дальше ты создаешь инстанс класса Global и передаешь его там, где тебе нужна a и doShit.
Так ты хрень какую-то высрал.
1. Зачем функцию в эту структуру запихивать?
2. На кой черт вообще делать так как ты предлагаешь, если это не решает проблему споашивающего? Конечно, если ему нужео между двумя цпп файлами расшарить значение переменной - скорее всего он что-то не так делает, но тем не менее может ему надо или он чисто в образовательных целях смотрит. Но твоя идея создать зачем-то структуру глобал с этой переменной мне совершенно непонятна. Он может также и без твоей структуру кидать где хочет свою переменную.
Да
Хороший язык. В университете изучал. Писать как приятно.
Да вот нахуй он никому не всрался. 1 вакансия на весь город на джуна. 7-10 килорублей. Пустая трата времени. Абсолютно. Учил его, блядь, полгода, что бы понять, что устроиться смогу лишь только через 5 лет ежедневного задротства. Честно любил и люблю язык, все таки он мой первый.
Надо было эти полгода все эти безуказательные Джавы и Питоны учить и не сосать хуй без соли.
int n[N]
void f(a,b,c,d...) {...}
В плюсах сейчас денег не заработаешь. Вся движуха и бабло в вебе и энтерпрайзе.
а разве переменная и функция по умолчанию не глобальная?
ты тут их уже определяешь и объявляешь сразу, т.е. extern не нужен
vcpkg install boost-iostreams
eval в С++? Ты тредом ошибся?
Это копия, сохраненная 25 августа 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.