Это копия, сохраненная 6 ноября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
В тумане моря голубом!..
Что ищет он в стране далекой?
Что кинул он в краю родном?...
Играют волны — ветер свищет,
И мачта гнется и скрыпит...
Увы! Он счастия не ищет
И не от счастия бежит!
Под ним струя светлей лазури,
Над ним луч солнца золотой...
А он, мятежный, просит бури,
Как будто в бурях есть покой!
C++
Старший брат: >>837592 (OP)
Предыдущий: >>821402 (OP)
TL;DR
Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
- Вопросы по синтаксису идут на хуй
- Лабы идут на хуй
- "Как мне сделать Х на чистых крестах без библиотек" идут на хуй
- Все идут на хуй
- Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
- Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором. - Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментовпростреливания ногирешения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искусственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства. - Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
-
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы) Название Год Ссылка Бьерн Страуструп Программирование. Принципы и практика использования C++ 2016 https://yadi.sk/i/Yd6KKpLBqJSUr Стэнли Липпман, Жози Лажойе и Барбара Му Язык программирования C++ 2014 https://goo.gl/kVaela Стивен Прата Язык программирования C++ 2012 https://goo.gl/z7kA8u
Другие обучающие материалы
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три
Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:
- Годный блог, в котором все просто и понятно тян не нужны кококок борщ
- Блог с хорошо расписанными фичами новых стандартов
- Краткие описания библиотечных функций и контейнеров - на русском или более подробно на ангельском
- Блог Герба Саттера (на ангельском)
- Блог Скотта Мейерса (на ангельском)
- Блог еще одной тянки, много о Qt и оптимизации (на ангельском)
- Куча других блогов (на ангельском)
- Большой FAQ по C++ (на ангельском)
- Видео с CppCon (на ангельском)
Софт и библиотеки
Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа | Название | Описание | Ссылка |
---|---|---|---|
Windows | Microsoft™ Visual Studio® | Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда | https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия) |
Все | CodeLite | Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM | http://codelite.org/, "sudo aptitude install codelite codelite-plugins" для установки под *nix |
Все | CLion | IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует | https://www.jetbrains.com/clion |
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
both
И потом вы будете говорить, что C++ лучше C.
Там осиливай make, gcc, gprof, gdb, clang.
Потом читай писанину Страуструпа, после прочтения ознакомся с текущим стандартом C++ 2017 и GNU разширениями.
Готово, теперь читай код GCC, приводи в порядок, было бы хорошо разбить его на куски отдельно для каждого языка компилятор, общее в отдельный модуль запихнуть.
После этого если хочешь разрабатывать GUI apps то изучай Wayland API (оно короткое, 100 Пунктов, да и не обязательно знать все.) и QT5/6 с wayland.
Вот и все.
Вектор это такая недоколлекция?
А есть чтоли как в явке коллекции?
Хешмапы, связные списки, очереди, иммутабельные версии?
Или все пихать в вектор?
В плюсах все есть маньк, все.
Выбирай то что быстрее работать будет, если конечно не надо поддерживать говнокод и писать в стиле говнокода чтобы другим говнокодерам небыло "Неприятно".
>В куте
Ну так учи куте ебана врот, плюсы во многом как джава, так что справишься.
Только под Xorg не пиши, пиши сука под Wayland, сноси центось и ставлий Генту, установи Weston без xwayland для тестировки и Sway или любой современный оконный менеджер с xwayland для работы.
Кстати для куте программирование знать не нужно.
Странный вопрос.
Устраивайся на люблю работу, спустя год ее меняй, потом еще раз спустя год меняй - и вуаля, ты чувак, который немножко всякого разного умеет. Дальше уже занимайся тем, чем нравится.
В случае конкретно крестов - читать надо либо про qt, либо про алгоритмы всякие, либо про пекасети.
Мудачье блядь, опять велосипед какой-то придумали?
Вам что существующих дистрибутивов не хватает? Ну бздя, ну план9, нет сука, хотим говно жрать.
Мне бы такую работку.
В надо знать хорошо С++, понимать, что есть в бусте и знать, чем nlogn отличается от n^2.
В качестве бонуса - очень полезно поковырять qt.
Но ты сам понимаешь, что "знание голого С++" это очень обширная область и так.
Я в своей жизни проходил 5 собеседований на С++ программиста, почти все спрашивали за сам язык\STL и алгоритмы. Предметной области разработки конторы не было (ну, я нихуя и не сениор с 300к в наносекунду, чтобы еще и область знать). Области разработки учили сами уже на месте. Делай проекты, используй клевые фишки 11\14 стандарта, обязательно используй эксепшены (чтобы понять, как с ними работать) - и все будет хорошо.
>В плюсах все есть маньк, все.
Долго ржал.
Когда^W Если выберешься из своего плюсоманямирка, поржёшь тоже.
Есть блядь GNU - мобильная ос, нет, хотят говно жрать, говорю же.
Тем более ты на с++ пишешь, там тоесть нативные приложения, или ты IDE с костылями пользуешься что в яву превращает все?
Говорю же есть нормальные платформы, которых более чем достаточно, мейнстрим это GNU/Linux оно сейчас везде, и если под это разрабатываешь то не пропадешь, а андроид, мак, салфиш - хипсторская хуета. В мобильных устройствах критично важно время работы, чего интерпритируемое говнище никак обеспечить не может, дисплей протоколов нормальных туда тоже хуй завезли, там вообще хуй что поменяешь, часто с каким ведроидом брал телефон с таким он и здохнет. Ну если там нативные апы, то еще норм, лучше андроида.
Натив.
Я только планирую. Но нормально же условие описал.
static
Ладно, на самом деле не совсем ньюфаг.
Хочу спросить вот что: Можно ли как-то менять значения объектов в рантайме, обращаясь к ним по имени?
Ну, то-есть, есть у меня, например, какое-то гуи приложение. На нём есть текстбокс. Я хочу ввести в чекбокс имя объекта (скажем, money_value) и во второй чекбокс значение (скажем, 199) и чтобы значение money_value стало 199. Типа, как с RTTI, но имя инстанса, а не тип.
Что-то вроде рефлекшна в джаве.
Я могу, конечно, для моего юзкейса просто парсить команды и потом что-то чему-то присваивать, но хочу узнать, есть ли какие-то механизмы для этого.
Блять, за такой уёбищный дизайн языка надо комитет, его создавший, объявить профнепригодным и распустить. Что это блять за хуйня? Почему они не могли ввести тип универсальных ссылок? Почему мне приходится ТАК извращаться?
>нет
Хуево. Это точно?
>>842074
>Можешь сделать глобальную unordered_map<std::string, YobaWidget*> и к ней обращаться.
Окей, костылей таких я могу и сам напридумывать.
Рефлекшен в жяве он такой, неповторимый.
В плюсах это реализуемо именно через RTTI – именно для объектов, т.е. тип класса == имя класса (правда нужно деманглить кашу от typeid – а это жутко вендорлочные костыли). Следовательно, для твоей задачи можно написать боксы как в жяве Integer.
Такие костыли тебя больше устраивают?
тебе нужен по строке получать указатель на обьект. Как еще ты это собираешься делать, кроме костылей в рантайме?
Впервые столкнулся в QT, нужно работать с MySQL.
Узнал, что в этой хуйне нужно ставить дрова, чтобы с базой работать. Откомпилировал дрова без ошибок, поместил, вроде бы, куда нужно, но при запуске уже моего приложения - ошибка, блядь. Причем при построении - все ок. Как это фиксить?
Алсо, SQLBrowser. из примеров КьюТи, выдает ту же ошибку.
Я нарукожопил, или КьюТи пидор?
ебусь с этим уже часов 5, так что пойду посплю пока. Надеюсь вы что-то подскажите
А почему ее в шапке нет? И вообще на ангельском моя скорость чтения сильно упадет.
На русском она "Философия С++" называется. Я не знаю, почему ее нет в шапке.
Звучит как диагноз.
Наверно потому, что это высер распиаренного яваиндуса, который особой ценности не несёт.
Прочитал описание, вроде идеально для меня.
не читай, наверни страуструпа
Я вернулся.
Сходил к другу, попробовал на его лэптопе провернуть такое же - все так же, значит я даун. ЧЯДНТ?
>>842125
Не совсем, в QT его нужно еще и отдельно установить, как я понял.
>>842172
Нихуя. Даже пробовал насильно указывать директории библиотек - один хуй.
Какова вероятность того, что скачанная мной папка с дровами MySQL - фуфло, и лучше перекачать?
Аноны, помогайте. Жутко не хочу пилить клиент для работы с БД на той же Джаве, где у меня что-то да получалось, и потом настраивать передачу данных между процессами.
Бляя, плюсы в студии отдельно устанавливаются оказывается.
Итак, все было пофикшенно.
Дело в том, что КьюТи подхватывал библиотеке, но не мог найти их у Венды. Инсталятор с офф сайта МуСкл, почему-то, нихуя не поставил мне свои дровки, он их просто в папочку сохранил. Вручную кинул ДЛЛку в папку /windows/ - все ОК.
Есть класс массива строк, и есть дружественный ему указатель на этот массив строк. Но из-за того, что указатель определяется ниже, нихуя не работает.
https://ideone.com/GyN8lE
А, нет, после изменения StrBlobPtr(StrBlob &a, std::size_t sz) на StrBlobPtr(StrBlob &a, std::size_t sz = 0) ничего не изменилось.
https://ideone.com/tUwlRp
Мне нужно 1 символ считать не показывая его на экране. Как ещё это можно в крестах сделать?
Нужно ентер нажимать и поэтому если 2 раза подряд читать, то сначала прочитает букву, а потом ентер
Самый лучший контейнер. Легко добавлять новый элемент, произвольный доступ быстрый, можно в сишечку передавать дату :3. Везде использую его (зависимость уже), брат пока жив.
Как из него выделить строки, чтобы получилась матрица типа:
1 2 3
4 5 6?
Класс матриц неудачный вариант для новичка. Класс сложный, возможностей мало, работы тоже мало, а на каждую вакансию десяток макак. Сейчас каждый школьник пишет класс матриц, а потом не знает что делать с ним. Лучше попробуй Haskell. На нём и конкуренция пониже, и зарплаты больше, и сам язык понятней. Если никогда не занимался программированием, то начинать лучше всего с Haskell - после него другие языки учатся быстрее. Работы полно, платят отлично. По книгам. Если есть хоть немного знаний программирования, читай это: http://www.ozon.ru/context/detail/id/30425643/ Если совсем новичок, пойдет эта книга: http://www.ozon.ru/context/detail/id/28346038/ Ну и куча онлайн-учебников. Вот, например: https://anton-k.github.io/ru-haskell-book/book/home.html Хороший учебник, всё расписано подробно. Сам по нему учился. Рекомендую.
Кстати, зачем вообще нужно функциональное программирование? У него же нет прикладных задач. И через 20 лет вряд ли появятся.
Чтобы прикладные языки вроде плюсов и явы с отставанием в 20 лет тащили к себе по паре фишек из фп раз в 5 лет и хомячка восторженно пищали.
>template<typename T, std::size_t ... dimensions>
Как найти произведение чисел из списка аргументов dimensions?
>'_Size': invalid template argument for 'std::array', expected compile-time constant expression
Лямбды же
Своим незнанием откуда в языке есть эти пару фишек ты сам себя позоришь своим безкультурием. Все равно что приехать во Францию и орать "хуй ахах ресторан жир русское слово))))".
рекурсивно.
В твоем ideone все же компилится, выходит, что студия не нужна.
http://ideone.com/V1n9tX
Тебе ещё следует узнать про Universal References и Perfect forwarding, чтобы была возможность умножать объекты с перегруженным оператором без копирования.
Ну что посоны, сколько лет к такому надо идти жабамакаке? помимо 2 лет геймдевелопмент опыта
Или к этому?
https://www.appone.com/MainInfoReq.asp?R_ID=1286133&B_ID=44&fid=1&Adid=&ssbgcolor=&SearchScreenID=2290&CountryID=3&LanguageID=2
Твоё говно даже не открывается. Так или иначе, репорт.
это не лаба а для себя
> Я не хочу каждый раз когда мне надо узнать размер структуры вызывать для этого функцию.
Какую ещё функцию?
завтра тогда. он не на моём компе
ток что создал тред по Google Moc
Кто разбирается может помочь чуть?
https://2ch.hk/pr/res/844903.html (М)
Есть один webView, и он умеет открывать ссылки. Как открывать ссылку по нажатию кнопки я понял, но мне надо, чтобы ссылка открывалась автоматически из когда. В первом случае в QML не надо ничего подключать, но при попытке вызвать id webView из другого класса компилятор ругается на отсутствие. Есть какие-нибудь мысли?
Отклеилось
class enum foo : uint8_t { bla1, bla2, ... blablabal ...};
switch (x) {
case foo::bla1:
case foo::bla2:
...
blablalba
...
}
template <typename Any>
void get_object(Any object)
{
std::cout << object << std::endl;
}
template <typename Any, typename other>
void get_object(Any object,other number)
{
for (int i = 0;i < number-1;i++) { std::cout << object << std::endl; }
}
void inc_used(int used, std::string text)
{
used++;
get_object(text,used);
}
int main()
{
int used = new int;
used = 1;
std::string x = new std::string;
std::cout << "What do you want to run?" << std::endl;
getline(std::cin, x);
if (x == "text")
{
get_object(x);
}
else {
inc_used(used, x);
}
delete x;
delete used;
system("pause");
return 0;
}
template <typename Any>
void get_object(Any object)
{
std::cout << object << std::endl;
}
template <typename Any, typename other>
void get_object(Any object,other number)
{
for (int i = 0;i < number-1;i++) { std::cout << object << std::endl; }
}
void inc_used(int used, std::string text)
{
used++;
get_object(text,used);
}
int main()
{
int used = new int;
used = 1;
std::string x = new std::string;
std::cout << "What do you want to run?" << std::endl;
getline(std::cin, x);
if (x == "text")
{
get_object(x);
}
else {
inc_used(used, x);
}
delete x;
delete used;
system("pause");
return 0;
}
>>845035
>>845043
Разобрался. Там used++ для увеличения значения на 1 нельзя было использовать, надо used= *used+1
Можно определить приоритет скобками: (*used)++
Спасибо, с делитом действительно нехорошо получилось, но падения вызывал не он. Нашел я ошибку, я выделял под первый массив(тот который в мейне) память через new(), на идеоне я выделял нормально, а вот у себя не заметил.
Подпарвил.
class enum foo : uint8_t { bla1, bla2, ... blablabal ...};
foo x = something_return_foo();
switch (x) {
case foo::bla1:
case foo::bla2:
...
blablalba
...
}
дай ссылку на методичку, если есть
Допустим, есть у меня файл с текстом:
>aaa bbb ccc ddd
А я хочу получить
>aaa ccc ddd
То есть вырезать символы 4-7 (иил 5-8)
Есть идея открыть два fstream'а (in и out), затем, поставив курсоры куда надо (out.seekg(3); in.seekg(7)), просто писать то, что читаю, ворде
while (in.read(block, block_size)){
out.write(block, block_size);
}
Предположим, что размеры идеально совпадают и последний блок будет прочитан как раз перед eof и т.д.
И затем в конце truncate'ить файл, чтобы размер уменьшился до нужного.
Это нормально или умные люди делают как-то иначе?
"вырезать" заменять на "отфильтровать" - пишут что нужно оставить во временный файл, потом удаляют старый и временный на его место
так быстрее всего
по сути происходит посимвольный ввод-вывод 2мя системными функциями, в потрохах которой рантайм и система все нужные буферицаии-оптимизации делает незаметным образом для тебя
Вот, например, у меня есть массив (внутри unique) и я хочу его передать функцию для какой-то обработки, но терять им владение не хочу и поэтому передаю по константной ссылке.
Та же ситуация и с возвратом из функции.
Стоит ли так делать?
>рантайм и система все нужные буферицаии-оптимизации делает незаметным образом для тебя
Ой, ладно тебе, "все оптимизации делает". Что, и sendfile вызывает, когда возможно?
В такой ситуации ты спокойно можешь использовать сырой невладеющий указатель.
>"вырезать" заменять на "отфильтровать" - пишут что нужно оставить во временный файл, потом удаляют старый и временный на его место
Ну, то есть, никакой магии "указания на разрыв" нет (типа, вот файл отсюда и до сюда, а следующий кусок там, как получается при фрагментации на диске), и если мне нужно из гигабайтного файла убрать пару килобайт, то нужно пересмотреть архитектуру хранения данных прочитать с диска гигабайт и записать на диск почти гигабайт, да?
Если размер удаляемых данных кратен кластеру, то, в теории, можно пошаманить на уровне файловой системы. Но абстракция "файл" не для того была придумана.
все нововведения в последних стандартах крестов - это добавление синтаксического сахарка и расширение библиотек, входящих в стандартную поставку
те семантика языка не меняется, а значит шарящего чувака все эти нововведения не пугают и не волнуют
а как еще то? то что я тебе предложил - наглядно и просто, можно сделать на стандартных getc и putc, потоковым (с внутренней буферизацией) вводом-выводом
Вот именно, что там ровным счетом нихуя.
У меня windows 7 а я поставил себе visual Studio community 2015,проблема в том, что при выборе типа проекта выдает "could not find a suitable sdk to target" что делать? окна 10-ые ставить не охото..
>Не могу установить на винду 15-ю студию
Что за ошибки выдаёт? Накати на винду последние обновления
В /s/
>Что за ошибки выдаёт? Накати на винду последние обновления
Да в пизду ее, у меня винда совсем убитая, надо переустанавливать. Пока что меня устроит и Code::Blocks.
И так стоит на ноуте, но в нем отвалилась земля. Пока не сделаю заземление, буду на винде. Посоветуйте, как исправить ошибку error: linker command failed with exit code 1104 (use -v to see invocation)|
Хочу высрать окошко с кнопкой, доставьте готовый хэлловорлд
Не задумывался о том, что проще скачать бесплатно без смс wxDev-C++ ?
С таким подходом к решению задач ты далеко пойдешь не только в С++, но и в программировании в целом
опять какую-то красноглазую ненужную залупу форсят
>>847569
Не слушай его, гугли как поставить обнову, и ставь студию. Шиндовс переставь в конце концов
>морочиться с обновой
>переустанавливать Шиндовс
>потом искать для студии кряки с троянами
И это все ради IDE, имеющей идентичный функционал
Нет, с студией ни одна иде до сих пор и близко не стоит.
Кряки не нужны – полноценная студия давным давно бесплатна.
Зарегестрироваться на сайте майкрософта, авторизоваться в студии и всё. Внезапно, да?
Как хотя бы описать проблему гуглу?
А это блядь что за хуйня в настройках? Почему в одном случае слеши в пути левые, а во втором -- правые? И как правильно всё это заполнять на винде?
Поставил C::B, mingw, wx. Сделал хэлловорлд для работы с wx, при билде получил ошибку:
>.\wx_pch.h|14|fatal error: wx/wxprec.h: No such file or directory|
Где и как я обосрался? Помогите ньюфагу.
Возможно, ты действительно лучше меня осведомлен касаемо лицензионной политики MS, но
>Зарегестрироваться
я бы тебе все же посоветовал подтянуть русский язык перед будущим ЕГЭ
У меня на него, не поверишь, памяти не хватает. В ВУЗе сказали, что для C будем C::B использовать, поэтому на его основе и начал делать, так как предустановлен уже. На диске меньше 1гб осталось, даже под иные нужды не хватает, за неделю, конечно, подрасчищу, но мне бы уже сейчас начать всё это делать.
Тут компилятор встроенный и много всякого важного. Но мне сейчас плюсы нужны и грофен от wx.
Лол. Встроенный в ту версию ide, что я скачал.
Как мне прочитать intы из нее в соответствующие переменные типа int?
stringstream
Значит я о нём правильного мнения. Добра тебе
Жри что дают.
Согласен с этим пидором, хоть и презираю его.
Думаешь, я тебя забыл, моя родная внимание-блядь?
Ебал слушать эту хуйню 1:40. Че там вкратце?
помогите найти ошибку
#include <locale>
#include <cmath>
#include <iostream>
using namespace std;
int mai()
{
setlocale(LC_ALL, "Russian" );
int x,y,x1,x2,x3,y1,y2,y3;
int s,s1,s2,s3;
cout <<" Введите координаты треугольника:" ;
cout <<"x1=" ;
cin >> x1;
cout <<"y1=" ; cin >> y1;
cout <<"x2=" ; cin >> x2;
cout <<"y2="; cin >> y2;
cout <<"x3="; cin >>x3;
cout <<"y3="; cin >> y3;
cout << "Введите координату точки";
cout <<"x="; cin >> x;
cout <<"y="; cin >> y;
if (x1==x2==x3 || y1==y2==y3)
{
cout<<"Треугольник задан не верно";
}
{
s = 1/2 abs((x2 - x1) (y3 - y1) - (x3 - x1) (y2 - y1));
s1 = 1/2 abs((x2 - x1) (y - y1) - (x - x1) (y2 - y1));
s2 = 1/2 abs((x - x1) (y3 - y1) - (x3 - x1) (y - y1));
s3 = 1/2 abs((x2 - x) (y3 - y) - (x3 - x) (y2 - y));
if(s == s1 + s2 + s3){
cout<<"Точка в треугольнике";}
else
{
cout << "Точка не принадлежит треугольнику" ;}
}
return 0 ;
}
помогите найти ошибку
#include <locale>
#include <cmath>
#include <iostream>
using namespace std;
int mai()
{
setlocale(LC_ALL, "Russian" );
int x,y,x1,x2,x3,y1,y2,y3;
int s,s1,s2,s3;
cout <<" Введите координаты треугольника:" ;
cout <<"x1=" ;
cin >> x1;
cout <<"y1=" ; cin >> y1;
cout <<"x2=" ; cin >> x2;
cout <<"y2="; cin >> y2;
cout <<"x3="; cin >>x3;
cout <<"y3="; cin >> y3;
cout << "Введите координату точки";
cout <<"x="; cin >> x;
cout <<"y="; cin >> y;
if (x1==x2==x3 || y1==y2==y3)
{
cout<<"Треугольник задан не верно";
}
{
s = 1/2 abs((x2 - x1) (y3 - y1) - (x3 - x1) (y2 - y1));
s1 = 1/2 abs((x2 - x1) (y - y1) - (x - x1) (y2 - y1));
s2 = 1/2 abs((x - x1) (y3 - y1) - (x3 - x1) (y - y1));
s3 = 1/2 abs((x2 - x) (y3 - y) - (x3 - x) (y2 - y));
if(s == s1 + s2 + s3){
cout<<"Точка в треугольнике";}
else
{
cout << "Точка не принадлежит треугольнику" ;}
}
return 0 ;
}
А вот и лабодауны оттаяли
Парни, в чем причина такой хуйни:
QtCreator 3.6.1, создаю проект, накидываю файлы, делаю билд, cpp и h видит нормально, а qml он не копирует в директорию билда. Run qmake тыкал, не помогает.
Ебаааааать
Есть код:
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
using std::cin; using std::cout; using std::endl;
using std::string;
using std::vector;
int main() {
string (word);
vector<string> strings;
while (cin>>word)
strings.push_back(word);
for (auto i: strings)
if (islower(strings)==true)
strings=toupper(strings);
for (auto i=0; i!=strings.size(); i++)
cout<<strings;
cout<<strings.size();
}
При выполнении выдаёт ошибку "no matching function for call to 'islower" и дальше страшные буквы. Поможете разобраться?
- Полгода атакуют лабодауны
- Полгода скорость постинга 2 поста в неделю
- Два раза в год разгорается какой-то технически сложный срач
- Раз в два месяца происходит вялое набрасывание за любимую IDEшечку.
/thread
P.S. >>848135 - нахуй иди, педрила безграмотная
код просто кишит обшибками. Иди читай методичку.
Дело даже не в крестотреде. Это же два.ч, форум для (недавних) школьников. Что ты хочешь от него?
$ man man
Анон, доставь проект хэлловорлда с гуи, а то у меня его собрать не получается, так хоть ясно будет по какой причине.
Анон, что не так?
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_richtext
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_xrc
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_aui
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_dbgrid
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxbase28ud_odbc
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_media
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxbase28ud_net
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_gl
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_qa
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxbase28ud_xml
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_adv
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_html
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw28ud_core
<ДЕАНОНЮЩИЙ ПУТЬ ДОК IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: cannot find -lwxbase28ud
collect2.exe: error: ld returned 1 exit status
Чтобы попробовать гуй, очевидно же.
>>848315
Я незнаю, когда я прохожу по <ДЕАНОНЮЩИЙ ПУТЬ ДО IDE>/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/, то я вижу ld.exe. Оно там есть. Как я понимаю, -lwxmsw28ud_richtext - флаг с которым оно пытается запустить этот ld.exe. Поэтому я не знаю почему оно так и прошу твоей помощи, анончик. Я не знаю как проверить работоспособность флага и же узнать почему он не работает.
> Я не знаю как проверить работоспособность флага и же узнать почему он не работает.
Ну блять, потому, что это какая-то либа которой не хватает.
Но ведь я установил wxWidgets и прописал путь до неё в визард? Или я установил как-то не так?
Понятия не имею что там не так.
Если уж нужны гуи, то я бы пару дней подрочил с# и сделал на формах.
Ну или если плюсы, то Qt.
Покажи, что у тебя прописано в Project build options -> Debug / Release -> Search directories. Там указываются пути для ббилиотек, похоже.
Там ничего такого нет: сохранение/применение настроек (QSettings, пока что существует всегда, а не только когда нужен), звуковой сигнал (QMediaPlayer, объект создаётся только при необходимости и сразу же после использования удаляется), окно настроек (также создаётся лишь при необходимости) и иконка в трее с меню из 2 пунктов.
Ну и естественно, объект-таймер, наследник QObject.
+стоят обработчики событий на нажатия в главном окне чтобы его можно было перемещать (рамка окна отключена)
Valgrind молчит.
Linux (openSUSE Tumbleweed), x64
Как серьёзно уменьшить потребление памяти не урезая прогу?
>>848203
http://pastebin.com/trnA03AP это тестовый файл.
http://pastebin.com/9ndn2jQ4 polynom h файл
http://pastebin.com/mbseYCdJ polynom cpp файл
Все компилируется, но во фразе
polynom m3;
m3=polynom(m1+m2);
Вызывается конструктор, а не оператор копирования(который возвращает ссылку на объект типа полином).
в общем как решил проблему, при повторной установке отметил язык С++ и все стало норм.
> http://pastebin.com/trnA03AP это тестовый файл.
polynom m1(2,x);
...
m1.~polynom();
> http://pastebin.com/mbseYCdJ polynom cpp файл
polynom::polynom()
{
std::cout<<"emtyconst\n";
double x[1]={0};
polynom(0,x);
}
Создали объект, удалили его. Что не нравится в конструкторе пустом? При том, что вызывается не он, а обычный конструктор, вместо копирования. Ты помочь можешь?
То есть деструктор не нужно самому вызывать. А почему срабатывает не тот конструктор?
vector < vector < int > > numbers (10, vector < int >);
>То есть деструктор не нужно самому вызывать.
Нет.
> А почему срабатывает не тот конструктор?
Приведи уже лог, чтобы я мог увереннее тебя отхуесосить
vector < vector < int > > vec (10,vector < int > (10) );
Вот так, конечно наверное, но тоже не работает
>Нормально ли что маленький pomodoro таймер на C++/Qt5 ест 50 метров памяти?
Да. https://www.opennet.ru/base/sys/pmap_memory.txt.html
Какой лог, я в это не умею, каутами(остатки которых ты можешь наблюдать) обнаружил, что в строке
m3=polynom(m1+m2);
вызывается polynom(int n, double *x)
Хотя m1+m2 возвращает объект и по идее должен вызываться конструктор копирования polynom(&O)
Где O – объект класса полином.
Насчет деструктора да, если вырезать, то ничего не поменяется.
У тебя там (если не считать возврата по значению) вообще нет мест, где может вызваться конструктор копий.
>>848754
Хотя не, пизжу. Есть, эти вот и polynom(m1+m2) polynom(m1*m2)
Сдаётся мне, компилятор соптимизировал это и сразу подал результат сложения/умножения на вход оператору присваивания.
А вообще
Error in `./a.out': double free or corruption (fasttop): 0x0000000000749050
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7f2f12242725]
/lib/x86_64-linux-gnu/libc.so.6(+0x7ff4a)[0x7f2f1224af4a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f2f1224eabc]
./a.out[0x400e2a]
./a.out[0x400bfb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f2f121eb830]
./a.out[0x4008e9]
>непредсказуемо
NRVO — это более чем предсказуемо.
Class a;
Class b;
a = Class(b); <-- выкинуть тут Class и превратить это в a = b — более чем предсказуемо.
А какой тогда вообще смысл в конструкторе копирования, если его нельзя применить? Только перегружать равенство, но это несколько иное.
>А какой тогда вообще смысл в конструкторе копирования
Копировать объект.
> если его нельзя применить?
В смысле?
Вот у меня есть конструктор копирования, приведи пример, как я должен его применять.
Синтаксис конкретно этого куска взят, кстати, с сайта мелкомягких.
>Вот у меня есть конструктор копирования, приведи пример, как я должен его применять.
Чего ты хочешь? Чтобы он гарантированно вызвался?
> Синтаксис конкретно этого куска взят, кстати, с сайта мелкомягких.
К чему ты это написал?
Да, я хочу чтобы он вызвался. Иначе зачем мне функция, которую не вызвать. Объяснять к чему это я не буду.
Ок, переправлю.
Но это же не объясняет почему вызывается конструктор.
Имеется не до конца прочитанная книга Шилдта "Базовый курс" 2014-го. Почему не читаю до конца? Потому-что заебался и просто читать без практики нудно. Решил просто начать делать что-нибудь и, если будет непонятно, курить мануалы, книгу и гугл.
Посему вопрос: с чего вообще начать в этом?
Алсо, скажу, я не долбоеб и понимаю, что сразу начать с "мнагамилеоныхтридэигртипагэтэа" я не смогу, поэтому надеюсь на ссылки мини-игр, типа тетриса, 2д и прочего.
Я имею в виду по имени.
ТАК-ТО ДА, КОГДА ТЫ СОЗДАЁШЬ ОБЪЕКТ, ВЫЗЫВАЕТСЯ КОНСТРУКТОР. ОХУЕТЬ ТЫ МЕНЯ ПРОСВЕТИЛ.
Читай Доусона(Dawson) для основ, по делу - гугли и учи SDL или SFML, можешь для первого загуглить Remaking Cave Story in C++, хоть там много говнокода и неосвобожденной памяти, но для новичка сойдет
Visual Studio
Как это ни странно, он называется clang_complete
Например, разбираюсь с шаблоном, в который мне нужно добавить код. Вижу функцию. Начинаю искать код функции. В итоге, спустя несколько прыжков по typedef'ам и куче классов (т.е. функция лежит в шаблонном классе, который через штук 5 других шаблонных классов и typedef'ов все-таки оказывается в том классе, с которым я, собственно, разбираюсь), я уже забываю блин, что, собственно, искал и зачем.
Для новичка это все выглядит пиздецки ебануто.
Подскажите, может есть какая метода, позволяющая как-то в подобном коде разобраться?
Я, обычно, беру чистый файлик в блокноте, и пишу туда стек вызовов, кусочки кода и тд.
Чтобы потом четко и ясно на 1 экране была полная картина что и как работает, и где что править
Нету никаких методик. Это называется write-only код. Не факт что его автор хорошо помнит что тогда выражал этим.
Лучше возьми другие исходники, тем более что ты нюфаг — не тарть время на бесполезную хуйню.
В конструкторе класса Game
vector<Player*> players;
for (int i=0; i<8; i++) player.push_back(new Player());
В теле одного из методов класса Game
for (int i=0; i<8; i++) player.someMethod(some_arg);
Компилируется, но на третью строку при запуске ругается Debug assertion failed. C++ vector subscript out of range. Что я делаю не так?
>Компилируется, но на третью строку при запуске ругается Debug assertion failed. C++ vector subscript out of range. Что я делаю не так?
Непонятно как такой код вообще скомпилировался, учитывая что ты обращаешься к элементу не по индексу и через точку вытаешься вызвать метод указателя...
А вообще — для уёбищ вроде тебя, которые не в состоянии перебрать вектор без эксепшена, сделали range based for.
Опечатался.
for (int i=0; i<8; i++) players.someMethod(some_arg);
Я проверил players.size(), он оказался равен нулю. Пробовал и вот так наполнять:
vector<Player> players(8, Player())
Все равно он пустой. Кстати players это член класса Game.
Весь код выложи куда-нибудь, заебал.
Хех, если бы я мог взять другие исходники. Это на работе, а я типа юный подаван.
Аффтар кода, к сожалению, в земле уже гниет. Мне бы и самому хотелось у него спросить, нахуй так писать.
Еще этот чудесный код собирается только в 2008-й студии. Соотв., ни std::thread тебе, ни nullptr и т.д.
Какого хуя ты обращаешься к указателю, как к объекту?! Ежели эта хуйня каким-то магическим образом собралась у тебя, очевидно, что ты пытаешься обратиться вне вектора (очевидно, sizeof(Player) > sizeof(size_t))
Все оказалось до неприличия просто. У меня уже было определение players в заголовочном файле, и я зачем-то переопределил его в local scope метода.
Решил свой вопрос на шарпе, лол. Оказывается после плюсов эта фигня оказывается легче
Посоветуйте что можно использовать для сервера, какие есть годные фреймворки.
В проритете - готовые решения.
Нагуглил связку nginx + fastcgi daemon, но хотелось ещё вариантов.
ключевыми словами class и template
С++ же просто надстройка над си. Даже крестовые классы это просто запутанная функция на си
С же просто надстройка над ассемблером. Даже сишные функции это просто запутанные CALL/RET.
Ассемблер же надстройка над машинными кодами. Даже CALL/RET - какие-то там циферки опкодов. А те в свою очередь надстройка над логическими элементами, которые в свою чоередь надстройка над току бегающему по камушку. Он в свою очередь надстройка над атомами и молекулярной сеткой. И эта рекурсия конца не имеет.
Вот и доказали что количество отличий си от с++ стремится к бесконечности пополам. Почему пополам,хз, в математике не силен может надо квадратный корень
Бамп
Держи нас в курсе, блядь.
Запилил игру "Жизнь" на коленке. Обоссыте: https://github.com/TatriX/ai/blob/master/game-of-life/main.cpp
http://ideone.com/uluMMf
long n = 4;
int a = n;
a = 3;
и ты хочешь, чтобы у тебя n тоже стало 3? вся суть твоего вопроса
ссаными тряпками за такое https://github.com/TatriX/ai/blob/master/game-of-life/main.cpp#L6
Using Pattern = std::vector<Point> или дваже std::array<N, Point> https://github.com/TatriX/ai/blob/master/game-of-life/main.cpp#L27
constexpr Pattern block = {...}; https://github.com/TatriX/ai/blob/master/game-of-life/main.cpp#L32
зачем нужны w, h; если есть уже size() в векторе? https://github.com/TatriX/ai/blob/master/game-of-life/main.cpp#L57
> То есть нужно работать именно с тем объектом, который хранится именно по данному адресу, а не с тем, что находится где-то ещё?
У тебя есть два петуха. Ты отрубил голову одному, но хочешь, чтобы сдохли два. Два разных объекта никак вообще друг с другом не связаны.
> ссаными тряпками за такое
Ой, ладно, ну лень мне было в программе на сто строк везде писать std::
> Using Pattern
> constexpr Pattern block = {...};
Про это еще не читал.
> зачем нужны w, h; если есть уже size() в векторе?
Затем что вектор это про хранение клеток, а не про размер поля. Да и за высотой тогда неудобно ходить будет. Или решу я поменять вложенные вектора на один длинный.
На словах я конечно понимаю, попытаюсь ещё раз осознать на деле. Спасибо.
>ссаными тряпками за такое
Ой иди нахуй пидор, using для этого и придумано, всегда так делаю. Книжечку какую-нибудь модную прочитал, что за это надо чморить? Нацики охуели.
Стек вызовов там, кстати, угарно отображается. Завтра скрин сделаю.
И еще, коммы убрать нужно между цифр
std::string::find_first_of
http://pastebin.com/jYi3siLX
Аналогичный код на C++ AMP считается без проблем.
http://pastebin.com/qyakqxq2
Он сейчас его развитием занимается, это такие "плюсы без костылей".
У меня от этого SSL_METHOD
>> cudaMalloc((void)&CU_POSR, *2);
что за указатель?!
>> N
в каком месте он установлен, это дефайн?
он не превышает число допустимых тредов, случайно?
>> for (int next = 0; next < N; next++) {
>> if (first != next) {
>> cuAX_M[first] = 0.1 (cuPOSX[next] - cuPOSX[first]) / sqrt((cuPOSX[next] - cuPOSX[first])(cuPOSX[next] - cuPOSX[first]) + (cuPOSY[next] - cuPOSY[first])(cuPOSY[next] - cuPOSY[first]));
>> cuAY_M[first] = 0.1 (cuPOSY[next] - cuPOSY[first]) / sqrt((cuPOSX[next] - cuPOSX[first])(cuPOSX[next] - cuPOSX[first]) + (cuPOSY[next] - cuPOSY[first])(cuPOSY[next] - cuPOSY[first]));
>> }
>> }
Что это за хуйня? Зачем ты сначала пишешь в память, причем в одну и ту же много раз подряд и получаешь оттуда значение после последней записи, если уж оно так и должно быть (хотя я крайне в этом сомневаюсь), то какого черта ты не использовал локальные переменные (которые хранились бы в регистрах)
Допустим мне нужно собирать экзешники и под gcc, и под msvc (под линуксом, да, собирать экзешники, почему-то в гугле ничего подобного нет, будто нельзя сидя под одной осью делать софт под другую)
Как сделать это, как замутить киты ?
Плохо гуглишь, по запросу "qt crosscompilation".
Не видел, чтобы такую хуйню вообще кто-то вытворял, знаю, что когда собирают софт под мак, виндусь и линупс под каждую выделяется хотя бы виртуальная машина с отдельным сборочным сервером.
>850550
>Не видел, чтобы такую хуйню вообще кто-то вытворял, знаю, что когда собирают софт под мак, виндусь и линупс под каждую выделяется хотя бы виртуальная машина с отдельным сборочным сервером.
А разгадка одна - тестирование. Ничего не мешает конпилить все где-то на линупсе, а потом раскидывать бинарники по воркерам и тестить. Но это хуйня, потому что билдеров и так должно быть много, а значит там уже есть виртуалки
Вот так выглядит там стек вызовов. К слову, прога из ИДЕ не запускается, разваливается с какой-то ебанутой ошибкой доступа.
Делал путем аттача к запущенному процессу.
Длина одной такой строчки порядка 800 символов, хех.
Нет, в госконторе. Правда, ебля с этим проектом сильно бьет по мотивации. Я даже сроков не могу предсказать, когда я закончу внесение правок в него (предполагая, что я смогу это сделать за конечное время).
Да я вроде везде где так делаю потом free пишу... И это не зависит от количества входных данных, всегда одинаковое кол-во памяти висит.
как ты будешь линковать с виндовыми DLLками, ирод?
Держись, анон. Это правда какая-то лють. Но, вполне вероятно - без этого говна было бы еще сильно хуже
Анон-посоветовавший-тебе-почитать-Александреску
ну у тебя валгринд не нашел утечку, если што
То есть мне нафиг не нужны параметры-аргументы, мне просто нужна отсылочка так сказать. По базовым запросам по теме функции такого не объясняется, только с параметрами. Какую тему мне вообще погуглить?
ПС насколько помню, в яве я запросто это делал, а в крестах чет не получается
Это все хуита, как минимум заводи виртуалку. У меня прямо сейчас прекрассно работающий на CLang проект не линкуется на MSVC
>я хочу сделать функцию-метод, которая вызывает другие функции-методы, которые вызывают другие функции методы.
А как ты из main() вызываешь обычную func1(), которая вызывает другую обычную func2()?
//f1 мне нужна не столько как функция. а просто как отсылка к началу цикла, других отсылок, кроме как вызова функции я не знаю, если знаешь-подскажи
//одна из функции функции, которая вызывает функции
void f1() {
if (bla){
bla;
bla;
..}
};
//функция с функциями, логично, вызывает функции
void f() {
f1();
f2();
};
//если условие такое-то, делает то-то и вызывает функцию с функциями
if (bla) {
bla;
bla;
..
f();
};
>> static
Это значит что данные из пространства имён имеют доступность только в одном файле? Ещё видел что делают заголовочный файл с обьявлениями без инициализации в пространстве имён. И суют этот хедерфайл где требуется. Так нужно? Или надо по другому строить программу(парадигма?)
Но тогда НАХУЯ у unordered_map наружу торчат методы rehash(), bucket_count(), load_factor()? Вот я работаю в фирме, которой захотелось сделать заточеный под свои нужды unordered_map, внутри которого массив и линейный поиск. Как я тогда должен сделать rehash() и bucket_size()?
И второе, если слово unordered умышленно скрывает внутреннее устройство, то зачем метод rehash() раскрывает его?
Я просто забил на матчасть.
1)В .h файле я должен написать декларацию функции(по параметрам), которую собираюсь создать. То есть в моем случае без параметров это будет просто void f();
2)В .cpp файле я должен написать определение функции, то есть что она делает. То есть void Class::f () { }; (могу ли я записать это в .h файле сразу под декларацией?)
3)И затем уже в самом классе я могу вызывать функцию просто написав f(); -верно? (нужно ли при вызове писать void?)
>>850959
>>850939
То есть вызов функции здесь будет :
код...
код...
checkEN();
dead();
код...
код...
Верно?
И еще вопрос уже о другом немного.
У меня есть определенные данные. Потоки, функции и тд.
У меня есть куча .cpp с разными классами.
Мне нужно как-то по-простому включить эти данные в в .cpp файлы, чтобы ясен пень не копировать каждый раз.
Как это сделать?
Вот в любой .cpp файл я включаю(#include) data.h.
data.h декларикует класс в data.cpp.
Как сделать так, чтобы класс data 'слился' с любым другим классом .cpp? То есть если я просто сделаю #include то с точки зрения комплиятора это будет выглядеть как разные классы, идущие поочередно, без зависимостей от друг друга.
И может нужно делать не класс, а что-то другое? Спрашиваю потому, что знаю что, допустим, в ява все является классом, но в крестах вроде бы не так.
ПС и самый неважный косметический вопрос, у с++ есть паки, в которые можно складывать классы?
Я ява допустим есть Проект->Паки->классы-файлы. Можно в один класс включить другой import.packagename.classname.
Можно также сделать с с++?
Я просто забил на матчасть.
1)В .h файле я должен написать декларацию функции(по параметрам), которую собираюсь создать. То есть в моем случае без параметров это будет просто void f();
2)В .cpp файле я должен написать определение функции, то есть что она делает. То есть void Class::f () { }; (могу ли я записать это в .h файле сразу под декларацией?)
3)И затем уже в самом классе я могу вызывать функцию просто написав f(); -верно? (нужно ли при вызове писать void?)
>>850959
>>850939
То есть вызов функции здесь будет :
код...
код...
checkEN();
dead();
код...
код...
Верно?
И еще вопрос уже о другом немного.
У меня есть определенные данные. Потоки, функции и тд.
У меня есть куча .cpp с разными классами.
Мне нужно как-то по-простому включить эти данные в в .cpp файлы, чтобы ясен пень не копировать каждый раз.
Как это сделать?
Вот в любой .cpp файл я включаю(#include) data.h.
data.h декларикует класс в data.cpp.
Как сделать так, чтобы класс data 'слился' с любым другим классом .cpp? То есть если я просто сделаю #include то с точки зрения комплиятора это будет выглядеть как разные классы, идущие поочередно, без зависимостей от друг друга.
И может нужно делать не класс, а что-то другое? Спрашиваю потому, что знаю что, допустим, в ява все является классом, но в крестах вроде бы не так.
ПС и самый неважный косметический вопрос, у с++ есть паки, в которые можно складывать классы?
Я ява допустим есть Проект->Паки->классы-файлы. Можно в один класс включить другой import.packagename.classname.
Можно также сделать с с++?
> cudaMalloc((void)&CU_POSR, size*2);
Там так, опечатался.
> N
Это const int
http://pastebin.com/XwfVxBsG
>>850497
Спасибо, поправил.
1. да, но если у тебя класс будет использоваться ИСКЛЮЧИТЕЛЬНО ЕДИНОЖДЫ, например, как скрытая реализация, то можно его определить в файл сорцов (cpp)
2. да, например
class C {
void f() {
printf("f()\n");
}
}
3. не нужно
Какие данные, их разве нельзя уместить в один заголовочный (h) файл и потом везде, где нужно, инклюдить?
1) Легаси блять. У майкрософта вроде уже была такая хуитка в стандарте;
2) Чтобы созвучно было, лол. Так же хорошо помогает забыть об обосрамсе комитета с hash_map.
>Это значит что данные из пространства имён имеют доступность только в одном файле?
Это значит что переменная доступна до окончания программы
>Ещё видел что делают заголовочный файл с обьявлениями без инициализации в пространстве имён. И суют этот хедерфайл где требуется. Так нужно?
Так можно. Так например настройки программы реализуются которые нужны во всех ее частях. Но вообще, объявлять переменную и не инициализировать это моветон.
>Или надо по другому строить программу(парадигма?)
Понимаешь, если ты будешь всюду пихать глобальные переменные бездумно, то нахуя ты вообще плюсы изучаешь? Можешь джаву например попробывать, или там дотнет какой.
В общем как сосчитать с бинарника динамический массив, подскажите как это сделать пожалуйстаа..
или куда посмотреть, а то способов много а у меня не получается ни один
и да, я изучаю язык с помощью vs
Спасибо.
На счет данных.
Вот есть у меня декларация класса HelloWorld в .h
Затем у меня есть иницилизация элемента класса HelloWorld в .cpp
У меня есть данные: переменные и функции. Все это надо чтобы было включено в иницилизацию класса, любого, а не только HelloWorld.
Проблема еще в том, что в data есть осылки к текущему объекту класса( то бишь this).
В итоге я сейчас ломаю голову как это сделать.
Надо создать функцию void Data(), но тогда её надо полноценно декларировать, да я еще хз надо ли пихать класс.
Ууу, как с непривычки запутанно.
Спасибо.
На счет данных.
Вот есть у меня декларация класса HelloWorld в .h
Затем у меня есть иницилизация элемента класса HelloWorld в .cpp
У меня есть данные: переменные и функции. Все это надо чтобы было включено в иницилизацию класса, любого, а не только HelloWorld.
Проблема еще в том, что в data есть осылки к текущему объекту класса( то бишь this).
В итоге я сейчас ломаю голову как это сделать.
Надо создать функцию void Data(), но тогда её надо полноценно декларировать, да я еще хз надо ли пихать класс.
Ууу, как с непривычки запутанно.
Вот неокончательный вариант.
http://pastebin.com/BD0p1XaK
Если создать CUDA-аналог, по большей части void APM_Math() заменить на:
http://pastebin.com/YZYf8qv3
То ничего не считается, но компилируется нормально.
Запутанно потому что ты, мудило, даже не можешь открыть книжку и почитать про наследование, зато уже наспамил на сосач и выебал всем мозги.
А что за история с обосрамсом hash_map была?
Дело такое, что у нас для неупорядоченных ассоциативных контейнеров _ уже _ есть три структуры данных, массив и две хешъ таблицы.
Никак не можем придумать название обволакивающего интерфейса, UnorderedSet слишком длинно и напоминает СТЛ, а HashъSet слишком конкретно и намекает на внутренние детали имплементации.
можно паре итераторов ofstream следать copy в вектор через back_inserter, получится в три строчки
Есть прога на плюсах, которое что то отсылает и принимает с оборудования через пси плату с которой прога работает через драйвер по прерываниям. Данную плату надо сначала открыть, проиницилизировать, а по окончанию остановить и закрыть.
Когда отключаешь оборудование, выходишь из программы и включаешь оборудование обратно, возникает синий экран смерти.
Вопрос - что мне рассмотреть в первую очередь в коде программы? Есть подозрение, что тут косячит неправильное закрытие пси платы. Или какая то бабуйня с потоками или что-то с динамической памятью. Я вообще без понятия. Помогите братцы!
наверняка какой-нибудь дискриптор не чистится, или обращение к нему идет после чистки.
Надо зачекать. Именно после выключения оборудования и после выхода из программы, а потом включении оборудования выходит синий экран. Почитал про ошибку, что то про обращение аппаратуры к запрещенным участкам памяти
Учусь программировать на C++, потому вопрос сюда.
Есть сервер, сервер запускает поток ожидания подключения клиента, поток ожидания получает сокет клиента и создает для него новый поток обмена данными.
Общение с клиентом происходит через recv() и send(), которые блокируют поток до send() и recv() со стороны клиента.
Поток обмена клиента будет иметь доступ к recv_buff, recv_buff_len, send_buff,send_buff_len. К этим же объектам будет иметь доступ код работы с клиентом, который будет просто знать, что если в recv_buff_len что-то отличное от нуля, то надо считать recv_buff_len байт из recv_buff. Так же и с send_buff.
Но тогда потребуется 2 потока, так как recv() и send() блокируют поток и не могут независимо обрабатываться в одном потоке, скорее всего и для кода обработки клиента еще поток понадобится.
В общем чувствую что что-то я не так делаю в организации своей программы, подскажите плз, как обычно обрабатывается обмен клиент-сервер. Предполагается что я не знаю когда клиенту приспичит что-то отправить, а когда серверу. Хочется универсальности.
Еее, то самое, спасибо. Мне и надо было просто указать на тему.
Книжка хуйня, читаешь туторы тоннами, книги перечитываешь, а толку-то если эти закорючки не запоминаются без практики. Нужна практика. А когда практикуешься- с другой точки зрения смотришь.
В яве сидишь, просто хуячь функции только так, хоть рекурсую пили-и так сойдет. А в крестах мне пришлось уточнять как это делать. Хотя подумаешь, функция, она и в Африке функция.
Читац исходники вебсерверов и прочего, читац статьи про асинхронность, ивентлупы, очереди сообщений и всё остальное.
>Читай исходники вебсерверов
Я только учу cpp, то что сам написал с трудом понимаю
>читац статьи про асинхронность
Я работаю с синхронными сокетами
> ивентлупы,
Да там что-то про то чтобы не плодить кучу потоков.
Вобщем реализую как могу криво, а потом буду изучать всякие технологии, я прост пока что язык изучаю, а чтобы было интересно пишу делаю свой™ класс для работы с клиент-сервер. Думал, что все как-то проще.
Пока что ясно и интересно, надо обдумать.
мимо в поисках нормальной ide под unix
Культякреэйтор, кдевелоп, если есть мощная пока — экипаж с цдт.
Пека *
Поясните за std::string, что это за тип и чем от обычного string отличается? Нахуй он нужен и почему без этого std:: не выходит насрать в гуй?
std::string для кирилицы тоже подходит, просто string так не может. для азиатских языков нужен ::string
Что за обычный string?
У std::string размер элемента - sizeof(char), то есть 1 байт, естественно, без игры локалями, больше двух языков выдавить из него ничего не удастся, а из азиатских алфавитов - то вообще нехуй делать с таким типом (для этого есть std::wstring - тут уже два байта на элемент), как и сказал уважаемый господин выше.
И ещё как помещать много строк в переменную? В php это бы выглядело просто
$string = "
Lorem ipsum dolor sit amet
consectetur adipiscing elit.
Ut a dui est. Fusce lobortis luctus augue a
onvallis. Vestibulum ante ipsum primis
...
"
vim
std::string смотри. char* используют сишники, мамонты, и в редких случаях экстремальной производительности
мне нежен char
кряк есть, работает под 2016.2.2 нормально
Но, у него проблемы с распознаванием имен и еще куча багов, я заебался уже багрепортить им.
Есть класс A, который наследует суперкласс. Есть класс B, который наследует тот же суперкласс.
Мне нужно чтобы в одной из функции класса A была функция класса B.
Мои действия:
Наследую в A класс B. Убираю наследование суперкласса в A, так как наследование есть в B.
Затем я в одной из функции класса А вызываю функцию из В, то есть просто пишу void Func();
Иии, ничего не проиходит. ИДЕ никаких ошибок также не показывает. То есть функцию видить, но почему-то не 'копирует' определение-начинку функции.
Что я делаю не так?
#include <fstream>
#include <windows.h>
using namespace std;
int main()
{
LPCWSTR szDirPath = L"testdir";
CreateDirectory(szDirPath, NULL);
for (int i = 0; i < 10; i++)
{
ofstream file;
file.open("testdir/text file.txt");
file << "Работа с файлами в С++";
return 0;
}
}
Qt5_если_ты_хочешь_нативный_гуй,_или_всякие_опенгл_релейтед_вещи_типа_SDL_если_игровой
Если конечный класс наследует один интерфейс с чистой виртуальной функцией, и один класс в котором эта функция реализуется, что нужно исправить, чтобы ReB можно было инстанцировать?
http://pastebin.com/sHWFhG8g
В другой проге, использующий данный драйвер и плату, ничего не крашится.
Я смог выловить ошибку на синем экране IRQL_NOT_LESS_OR_EQUAL. Погуглив выяснил, что или драйвер обращается к запрещенному участку памяти то ли ещё хуй знает что.
Надеюсь, что поможешь мне навестись в правильном направлении, а то я совсем нихуя не умею и не знаю.
Пока что решил сделать клон куска программы, как новую прогу, дабы точно локализовать место косяка в коде.
Спасибо,
Еще один вопрос, если в ReA вместо override - final, это уже никак не исправить, нужно уже разделять интерфейсы, чтобы ImB не содержал ту функцию, которая финализируется в ReA ?
Тогда, по идее, поможет ReA* biba = new ReB;
Тебе совсем не понятно, что драйвер не должен крашиться кто бы его ни использовал?
Если его используют некорректно (суют неверные адреса, дескрипторы и любые другие параметры), он должен уметь это обрабатывать и сообщать об ошибке, а не валить систему в BSOD.
Ну так проблема не в программе, а в драйвере.
mem = ( void ) packet->getHeader().packet_size;
boost::asio::write(*this->m_socket, boost::asio::buffer(mem, sizeof(Header)) );
Какого черта в последней строчке кидается эксепшен (инвалид поинтер) ? Всеми способами уже пытался передать данные, везде одно и то же.
this->m_socket->write_some( boost::asio::buffer(mem, sizeof(Header)) );
Тот же эффект.
>>852320
Каждый раз нужно прописывать вручную через гуи, либо ..
Попробуй освоить cmake, там весь солюшн с либами, путями и прочими долгонастраевыми через гуи вещами генерируется за 2 секунды через батник или сх, если все правильно написал.
сука
std::cout << packet->getHeader().packet_size << "\n";
void mem = malloc(sizeof(Header));
mem = ( void ) packet->getHeader().packet_size;
сука
std::cout << packet->getHeader().packet_size << "\n";
void (POINTER)mem = malloc(sizeof(Header));
mem = ( void (POINTER)) packet->getHeader().packet_size;
Что нужно: заполнение по шаблону, подчёркивание и зачёркивание слов.
так, а теперь немного странного: это всё будет работать на ведре? Хочу мультиплатформу замутить.
У тебя голова на плечах есть? апи под ведро есть - будет, нет апи - не будет.
Хуйnya
Прикол в том, что Александреску я быстренько пробежался. Ну да, типа уловил кое-каие принципы. Но код от этого читабельнее не стал, лол.
Ну, пока ковыряюсь в этом гавне. Будет возможность съебать в другое место, где хотя бы будут люди, могущие что-то подсказать и объяснить (или задачи близкие моему уровню), съебусь.
Ибо скилл от ковыряния в этом гавне ни на йоту не растет. Скилл, очевидно, растет когда ты пишешь код в первую очередь. А тут я три месяца пописал код и вручили эту парашу.
Я через минуту как запостил почитал, что я сказал, и понял, что обосрался.
На самом деле - скилл растет как раз тогда, когда ты читаешь код. Ты пропускаешь сквозь себя работу других программистов, и постоянно узнаешь что-то новое (и плохое, и хорошее). Когда ты сам пишешь код - ты ничего нового не узнаешь.
тот же анон
Где в шиндовс держать репозиторий третьих вечеринок?
Вот допустим, скачал я проект, которому нужен буст, небо и аллах. Можно ли как-то указать вижал сдудии глобально, где находится папка со всеми собранными либами и заголовками? И чтобы все новые проекты, которые я пытаюсь собрать, сразу смотрели зависимости том, и не сношали мне мозг? и чтобы его можно было просто расширять
>На самом деле - скилл растет как раз тогда, когда ты читаешь код. Ты пропускаешь сквозь себя работу других программистов, и постоянно узнаешь что-то новое (и плохое, и хорошее). Когда ты сам пишешь код - ты ничего нового не узнаешь.
Пиздеж бессовестный. Скилл повышается именно при написании кода, когда ты сталкиваешься со всеми проблемами и мелочами, с которыми сталкивались те самые хорошие программисты.
Писать свой код с нуля лучше, чем читать чужой. А еще лучше писать свой и читать в процессе чужой, сравнивая свои решения с чужими.
/usr/lib /usr/include
endzhoy your шindows
Ничем.
>На самом деле - скилл растет как раз тогда, когда ты читаешь код.
Может у опытных пацанов и так. Для новичков наверное лучше все-таки руку понабивать, освоиться и все такое.
Почему, когда я использую серийный for, то код ниже перестаёт работать?
[CODE lang="C++"]int main() {
int array[3];
for (auto i=0; i<=3; i++) // или for (auto i : array);
array=i;
for (auto i=0; i<=3; i++) // или for (auto i : array);
std::cout << array;
}[/CODE]
Звиняюсь за закравшийся табик,
И за проёбаное в конце предпоследней строчки.
ты какую-то хуйню написал полную.
i в одном случае это число от 0 до 3, во втором - это содержимое array
Хуйня получилась из-за того, что скобочки съелись у array. Просто в книжке аналогичный код, и я сделал тютелька в тютельку. А при вы полнении выскакивает ошибка сегментации.
Индексы почему-то сжираются при постинге, а <= я давно поправил. Суть-то в том, что обыкновенный for работает, а серийный for - нет (при исполнении - ошибка сегментирования).
Ай, точно же. Серийный for возвращает ссылку на элемент. Спасибо, дошло наконец.
"нормальность" -- это всего-лишь показатель используемости того или иного метода. если ты ориентируешься по этому показателю, то съеби. а так, всё зависит от твоей задачи и о того, перевесят ли плюсы того или иного метода его минусы. обычно от стльных контейнеров не наследуются из-за отсутствия у оных виртуального деструктора, что пускает по шляпе полиморфность и ведёт к ликам. в стль практикуется разделение контейнеров и алгоритмов (те обычно выделены в свободные функции). попробуй сделать на подобии этого. иной вариант сделать так:
template<typename T>
class Yoba {
std::vector<T> vec;
...
};
или, в принципе, вот так
template<typename T>
class Yoba : private std::vector<T>
{
using vector = std::vector<T>;
public:
using vector::push_back;
using vector::operator[];
using vector::begin;
using vector::end;
Yoba operator*(const Yoba & ) const;
Yoba operator+(const Yoba & ) const;
Yoba ();
virtual ~Yoba ();
};
Обьясняю ситуацию. Есть проект, древний, собирается под старые (очень) Винды на новом MiinGW-w64. К бинарнику libstdc++ линкуется статически. Libstdc++ в свою очередь динамически тянет из msvcrt.dll функции. Прикол в том что на говне мамонта под которое надо компилить проект в msvcrt.dll нету всех необходимых экспортов.
Ок. Я взял в руки HIEW и IDA, покопался в таблице импортов получившегося бинарника, посмотрел что же использует эти отсутствующие импорты и понял что их использует функции из libstdc++ которые моим кодом никогда не вызываются. Из таблицы импортов я вынес нахуй эти ненужные импорты, занопил от греха подальше их вызовы и... все заработало. Какой я блядь молодец.
Теперь стоит вопрос об автоматизации этих костылей:
1) Вариант крайний, не предпочтительный. Написать патчер (хоть блядь на шелле с использованием dd или еще какого говна, всеравно под cygwin'ом компилю), который потом в мейке вызывать. Просто и сурово.
2) Пересобрать libstdc++, вычистив оттуда ненужное говно. Самый элегантный, но гайда по пересборке статического варианта libstdc++ для MinGW я не нашел.
3) Заставить на этапе линковки ld подменить импорты у статически приделываемой libstdc++. Вот тут я вовсем хз, возможно ли в принцыпе такое провернуть? Правда еще остается вопрос с кодом который вызывает эти импорты. Как я говорил, он в принципе никогда вызываться не должен, но его присутствие всеравно мне не нравится.
Собственно, гуру пикапа GCC и MinGW - подскажите по 2-му и 3-му пункту. Что из этого реально и где про такое почитать?
Может проще сделать dll-прокладку, которая будет дергать системные функции из msvcrt, где они доступны, или заглушки, если системной функции нет.
Нельзя. У всех STL контейнеров невиртуальный деструктор, соотв-но бибу соснешь.
Если тебе надо как-то что-то кастомизировать - напиши обертку.
Может ты просто поставишь на те машины более-менее свежий пакет Visual C++ Redistributable?
Ты имеешь в виду подсунуть проксевый MSVCRT, в котором будут сквозные экспорты существующих функций и заглушки для не-существующих? Мне не хочется поставлять еще одну DDL'ку с проектом, да и вариант такой-же топорный как и первый мой предложенный с патчером. Лучше уж патчер тогда.
>>853302
Я проверял этот вариант. Более новые MSVCRT импортят из KERNEL32 и прочих системных DLL функции которых на некроговне нет. И чем новее, тем больше неудвлетворенных зависимостей. Так что приходится работать с дефолтным MSVCRT. Да, проект KernelEx я тоже проверял, но увы оно эмулит далеко не все экспорты KERNEL32 которые нужны новым MSVCRT.
Тогда собирай на таком же старом mingw, как и твоя винда.
А что я с ним буду делать? Либы как им собрать я понимаю, а куда бы разместить кучку собранных либ или симлинков на них, чтобы студия автоматом от туда все брала.
Не, ему надо, чтобы они автоматически добавлялись в левые проекты, насколько я понимаю. Начиная с VS2010 убрали возможность делать общие настройки для всех проектов, в общем-то, теперь будешь сосать лапу.
Но не переписывать же мне заводской драйвер поставляемый к оборудованию :(
>QT нужно покупать дорогую лицензию + громоздкость
лицензия только на статическую линковку, статический кьют +10 мб к экзешнику, максимум.
То есть я могу в инсталлер класть qt.dll и продавать так программу, не покупая лицензии? Откуда токая инфа?
>класть qt.dll и продавать так программу, не покупая лицензии
да
>Откуда токая инфа
учи матчасть
Почитал, понял. Спасибо за инфу, анончик.
Нужно настроить sdl, sdl_draw и sdl_ttf в visual studio.
Всю ночь сижу, не могу уже, спасайте
Ставь линакс.
cmake изучи или еще что-нибудь, что позволит тебе генерировать проекты без заебов (хотя смаке мне не очень нравится, но что поделать)
А SDL есть встроенные возможности рисовать простые фигуры (круги, квадраты, треугольники)?
#undef main перед main(), выстави форсированно консольный проект в опциях, и гугли про "SDL stdio_legacy_definition", если начнет гундеть про какое-то говно типа iob_file
Для кроссплатформы есть qtcreator, для шиндовс есть Visual Studio. Какие приемущества у твоей залупы по сравнению с этим?
Ну да, я бы и сам не против, только ни одна нормальная IDE не может жрать ни мейкфайлы ни какие-либо другие, кроме своих (за исключением clion'a, который проекты делает на основе cmake). Я бы и сам, конечно, рад перейти на WAF или SCons, только вот ни автокомплита, нихуя тебе не будет, а ебаные полу-редакторы типа VIM или emacs не могут мне позволить жрать громадный проект, при этом следя за вложенными проектами, такие дела.
Вот теперь и приходится жрать, что дают.
Читай OpenGL, тебе SDL нужен будет в том случае только для создания контекста. А в OpenGL минимальный набор - полторы функции, которые даже Сталин бы освоил (без расстрела Khronos'а, естественно).
А в чем проблема написать функцию для рисования квадратов\треугольников самому?
SDL неплохая вещь. я во всех своих уебанских проектах использую
qtcreator
Прямо сейчас форматируешь жесткий диск и укатываешься обратно на винду, обмазываясь VS. Глупо в 2k + 2^4 думать, что есть годные IDE кроме VS
>за исключением clion'a, который проекты делает на основе cmake
И в этом он ничем не отличается от других IDE, использующих свои собственные форматы проектов, т.к. cmake-файлы он переваривает только им созданные.
Есть функция
float huy (float x1, float x2)
{
float X;
X = x1 + x2;
return X;
}
Она считает X.
Мне нужно из другой функции обратиться к этой и вывести X.
Бля, надеюсь понятно.
Я пытался вывести результат посредством
float X1 = huy ();
Но нихуя.
Короче: как из одной функции вывести результат, посчитанный в другой функции?
Чё бля нихуя? Ты параметры пробовал функции передавать?
По сути да, но хотя бы поддерживает хоть какой-то генератор.
Вообще, там очень много просят люди, но жид-брэйнс не спешат реализовывать поддержку, скажем automake или makefiles, потому что других багов достаточно.
В обоих случаях компоновщик когда уже в exeшнике из библиотек будут ссылаться на main, правильно? Потому что компиллятору похер, он не формирует автоматически эту функцию.
Потому что там куча больших костылей.♿️
Сначала а присваивается b, потом c присваивается d,
а потом вдруг резко a присваивает d. Почему так ?
В комитете одни старики, комитет очень забитит производительность и принятием очередного стандарта они пытаются выдавить максимум говна из старых вещей, зачастую не добавляя каких-либо в корне новых. Спустя только 6 лет после появления ЦоПэ11 в библиотеку приехали функции для работы с файловой системой, ну, конечно, всякие ништяки тоже есть (особенно для шаблоноебов полезные, например, сворачивание выражений). Сторонних либ, конечно, итак полно, но самый основной вопрос для меня, где, вашу мать, сериализация?! Мне бы статической за глаза хватило бы, но, блять нет же. Году к 2026, наверно, родят.
Зачем в ЦоЖоПэ17 добавили if constexpr(), конпеляторы ведь издревне умеют выкидывать неиспользуемые операции при включенных оптимизациях.
Тащемта нарисовать наклонную линию с антиалайсингом непросто, нужно изобретать велосипед, за что принято расстреливать.
Только готовые либы, например, SDL_gfx.
А ты что ожидал? Что а присвоится с? Так оно уже d.
Потому что (a = b) возвращает a: http://ideone.com/nP6mv9
(a = b) = c = d -> (выполняются скобки, значение b присваивется a) -> a = c = d -> (значение d присваивается c) -> a = c -> (значение c (равное d) присваивается a) -> a.
Чтобы вынести что-то там в компайлтайм. Самое смешное, что constexpr не даёт вообще никаких гарантий, лол, это всё такая же услужливая просьба компилятору как inline.
>>855331
Абсолютно всё было реализуемо, просто большинство всё ещё писало на асме/коболе/алголе/обоссаном диалекте лиспа и хотелки были совсем другие. Ну и ограничения на самих компиляторах были другие — попробуй сделать неоднопроходную залупу с всевозможными выводами типов, дедукцией шаблонов, компайлтайм хуитой и тд когда у тебя 640кб (те самые знаменитые, лол) оперативки в лучшем случае. Явно не очередным рекурсивным спуском дело заканчивалось.
> Зачем в ЦоЖоПэ17 добавили if constexpr(), конпеляторы ведь издревне умеют выкидывать неиспользуемые операции при включенных оптимизациях.
>>855362
> Самое смешное, что constexpr не даёт вообще никаких гарантий, лол, это всё такая же услужливая просьба компилятору как inline.
Вот так выглядит беседа двух олигофренов.
>constexpr guarantees compile-time evaluation is possible if
https://isocpp.org/blog/2013/12/constexpr
А вот так по-олигофренски работает constexpr, щито оделать, какой язык такая аудитория.
Шестой гусь уже нормально делает, на 4.8 не смог проверить - сломал библиотеки, лол. Даже без constexpr создает, так что да, constexpr он, вроде как и интересен, но и одновременно бесполезен оказался.
Ты третьим к ним присоединился, что ли?
В constexp if допускаются только константные выражения (вычисляемые на этапе компиляции). constexpr if ОБЯЗАН отрабатывать в compile-time, т.к., например, в выкидываемой ветке может оказаться вызов несуществующего метода или какие другие конструкции которые не то, что вычислить в рантайме нельзя, но и просто скомпилировать код с ними.
Я вообще не читал коммент про constexpr if(а просто увидел кейворд и решил набросить о том, как оно работает) но один хуй это чуть расширенная версия ifdef без задач.
Конкретно наброс такой: constexpr, если ему дать не константу просто молчаливо отработает в рантайме, без ошибки и нихуя => юзабельно пока проект пишет 1 человек (и без таймскипов).
Хотя в плюсах вообще все через такой вот анус реализовано, чему удивляться.
>пок-пок ни как в Ди, ко-ко-ко
>добавляют compile-time if из D
>пок-пок говно без задач, ну хватит уже переусложнять, коко
Вся суть
При чём тут это мертворожденное говно вообще, поехавший? Нахуя вообще статическая типизации и прочее кококо, если по прежнему нужно искать подобные детские косяки в рантайме?
>При чём тут это мертворожденное говно вообще, поехавший?
Ну так скажи где сделано нормально.
>>855441
>Нахуя вообще статическая типизации и прочее кококо, если по прежнему нужно искать подобные детские косяки в рантайме?
Вот есть например const методы у классов. Они гарантируют что метод не изменяют состояние объекта к которому применены. Однако, их можно вызвать и для не константного объекта. Т.е. const условно говоря означает что методу хватает для работы и константного объекта. Примерно такая же аналогия работает и для constexpr функций. Модификатор означает что функции "хватит для работы" и компайл-тайма. Это не значит что она будет работать исключительно в компайлтайм, точно также константные методы могут применяться и для неконстантных объектов. Все по аналогии.
Однако для constexpr функций у компилятора шире возможности по оптимизации кода. Если для const функций компилятор зна Кроме того, можно использовать constexpr вычисления в качестве параметров шаблона или в качестве размерности массива, что раньше можно было достаточно геморно.
>если ему дать не константу просто молчаливо отработает в рантайме, без ошибки и нихуя
Так дай ему constexpr константу, даун тупой, будет тебе ошибка.
ПК не работает без процессора.
>Так дай ему constexpr константу, даун тупой, будет тебе ошибка.
Что ты за хуйню написал?
>Кроме того, можно использовать constexpr вычисления в качестве параметров шаблона или в качестве размерности массива, что раньше можно было достаточно геморно.
Костыль моего костыля - мне вообще не костыль?
>Однако для constexpr функций у компилятора шире возможности по оптимизации кода
Чем же они отличаются для рантаймового constexpr от const? Занитриговал.
>Ну так скажи где сделано нормально.
В любом диалекте лиспа. Только это вообще не язык, а строительный материал это другие языки, с другими требованиями, и тащить породию на подобный функционал в, блядь, плюсы да и ещё с такой реализацией - веселуха полная.
Кстати, пока знающий шизоид в треде - почему в 11-х плюсах constexpr настолько кастрированные? Причём совсем до сумашествия - тот же тернарный оператор вместо if else.
> один хуй это чуть расширенная версия ifdef без задач.
Гениев (буду политкорректен) полон тред...
На этапе препроцессинга у тебя нифига кроме токенов нет, а на этапе constexpr if есть доступ к информации о типах, можешь type traits использовать на полную катушку.
Для того и ввели constexpr if, чтобы было удобнее, чем с шаблонными костылями. Об этом в proposal написано.
Но местные гении proposal-ов не читают, а предпочитают изображать капитана К.О.
http://ideone.com/jIDu1b
Так лучше, по-моему, тут вывод типов общий, если ты решищь запихать float или double вместе с впереди идущими целочисленными, значения не обкастрируются
http://en.cppreference.com/w/cpp/language/fold
на пикрел почти то, что нужно (не знаю, зачем они обозвали sum то, что им не является)
Удивит препода и одноклассников.
Так у меня, вроде, тоже ничего не кастрируется. Ведь при операциях над разными типами оно само к "наивысшему" приводит, если не указано другого.
>>856080
Что-то я не понял, что это и как связано с моей задачей. И фраза
>an operator with precedence below cast at the top level
Оператор находится на топ левеле и его приоритет ниже каста или приоритет оператора ниже "каста на топ левеле"? И что вообще под топ левелом подразумевается, та часть выражения, которая вне всех скобок?
>> Так у меня, вроде, тоже ничего не кастрируется. Ведь при операциях над разными типами оно само к "наивысшему" приводит, если не указано другого.
У тебя на выходе получается в любом случае long double вне зависимости от типов, поданных на вход. Если ты передашь два char'а, скажем, он сначала их сложит, а потом сконвертирует в long double, что само по себе уже затраты. Само по себе такое сложение двух целых чисел не даст существенного снижения производительности, но когда ты начнешь складывать уже три целых числа, то у тебя вторым шагом будут складываться два long double, что, само по себе, очень затратная операция (относительно сложения целых чисел).
>У тебя на выходе получается в любом случае long double вне зависимости от типов
А, так это по условию так надо. Получается, самый оптимальный и отвечающий условиям вариант это функции с args... возвращать common_type, а в функции с одним аргументом — long double, так?
Смотря на то, что ты желаешь получить на выходе. Если ты желаешь выхлоп в виде long double, то можно не париться с выводом общего типа, если хочешь, чтобы было быстрее, делай вывод общего типа для аргументов.
Если ты делаешь суммирование одного значения, то используй тип аргумента как тип возвращаемого значения.
Отлично, спасибо.
Крестаны, хелп.
Есть QQuickWindow, как определить, когда оно частично или полностью закрыто другими окнами? visibility подходит только для свёрнутого окна. Попробовал со стороны window() подцепиться к exposeEvent, но isExposed() всегда (кроме сворачивания) выдаёт true, соснулей.
Qt::WindowFlags flags = mainWindow.windowFlags();
mainWindow.setWindowFlags(flags | Qt::WindowStaysOnTopHint);
Но это же хуевый костыль.
Я так понимаю, без дрочева с винапи для получения всех окон, сравнивания позиций вручную, описанную проблему не решить.
http://pastebin.com/RUhdduse
Дохуя в чём.
==12073== Memcheck, a memory error detector
==12073== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==12073== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==12073== Command: ./govno
==12073==
==12073== Invalid write of size 8
==12073== at 0x400A69: main (govno.cpp:12)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid write of size 4
==12073== at 0x400ADD: main (govno.cpp:15)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400AA0: main (govno.cpp:15)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400B31: main (govno.cpp:18)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400B80: main (govno.cpp:19)
==12073== Address 0x5ab5d40 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid write of size 4
==12073== at 0x400B8D: main (govno.cpp:19)
==12073== Address 0x5ab5d40 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400B21: main (govno.cpp:18)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400B4B: main (govno.cpp:19)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400B70: main (govno.cpp:19)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400BDF: main (govno.cpp:23)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
-33-36-271-43
1-36-4201
-121-40-9-13
==12073== Invalid read of size 8
==12073== at 0x400BCF: main (govno.cpp:23)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
111-221
==12073== Invalid read of size 8
==12073== at 0x400C71: main (govno.cpp:37)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400C9B: main (govno.cpp:38)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400C81: main (govno.cpp:37)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400CAB: main (govno.cpp:38)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid write of size 8
==12073== at 0x400CDC: main (govno.cpp:39)
==12073== Address 0x5ab6280 is 0 bytes after a block of size 32 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400C2D: main (govno.cpp:29)
==12073==
-45-72-109-31
==12073== Invalid read of size 8
==12073== at 0x400D7F: main (govno.cpp:48)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400D9B: main (govno.cpp:48)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073==
==12073== HEAP SUMMARY:
==12073== in use at exit: 72,704 bytes in 1 blocks
==12073== total heap usage: 8 allocs, 7 frees, 73,848 bytes allocated
==12073==
==12073== LEAK SUMMARY:
==12073== definitely lost: 0 bytes in 0 blocks
==12073== indirectly lost: 0 bytes in 0 blocks
==12073== possibly lost: 0 bytes in 0 blocks
==12073== still reachable: 72,704 bytes in 1 blocks
==12073== suppressed: 0 bytes in 0 blocks
==12073== Rerun with --leak-check=full to see details of leaked memory
==12073==
==12073== For counts of detected and suppressed errors, rerun with: -v
==12073== ERROR SUMMARY: 58 errors from 18 contexts (suppressed: 0 from 0)
Дохуя в чём.
==12073== Memcheck, a memory error detector
==12073== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==12073== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==12073== Command: ./govno
==12073==
==12073== Invalid write of size 8
==12073== at 0x400A69: main (govno.cpp:12)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid write of size 4
==12073== at 0x400ADD: main (govno.cpp:15)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400AA0: main (govno.cpp:15)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400B31: main (govno.cpp:18)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400B80: main (govno.cpp:19)
==12073== Address 0x5ab5d40 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid write of size 4
==12073== at 0x400B8D: main (govno.cpp:19)
==12073== Address 0x5ab5d40 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400B21: main (govno.cpp:18)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400B4B: main (govno.cpp:19)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400B70: main (govno.cpp:19)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400BDF: main (govno.cpp:23)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
-33-36-271-43
1-36-4201
-121-40-9-13
==12073== Invalid read of size 8
==12073== at 0x400BCF: main (govno.cpp:23)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
111-221
==12073== Invalid read of size 8
==12073== at 0x400C71: main (govno.cpp:37)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400C9B: main (govno.cpp:38)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400C81: main (govno.cpp:37)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid read of size 4
==12073== at 0x400CAB: main (govno.cpp:38)
==12073== Address 0x5ab5cf0 is 0 bytes after a block of size 16 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A68: main (govno.cpp:12)
==12073==
==12073== Invalid write of size 8
==12073== at 0x400CDC: main (govno.cpp:39)
==12073== Address 0x5ab6280 is 0 bytes after a block of size 32 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400C2D: main (govno.cpp:29)
==12073==
-45-72-109-31
==12073== Invalid read of size 8
==12073== at 0x400D7F: main (govno.cpp:48)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073== Invalid read of size 8
==12073== at 0x400D9B: main (govno.cpp:48)
==12073== Address 0x5ab5c98 is 0 bytes after a block of size 24 alloc'd
==12073== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12073== by 0x400A38: main (govno.cpp:10)
==12073==
==12073==
==12073== HEAP SUMMARY:
==12073== in use at exit: 72,704 bytes in 1 blocks
==12073== total heap usage: 8 allocs, 7 frees, 73,848 bytes allocated
==12073==
==12073== LEAK SUMMARY:
==12073== definitely lost: 0 bytes in 0 blocks
==12073== indirectly lost: 0 bytes in 0 blocks
==12073== possibly lost: 0 bytes in 0 blocks
==12073== still reachable: 72,704 bytes in 1 blocks
==12073== suppressed: 0 bytes in 0 blocks
==12073== Rerun with --leak-check=full to see details of leaked memory
==12073==
==12073== For counts of detected and suppressed errors, rerun with: -v
==12073== ERROR SUMMARY: 58 errors from 18 contexts (suppressed: 0 from 0)
Спасибо
Да ничего там ужасного нет, кроме индексации за пределами массивов.
>Анончик молю ,помоги пожалуйста!!
Постpоить класс для pаботы с многочленами. Класс должен включать соответствующие поля: порядок, набор коэффициентов.
Класс должен обеспечивать пpостейшие функции для pаботы с данными классами: вычисление значения многочлена для данного параметра, вывод многочлена в удобной форме и т.д.
>>840964 (OP)
>Памятка ньюфагу
>
>Вопросы по синтаксису идут на хуй
>Лабы идут на хуй
Читать умеешь, говно?
шин10
установил куте
не могу открыть новый проект, пишет то что сборщика нет.
Что делать то?(переустановлю qt скину скрины)
пишет: Необходимо в настройках комплекта задать компилятор для сборки.
да всё, спасибо, разобрался. msvс криво встал как то, переустановил и всё норм стало. Теперь бы разобраться как делать кросскомпиляцию.
У них охуенный прогресс: в 2016-м году они узнали об SSA и теперь их компилятор выдаёт не совсем говнокод. См. пик. 1. Кстати, откуда берутся сперманьки, которые вопят, что компилятор от MS самый лучший? Стоит только глянуть на результаты старого оптимизатора, как понимаешь,что все восхвалятели MSVC — ебанутые.
Ладно. Решил я глянуть, а что же там выдаёт шланг. Смотрим на пик. 2.
Но погодите!!! Это ведь почти тот же код, что сейчас выдаёт студия! Разница ECX и EDI из-за разных calling conventions. В MSABI первый аргумент идёт в RCX, в SYSVABI — в RDI. Ну и разница в LEA. rcx*2 против rdi+rdi. Скорее всего MS проходятся по асму peephole-обфускатором и делают замену второго на первое, чтобы никто не догадался о заимствованиях.
Вот так вот. Предупреждали вас, господа llvm-щики, что заигрывание с пермиссивными лицензиями добром не кончится. Спиздят ваш код и спасибо не скажут.
Видимо, так оно и вышло.
Туда, где вам всем и место.
#include <iostream>
#include <locale.h>
#include <conio.h>
using namespace std;
void main (void)
{
int x;
cin >>x;
int& y = x;
int z = y;
cout << y;
_getch();
}
http://www.cprogramming.com/tutorial/references.html
Грубо говоря, ярлык для другой переменной.
Хотя, не, ярлык не самое верное слово, это больше для ссылки подошло бы, ну да пофиг, прочитаешь на той странице.
Это не ссылка на x, скажем так.
Есть инжектор функции в память процесса, и четыре функции, которые я пытаюсь заинжектить. Проблема в том, что инжект каждой из них происходит успешно, но приводит к крашу приложения.
В чем тут проблема, почему даже пустая функция крашит все?
Например,
void zeroFWithRet() {
__asm RET
}
скомпилируется примерно в следующее при выключенных оптимизациях:
push rbp
mov rbp, rsp
ret
pop rbp
ret
Почему тогда
void zeroF() {
__asm {
}
}
Тоже крашит, там же будет
push rbp
mov rbp, rsp
pop rbp
ret
Скрин дампа
Фактически, это то же самое, что и указатель, только константный (если ты сослался единожды на какой-то объект, то уже не можешь сменить место, на которое ты ссылаешься). Естественно, применение ссылок не освобождает от выстрелов в ногу.
Ссылка:
>> int a = 10; int b = 20;
>> int &x = a; // единожды взяв ссылку ты остаешься с ней навеки
>> x = b; // записывает в переменную a значение из переменной b
То же самое, только в виде указателя:
>> int a = 10; int b = 20;
>> int const x = &a;
>> x = b;
во втором примере:
>> int a = 10; int b = 20;
>> int const ЗДЕЗДОЩКА x = &a;
>> ЗВЕЗДОЩКА x = b;
Олдскул. Статья старая. Записать все что есть.
Конечно, изменить нужно, но думаю ключевая проблема не в этом
http://pastebin.com/UqdV80N7
Хуй знает, с чего ты там проиграл. Оптимизацию, естественно, не включал, потому что это бы потерло все к чертям.
> ассемблерный высер вместо пунктов стандарта
Да все знаю, как реализуются ссылки.
Вопрос в том, что с ТЗ языка это не указатели.
Ну так я и написал, что фактически, естественно, синтаксис и правила там немного другие. Различий у них, как в структуры и класса.
Пиздеть-то завязывай.
> Пробовал вставлять разные штуки в разные места
Боюсь представить что и куда ты себе вставлял.
не помогло
В ангельский тоже можно само собой, но родной язык приятнее.
то есть, то, что ты можешь выходить за границы отведённой тебе памяти тебя не коробит?
511 выделено, по 250 записано, в чем проблема?
в этом дерьме даже разбираться не хочется
Спасибо. Добра тебе!
На гитхабе проекты смотри, или еще где, там, в принципе, все понятно будет со временем. Непонятная инструкция - в мануал, вот так я разбирался. Если уже в файлы пилить (например, мне надо было qt.conf формировать), то уже в документацию, потому что там, как правило, такое не часто используется.
Ну и флаги компилятора надо бы знать.
Да у меня и в проектах компании хватает проектов на cmake, понятно, что можно смотреть всё непонятное (95%) в мануале, но можно же и поискать вариант поудобнее вкатиться. Видимо не судьба.
int main()
{
std:: cout << "Hello, world!";
return 0;
}
[/code]
Не брат ты мне, гнида черножопая
ведь совмещенные операторы имеют одинаковый приоритет и ПРАВОАССОЦИАТИВНЫ
Чему равно (2 + 2) * 2?
Посоветуйте книг\мануалов по этому поводу.
Для обработки изображений, машинного обучения и еще много чего, но, в целом, можно и без него жить.
http://doc.qt.io/qt-5/qmessagebox.html
Если я тебя правильно понял.
Например диалог yes/no будет как:
QMessageBox::question(nullptr, tr("C++ faggs"), tr("Are you fagg?"));
Не совсем то, нет. Суть в том, что мне нужно не диалоговое окно, а окно поверх основного, типа QWidget. В него уже надо запихнуть браузер через webView.
Медоты все в текстовом сегменте лежат. Если виртуальных функций нет, тогда оверхеда не будет, если есть - будет, но только на таблицу переходов.
Могу посоветовать не читать книгу из ОП-поста (Уильямса). Говно какое-то. Ни толком кода, ни хотя бы тривиальнейших задач или идей для задач — всё самому придумывать надо; никакого объяснениz о том, зачем вообще то или иное сделано, про промисы даже код не полный и не сказано, что запускать это всё нужно вручную отдельным тредом, да и нахуй они вообще нужны тоже (сначала вообще может показаться как просто лишний код: например, http://en.cppreference.com/w/cpp/thread/future просто future в одну строку, а с промисом мы сначала создаём промис, а потом достаём из него тот же future).
Про атомарные типы глава вообще тыковка: лишь спустя 17 страниц описания и использования операций над атомарными типами, принимающими упорядочение доступа к памяти (memory_order_xxx) и активного выделения этого аргумента, что тут принимает то и это, в таком-то случае такие-то виды доступа недоступны, а тут по-дефолту такой, наконец доходит до описания, что это вообще такое.
Да и в общем иногда попадаются какие-то громоздкие и корявые предложения (вот прямо как два моих предыдущих), прочитав которые в голове крутится только "что, блядь?" и желание перечитать. Не знаю, проблема ли это автора или перевода (отмажусь сразу: как ленивая мразь просто скачал по ссылке из шапки, а там русик оказался).
Впрочем, сравнить мне не с чем, может они все такие.
по идее же if(-1) должно иметь значение true
Какого выражения? У тебя не выражения после if'а, тебе даже ошибка об этом говорит.
ну в принципе ладно, я просто хотел убедиться, что if будет тру, но сейчас я и так это понял.
В разговоре об атомиках и памяти, там есть такой код - http://ideone.com/s9msQ7
И говорится, что при порядке доступа memory_order_relaxed, assertion этот может иногда и выкинуть, потому что нет никакой гарантии, что функция
void write_x_then_y(){
x.store(true, memory_order_relaxed);
y.store(true, memory_order_relaxed);
}
запишет сначала x, а потом y, вполне может и наоборот.
Заставить свой компилятор так сделать у меня ен получилось, поэтому, собственно, вопрос:
А если между записью вставить чтение x'а, то есть
x.store(true, memory_order_relaxed);
int z = x.load();
y.store(true, memory_order_relaxed);
как сделано там же в функции write_x_read_y_write_y, гарантирует ли это запись y после x'а, или и тут assert может не пройтись?
Что-то сложно тебя понять. Но если я тебя правильно понял, то тебе надо просто в своём окне сделать QWidget или QFrame, в качестве родителя запихнуть в него это своё главное окно и указать флаг setWindowFlags(Qt::Popup).
>какая библиотека нужна чтобы использовать функции strcpy и strlen
Пиздец днищевопрос от долбоёба какого-то.
Изучал std::chrono, дошло не сразу что это не то. Это не обратные отсчет, а секундомер. То есть он может посчитать промежуток только когда программа отметила конец промежутка, ну и соответственно цикл таким образом не сделаешь.
Хроно разве имеет такую возможность, лалка?
Разве отрезок имеет какую-либо другую функцию, кроме как now()?
Уже загуглил похожие советы, но спасибо огромное за ответ.
clock_gettime из time.h и CPU'шный таймер дают время вроде до наносекунд, но при этом почему-то время всё равно меняется большими шагами и реальная точность около миллисекунды получается.
Или я что-нибудь делаю не так?
> Или я что-нибудь делаю не так?
Да, ты хочешь функционала ОС реального времени от ОС общего назначения.
После принятия стандарта.
Почему когда я перегружаю оператор "круглые скобки" функцией от 1 аргумента, иногда приходится писать kek(x), а иногда kek()(x)?
Имеется декартова система координат и какая-то нарисованная функция на ней. Предположим синус х.
Нужно перейти от декартовой системы к эллиптической.
ВТФ?
Все рисуется с помощью мувту, лайнту.
Имеется формула перехода, но что-то все это запилить в плюсах не получается. Так же в наличии два аргумента posX, posY определяющие соответственно Х и У.
Собственно вопрос и заключается в том, как нарисовать элементарный график с переходом в эти координаты
Здарова, петуханы, есть sqlite3 бд, нужен орм под неё, чтоб умел классы генерировать прям по схеме бд из файлика со связями, методами и всякой малафьей. Существует такой?
Я нагуглил QxOrm, у него есть QxEntityEditor, который пидор требует лицензии за сотни долларов или там ограничение на 5 таблиц. А мне 200 таблиц нужно, пиздец короче.
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "iostream"
#include "Math.h"
#include "iomanip"
using namespace std;
int _tmain(int argc, _TCHAR argv[])
{
double b;
double x, y, z;
cout << "x=";
cin >> x ;
cout << "\n";
cout << "y=";
cin >> y ;
cout << "\n";
cout << "z=";
cin >> z;
cout << "\n";
b = 1 +( pow(z, 2) / (abs(3 - y) + (pow(z, 2) / 5))) + pow(1 / 3, (x - 5y)) + exp(2*x - y);
cout << setprecision(2) << "b=" << b;
system("Pause");
return 0;
}
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "iostream"
#include "Math.h"
#include "iomanip"
using namespace std;
int _tmain(int argc, _TCHAR argv[])
{
double b;
double x, y, z;
cout << "x=";
cin >> x ;
cout << "\n";
cout << "y=";
cin >> y ;
cout << "\n";
cout << "z=";
cin >> z;
cout << "\n";
b = 1 +( pow(z, 2) / (abs(3 - y) + (pow(z, 2) / 5))) + pow(1 / 3, (x - 5y)) + exp(2*x - y);
cout << setprecision(2) << "b=" << b;
system("Pause");
return 0;
}
нужно именно через мувту лайнту нарисовать. в этом и проблема
shift+tab не работает?
Скачал вторую из шапки книгу: Стэнли Липпман, Жози Лажойе и Барбара... - она подойдет для новичка, если я собираюсь программировать на линуксе. Могу я из-под прыщей кодить программы для виндоуса?
Точно, первый опыт хелоувордов был на в10 с вс, поэтому я не понимаю, как писать в блокноте, чтобы потом в отдельном компиляторе скомпилировать программу.
Оба варианта не работают, если что.
http://pastebin.com/9ji2LSet
К языку там лишь одна претензия, тащемта.
Вообще, вероятно, я просто рано её начал и она не для въезжающих в параллелизм. С другой стороны, там многое прямо вот с нуля и даже мне было лениво читать подробнейшие описания. Как-то под всех сразу попытались, видимо, подстроиться, чтобы читатель сам пропускал то, что сложно/известно/скучно.
Там лишь одна глава про это целенаправленно. Но там ведь и про треды всякие тоже с нуля говорится, так что я вообще не знаю, странная книга. Вообще, вроде и понятно всё, лишь практики маловато, как мне кажется.
За целую главу (~50 страниц) разбирают пример одного thread-safe стэка и и и всё. Как справочник не поиспользуешь — длинно. За одно прочтение всё это не запомнится, только какие-то отрывки (тоже полезные, разумеется) останутся. А материалов для закрепления и отрабатывания нет. Как-то так, что ли.
Где ошибка?
Статическая инициализируется при запуске программы, ЕМНИП, и, в общем, я не сделал ее нестатической.
В объявлении класса разрешается инициализировать (только char, int и им подобные целочисленные типы, в том числе и беззнаковые), но, например double или сложные типы (скажем, std::vector) запрещено.
А что мне делать если я этот класс буду инклюдом подключать? Эту инизиализацию каждый раз заново делать?
Выдели отдельный файл исходника для инициализации статических констант/переменных да и все.
>> В объявлении класса можно инициализировать литеральные типы (LiteralType), но только с constexpr или интегральные без обязательного его применения, естественно начиная с C++11, если стандарт уебищный (то, что вышло до c++11), то придется довольствоваться инициализацией только интегральных типов, как я и написал ранее.
Фикс
К слову, о плюсах constexpr
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
https://2ch.hk/pr/res/866503.html (М)
>>866368
Вроде для этого inline-переменные завезли в C++17. Чтобы можно было инициализировать их в хедере.
Подскажите, как реализовать в ней геолокацию ?
Это копия, сохраненная 6 ноября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.