Это копия, сохраненная 24 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
И нашел крутую палку
Палку вымазал говном
Получился агроном
Агроном взял в руку хуй
И ударил по компу
Напиисал он компилятор
Скажем им спасибо - ой!
Старший брат: >>749121 (OP)
Предыдущий: >>764736 (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: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
И нашел крутую палку
Палку вымазал говном
Получился агроном
Агроном взял в руку хуй
И ударил по компу
Напиисал он компилятор
Скажем им спасибо - ой!
ну или вкидывать укороченную версию и ссылку на полную.
Поздно уже голосовать. Давно всё решили
Попытался вот так подобрать, но он в конце на двух значениях зацикливается и не может точнее подобрать строку. Какие ещё варианты есть?
http://ideone.com/zyapfV
ты ведь сказал, что не можешь менять а, а теперь он у тебя char[] вместо charЗВЕЗДА.
Всё отбой. Не так понял условие. Не равно надо было, а не больше и не меньше. То есть просто вписать nan.
Чую, можно как-то через шаблоны сделать, но что мешает использовать статик каст?
http://ideone.com/7ZiMVY
Можно ли найти работу фрилансером или на удаленке? Или весь с++ - это обязательно пот, прыщи и поедание мозолей?
Можно ли разрабатывать со скоростью, сравнимой с с#, java, python?
SFINAE же.
http://pastebin.com/rMdPtG4j
Тому что ты дубина стоеросовая. abs - это C-шный abs из <cstdlib>, который работает только с интами. Тебе нужно было fabs тогда использовать. А std::abs - это перегруженная функция из стандартной библиотеки C++.
Мне интересно, что просходит с четверкой в памяти. Она сначала где-то создается и потом копируется или же адрес переменной становится адресом этой созданной четверки?
Ну если этот инт создан на куче, то передается адрес наверное.
Если на стеке, то хз, мб тоже адрес.
int abs(int x) {return x & 0x8fffffff;}
int abs(int x) {return x < 0 ? -x : x;}
Насколько первая реализация быстрее? Насколько вторая надёжней?
Поправка - 0x7fffffff вместо 0x8fffffff.
первая не очень-то и быстрая. да еще и платформо-зависимая.
компилятор может очень хорошо оптимизировать ветвление, но с битовой операцией ничего не сделает.
Да да, я просто только первое предложение прочитал
не геймсджэмы
В этом и вопрос
В таких фреймворках для С++ нет большого смысла. Главная причина - как в забивании гвоздей микроскопом. Микроскоп (С++ разработчик) дорог, обращаться с ним надо аккуратно, дешевле нанять ораву джава-макак.
На С++ ядро бэкенда пишется когда надо очень быстро. В большинстве таких случаев нужно что-то очень конкретное, для конкретного применения - которому обязательно проиграет решение универсальное, так как инженерное искусство сводится к правильному выбору плюсов и минусов тех или иных решений, и бесплатно ничего не бывает.
Таких разнообразных специальных штук в индустрии достаточно много при этом. Но обычно их на гитхабы не выкладывают, и мало кому о них наружу рассказывают. nginx - одно из приятных исключений, хотя начинался именно таким образом.
Какая именно математика? То что нужно будет ебаться с гуем я догадывался.
Тервер, статистика, функциональный анализ и чуть-чуть кибернетики. С гуем ебутся другие, не я.
>де Моргана
Откуда эта повадка называть все тавтологии высказываний законами де Моргана? Охуеть просто.
я школьник, мне можно
пикрандом
> И какие вопросы задавали вам, допустим, уровень "джуниор"?
Зачем нужен виртуальный деструктор?
а с хуя ли он за тебя должен решать, что делать?
По собственному опыту, в большинстве контор на собеседованиях дают примеры кода на листке А4 распечатанные и просят рассказать, что будет в результате их выполнения. Блять эти примеры настолько мутные, что если встретится в обычной разработке - автор данного говна подлежит мучительной смерти Как правило на наследование и тд. В одной конторе даже была классика i++ + ++i
На современном процессоре a[i++] и a[++i] будут выдавать разные результаты.
Это любому понятно.
Но один и тот же цикл можно построить и с a[i++] и с a[++i].
И скорость будет разная из-за inter-dependency - процессор во втором случае не сможет так же эффективно распараллелить инкремент и доступ к памяти по указателю.
На старом - одинаковые, потому что ни микроинструкций еще не было, ни микро-execution юнитов, ни умности процессора, который сам сейчас распараллеливает все что можно.
>>777992
Возьми померяй.
>На старом - одинаковые
ШОК!!! семантика C++ зависит от процессора, в который компилируют код!
for (int i=0;;i++){
int z = 5;
}
В момент, когда i станет равно единице и начнётся новый проход, будет ли существовать z?
Практически это ни на что не влияет, вроде бы, но интересно. (Ведь всё равно компилятор не даст использовать z до объявления, или именно потому и не даёт, что блок "новый"?)
z будет создаваться и уничтожаться каждую итерацию. В случае с интом это не страшно, но с объектами так можно делать, только если на то есть причины.
Опечатка. Имелось в виду что разницы по скорости на старых CPU не будет.
Это не ньюфаг-тред.
i++ делает инкремент и возвращает предыдущее значение.
++i делает инкремент и возвращает новое значение.
> i++ делает инкремент и возвращает предыдущее значение.
В связи с этим название языка C++ весьма доставляет.
Или каждый случай из 4 через кейс делать?
нет
У тебя несколько вариантов - использовать свитч или создать словарь "символ" - "операция". Операцию можешь сделать сам через классы или лямбды, либо использовать <functional>.
мёртвое не может умереть
Ну или так:
http://ideone.com/5MJVkM
Но с лябдами, конечно, красивше.
>>778168
А как ты собрался в скриптовых языках по-другому делать? Через exec что ли?
>Ты об этом?
>std::function<long(int)> lambda = [&](int x) -> long
>;a;navbkag'na'bn;sajb ; lambda ->
А нормальный синтаксис не завезли?
Подкиньте идей крестаны.
чат
Я хотел подрочить нижний уровень чтобы как глубже ПОНИМАТЬ многопоточность и работу с сетью как таковую.
Чтобы понимать работу с сетью читай канонического Стивенса.
Чтобы понимать многопоточность - исходники скедулеров 1:N, N:N и на закуску M:N, но это тебе рано. Почитай dz - https://habrahabr.ru/post/282037/, он конечно ебнулся со своей фантомасией, но исходники классических юникосов читал еще когда тебя не зачали и в базовых вещах разбирается хорошо, и объясняет их понятно.
Он один, Ричард W
>>778433
Если на твоем окрестном рынке труда так обстоит дело, то и выбирай джаву. На других рынках дело бывает что обстоит иначе.
Гораздо больше.
Но нельзя же так лениться.
Ты ведь сейчас попросишь ISBN, номера конкретных страниц, где скачать, и спросишь нет ли видео, а то читать скучно.
Очень хочется иногда побыть ближе к "железу" ПК, и максимально близко к работе с сетью. Взялся ещё за дискретную математику/алгоритмы/Куранта и Роббинса. В общем, хочу из обезьяны стать человеком.
Тут советовали выше Стивенса по сетям. Что скажете про Олифера - "Сети"?
Хочу что-то по архитектуре ПК, но не Таненбаума. Можно на английском. Желательно, чтобы книга дала базу, благодаря которой я смогу понимать ПРИНЦИП работы и смог самостоятельно читать и понимать, что такого в новеньком процессоре/видеокарте.
И по операционным системам реквестирую чего-нибудь.
>Считаешь все тома Illustrated и UNP за одну книжку?
Да. Т.к. читать по отдельности наверно нет смысла
А я ебу? Я не читал. Поэтом у тебя и спросил какую книгу читать
Первый уровень:
Размер указателя.
Пример наследования. Мол что и в какой последовательности сработает.
Примеры кода. Нужно дать ответ что произойдёт.
Обычно все вопросы очень простые.
Второй уровень:
Включает в себя первый.
Скорость поиска в листе, в векторе, в отсортированных. И прочее развлекалово базовыми вещами связанными с алгоритмами и структурами.
Размер структуры. Тут соль в выравнивании.
Ещё больше говнокода.
Третий уровень:
Обычно всем похуй на первые два этапа.
Может выборочно что-то спросят. Больше всего любят выравнивание.
Нечто забавное, типа алгоритма одновременного лока двух мьютексов.
Всё опирается на проекты, где участвовал и что мутил.
Какие архитектурные решения выбирал и почему.
Тебе нужен самый первый уровень.
Да и в большинстве случаев всем похуй на результаты. Если ты джун, то твоя САМАЯ сильная сторона - умение решать проблемы самому.
Жестковато - это если бы тебя послали учиться не на книжках для старшеклассников средней умности, где грубые и упрощенные модели разжеваны до максимума на понятных примерах их реализации в простых как валенок системах уровня BSD 4.3, а послали бы изучать что-нибудь стоящее и работающее в реальной жизни - например, о многозадачности посоветовали бы понять как это работает в современенном оракле - и исследовать стетоскопом потому больше туда ничем не влезешь.
>Я хотел подрочить нижний уровень чтобы как глубже ПОНИМАТЬ многопоточность и работу с сетью как таковую.
>нижний уровень
>глубже ПОНИМАТЬ
>многопоточность
А какого хуя мои программы должны делать лишнюю работу, зануляя память, только ради тебя — дауна?
Написал метод для реализации этой нехитрой задачи, но по итогам в файле остается только самый последний элемент.
В упор не вижу решения проблемы, помогите. Вот, собственно, сам метод, без дерева (там всё довольно стандартно).
https://ideone.com/FVFynY
ofstream fout(fileName, ios::app);
Да и вообще, нафига при записи каждой ноды переоткрывать файл, лол.
Я тебе открою секрет: в плюсах всё всегда инициализируется.
"Архитектура компьютера и проектирование компьютерных систем" Дэвид А. Паттерсон, Джон Л. Хеннесси
Спасибо, ознакомлюсь.
у них сейчас есть утилиты windeploy
androuddeploy
которые кладут все нужные либы рядом с твоим exe.
Так что твои опасения напрасны
статическая линковка сейчас официальна разрешена только при купленой за деньги лицензией на Qt
Не читал книжку с хабры, но если она, как написано, дополняет Паттерсона и Хеннесси то лучше ее и читай сразу. Два раза читать одно и тоже бестолку, там довольно много схемотехники.
Окей, тогда выберу что-то одно.
Ещё советуют понять:
Теорию автоматов
Электротехнику
Или это для вечных студентов-у-мамы-на-шее-сидящих?
Теорию автоматов не надо, она сцуко сложная, хотя сам конечный автомат штука простая. Теория тебе может потребоваться только для таких нишевых занятий как разработка (а не использование) тулз для верификации программ и последующего сброса фрустраций путем травли хаскелистов и иже с ними, считающих что типы на что-то годны.
Конечные автоматы надо понимать и уметь строить (когда надо) и использовать (когда надо). В TCP Illustrated с автоматом состояний TCP разберись, с использованием epoll или IOCP программок понапиши.
Электротехника нужна если что-то паять собрался - но это проще аутсорснуть. Вот иметь некоторое представление о программировании FPGA, например - это полезно.
проиницилизировал тебе за щёку, проверяй
Твоя мамка даун
Вроде, должно работать...
В с++11 больше фич, чем в обычном с++ (он же с++98 или с++03). В с++14 еще больше фич, чем в с++11, разница между с++11 и с++98 намного больше, чем между с++11 и с++14. Поэтому на твой выбор.
>Таненбаума
>Этого читать вообще не надо, ни о чем.
Поехавший? Это вообще лучшее, что есть по операционным системам.
Которая Java
Потому что читай блядь сообщения компилятора. Если не понимаешь - заноси в гуглтранслейт и читай.
Всё понял, просто, я недавно начал изучать С++, спасибо.
Субъективно - нет, не лучшее. Это можно назвать словом "классика".
Лучшее что есть по операционнам системам - купить одноплатный арм, и попробовать написать ОС самому.
>купить одноплатный арм, и попробовать написать ОС самому.
Пффф, это для слабаков. Я ядро для x86_64 писал
Ты слепой бля? Ты хоть что-то пробуешь сам сделать? Или зовёшь Сычева-компьютерщика, когда у тебя иконка скайпа с рабочего стола пропадает? Ты как работать собрался?
OTHER COMPILER OPTIONS
Хм... Написал туда -std=c++14 и заработало, я молодец. И тебе спасибо за помощь.
auto lambda = ... допустимо, если тебе не принципиально, чтобы было std::function, а подойдет любой Callable.
Потому что лямбды - сахар над классами, которые сахар над структурами, которые ... Борщ утри, короче.
auto foo() -> foo_type {..}
Зачем так выебываться, если можно foo_type foo(){...}?
Без особого труда можно на constexpr-машине сделать, чтобы внутри лямбды был известен тип, которому она присваивается. Если интересно, в понедельник могу показать в общих чертах.
Где проще найти имя функции и/или тип возвращаемого значения?
auto foo(wadjalw, dawjawd, gjgjdfklgldf) -> dawjhdahwduahwiduahwdiuawd;
auto bar(dawdgg, dfgdfgdfgdf) -> awdjdlwkaawd;
auto baz(ehuirygdfgd, sdfokspdfosf); -> wadjawdjawdawdiawddawuihdaiwdhaiuwdh;
dawjhdahwduahwiduahwdiuawd foo(wadjalw, dawjawd, gjgjdfklgldf);
awdjdlwkaawd bar(dawdgg, dfgdfgdfgdf);
wadjawdjawdawdiawddawuihdaiwdhaiuwdh baz(ehuirygdfgd, sdfokspdfosf);
В первую очередь для лямбд.
Аргументация строится на том, что, мол, придется вызывать конструктор родителя. И в чем проблема? Что на джаве, что на пхп это нормальная практика.
Например, что плохого в:
class A
{
int a, b;
public:
A(int a, int b) : a(a), b(b) {}
virtual void f() = 0;
};
class B : public A
{
int c, d;
public:
B(int a, int b, int c, int d) : A(a, b), c(c), d(d) {}
};
class C : public B
{
public:
C(int a, int b, int c, int d) : B(a, b, c, d) {}
void f() {}
};
Аргументация строится на том, что, мол, придется вызывать конструктор родителя. И в чем проблема? Что на джаве, что на пхп это нормальная практика.
Например, что плохого в:
class A
{
int a, b;
public:
A(int a, int b) : a(a), b(b) {}
virtual void f() = 0;
};
class B : public A
{
int c, d;
public:
B(int a, int b, int c, int d) : A(a, b), c(c), d(d) {}
};
class C : public B
{
public:
C(int a, int b, int c, int d) : B(a, b, c, d) {}
void f() {}
};
1) В том, что тебе придётся вызывать всю эту иерархию. В жавах/пхп тормозов и без того хватает.
2) Как думаешь, почему абстрактные классы так же называют интерфейсами? Потому что это затычка с методами, не больше.
Если тебе похуй на это и вопрос о перформансе до миллисекунд не стоит – пиши так, чо.
class Class{
friend foo(){}
}
friend foo();
1) Зачем вообще есть возможность определять функцию не член в пределах определения класса?
2) Почему это я должен еще и объявлять её в outer scope?
3) Почему в этом языке повсюду вот такой пиздец?
Что за шрифт?
И велосипедить давно известные алгоритмы.
>>779750
http://en.cppreference.com/w/cpp/container/vector/push_back
If the new size() is greater than capacity() then all iterators and references (including the past-the-end iterator) are invalidated. Otherwise only the past-the-end iterator is invalidated.
Кто не советует? Что за дичь. Стандартная практика при наследовании реализации.
И что? Ни на один вопрос этот ответ не отвечает
Некоторые контейнеры под свои элементы выделяют память. Если такому не хватает чтоб запихнуть значение, то он старую удаляет, и выделяет новый участок, побольше раза в два. Новый участок может располагаться совсем в другом месте.
Пытаюсь рисовать кое-что на Qt, наследуюсь от QGraphicsView, делаю override paintEvent, вызываю в нем paintEvent базового класса и кое-что свое.
Проблема в том, что paintEvent вызывется, но то, что в нем написано не рисуется. Точнее рисуется, но при каких-то очень конкретных случаях.
Может ли CodeLite автокомплитить названия хедеров?
И как сделать так, чтобы обычный автокомплит работал не через раз?
Вроде норм ИДЕ, но автокомплит из коробки там пиздец.
>И как сделать так, чтобы обычный автокомплит работал не через раз?
Взять нормальную IDE/прописать пути хидеров руками если есть такая возможность.
В факе isocpp прямо в самом начале поясняется, что они имеют в виду под "something is evil".
Не знаю где ты тут
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-abstract
увидел "что-то злое". Просто есть рекомендация не стрелять себе по ногам от создателей языка – не стоит просто так класть на это хуй.
1. Самое очевидное применение - когда тебе нужно, скажем, реализовать +, чтобы было можно писать и mamka+1, и 1+mamka. Ты не можешь сделать operator+ встроенным, потому что тогда левым операндом будет допустима только мамка. Если определишь снаружи, то увеличится связанность - хуй пойми кто, не имеющий отношения к мамке, сможет вызвать твой оператор, а когда ты поменяешь что-нибудь в мамке, то ты можешь забыть изменить и этот оператор, ибо его текст где-то в другом месте и без ссылок на мамок в общем случае. Делая friend-определение, ты убиваешь сразу двух зайцев: текст твоего стороннего оператора фактически все равно внутри класса, а вызвать его можно только через поиск Кенига, когда один из аргументов будет мамкой, поэтому он не сможет вступить в конфликт с какими-то другими операторами (особенно актуально для шаблонов). Есть и другие сценарии, например, гугли "неконстантные константные выражения".
2. Ты не должен объявлять, она сама неявно объявится, но найдется только через поиск Кенига. Если тебе понадобилось ее объявить, то тебе и не нужно friend-определение тогда, ибо ты все профиты потеряешь.
3. Потому что тебе дали вместо молотка ящик с инструментами, и ты платишь необходимостью изучать сценарии их использования за гибкость.
http://pastebin.com/c2L6bnit
Правильно ли я понимаю, что <iostream> - это фактически хедер к библиотеке? И нужно еще как-то подключить уже скомпилированную библиотеку?
Алсо, хочу отладчик высокого уровня с возможностью смотреть в ассемблер. Есть такое под винду?
С сорцами, но vs глючит так, как я описал. Некорректно отображает значения переменных, показывает не все локальные переменные.
Пишет fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory
Погуглил - говорят баг студии, неправильные пути.
За что этим уебкам только платят по 150к$.
Нет, конечно.
Проблема не только у меня. В студийном батнике определены неправильные пути к ucrt (C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt\).
Сейчас буду думать как менее костыльно пофиксить.
Еще ставил ее 8 часов с тремя ребутами. 2 раза делал repair, сукпздц.
С рутрекера оригинальный msdn-образ прошки с зашитым ключом.
После установки вылезла ошибка, что не получилось накатить Update 2. Полез на оф. сайт, попробовал iso- и web-версии, делал repair. Кое-как до рабочего состояния довел. В общем, наебался знатно.
Когда гуглил ошибки, ебанаты с саппорта советовали "ставить на чистую систему", лел. То есть я должен переустановить винду, чтобы поставить ide?
По сравнению с JetBrains IDEA, которая ставится за 3 минуты и работает идеально, это просто ад. Пожелал рака жопы детям разработчиков.
Попробуй снести текущую среду и дотнет, а потом установить официальную комюнити 2015, все должно работать если ты совсем не ушатал все. На крайний случай можешь обмазатся Embarcadero Rad хуемое
Ты какое-то тупое уёбище, качаешь IDE, ставшую бесплатной (платная только для крупных ынтерпрайзов и отличается интеграцией с йоба-сервисами мса) и ещё жалуешься на хуёвую работу. Почему я использую её начиная с 2008-й версии и не разу не ебался с установкой?
Криворукий наверн.
Еще часов 5 тратить просто нереально.
Плюс я уже нашел решение. В макросах прописана версия ucrt 10240, а у меня стоит 10150. Попробую обновиться.
В чем твоя охуительность? Что прожал несколько кнопок? Я тоже их прожал и получил пердольку. Тут чисто везение.
>То есть я должен переустановить винду, чтобы поставить ide?
Да. Это спермоособенности разработки. Советую удалить все компоненты .net из систему, все c++ redistributable и попробовать снова. Все кто хвалят установщик студии итт спермохлебы.
enjoy your c++
Пытаюсь найти баг, кстати, уже третий день. Самое худшее то, что спросить некого - никакой психически здоровый человек не будет дебажить мой проект за просто так.
git bisect по идее пойдет.
То есть берешь половину нового кода, смотришь, есть ли баг. И так далее.
>Скопировал весь код в новый проект. Заработало. Ахуенно, да?
Это называется "криво собранно". Чаще делай clean.
10 раз clean делал и пересобирал.
хочу подписать/портировать на цпп под андройд свои ништяки.
слышал о ндк. и это все что я о ней слышал дайт гайд по еклипсу как отстроить его в андроидцпп или основы работы с ндк за 15 минут.
Я нуб, но в задаче это требуется.
>>781010
Ну, с таким я еще не сталкивался. Потом тогда сделаю.
У меня была только 1 мысль - в стринги писать числа, а потом сравнивать их. Но тут двузначные числа уже не подойдут, поэтому пока отброшу эту задачку.
Я разрешаю, линкуй. Ток мамке не говори.
Собери дебаг версию даун
clan/g++++++ -S -c your_shit.cpp ?
а ты оптимизации вырубал? если нет, то катись-вырубай
Перегрузка на самом деле очень легкая концепция. Попробуй посмотреть пример, сразу все поймешь.
>очень легкая концепция
template <typename T> void f (T);
template <> void f <int> (int);
void f (int);
void f (signed);
void f (const int);
void f (int) noexcept;
[[deprecated]] void f (int);
Одно только разъяснение нубу, как и почему будет разрешаться для этих объявлений перегрузка f (1), займет несколько дней. И это только самое очевидное.
>> возвращает ссылку на cin, а ссылочный тип не может быть использован в condition, так как не существует нулевой ссылки.
Но код почему-то работает. Где здесь подвох?
Точнее нихуя не так.
Возвращается istream, который потом конвертится в bool. Как он это делает, написано, например, тут:
http://www.cplusplus.com/reference/ios/ios/operator_bool/
Функция bool вызывается ватоматически в bool контекстах?
Ну while понимает только булевы, поэтому и приводит выражение в скобках к bool автоматически, да.
Да, точно.
Блять, как мне это надоело. Пишешь такой код, а тут тебе при компилции деляют вызов на функцию, о которой ты ничего не знаешь.
Это просто пиздец, где эта ваша программист сам всем управляет, вот тебе ящик вместо инструментов, а, пидоры?
Блять как же у меня жопу рвет от этого
В смысле? А как ты собираешься привести объект к bool без помощи явно указанного оператора? По-моему, все очевидно. Если ты не знаешь фишки языка, то это уже твои проблемы. Иди пиши на брейнфаке, там все предельно ясно.
Нет, не очевидно. Надо убрать в принципе все случаи неявной хуйни, пусть java этим занимается. Если не знать о таких случаях, то как дебажить вот это?
Это не неявная хуйня, а как раз-таки наоборот. Если у тебя не определен оператор перевода в bool, то компилятор выдаст ошибку.
Я прочитал Страуструпа в свое время на каникулах примерно за две недели. Но тогда я был не совсем нуб уже, так что, вероятно, нужно исходить примерно из месяца. А без нормального знания ангельского и того больше, ибо русское издание есть дрисня, которую невозможно читать.
Да ты охуел, что ты несешь вообще?
>>781532
Не во всех. Есть несколько явно описанных контекстов (условия циклов и if, static_assert и еще что-то), в которых происходит т.н. контекстуальное преобразование в bool. Оно легально даже если ты сделаешь explicit оператор преобразования, ибо формализуется так: если корректно написать bool foo (выражение), то конверсия из выражения нормально пройдет, с соответствующим результатом. Сделано такое для удобства - когда ты пишешь выражение в условии, то никакой арифметики рядом нет, поэтому запутаться трудно и неявность только помогает.
Ну тогда первым делом иди менять a+b на ::operator+ (::a,::b); а то вдруг компилятор не угадает, лол.
Блжад, так жмет срок, что >завтра встречается чаще чем стоило бы.
Спасибо, сойдет.
зачем у параметров ::?
Во, идеально
Добавь сюда type promotion и narrowing и настанет "enjoy your cpp". Вообще, это дрисня на мой взгляд. Надо добавить ключ компилятора, который нахуй отключает всю эту overloading resolution поеботу, оставляя только exact match rule. Все равно в реальном коде этой "удобной" сранью никто не пользуется. По-хорошему еще и implicit type convertion нужно выпилить целиком нахуй, оставив только bool contexted
Qt без его покупки позволяет собрать в динамические библиотеки не весь код, а только используемые классы и их зависимости? Если да, то как? Ну, чтобы helloworld не весил мегабайты.
И другой вопрос: с C++ вообще реально устроиться на удаленку/во фриланс, пойти там в какую-нибудь компанию писать энтерпрайзный код, бэкенд к каким-нибудь современным веб-приложениям, еще чему-то такому? Или какие перспективы вообще?
http://doc.qt.io/qt-5/build-sources.html - вся информация что и как собирать, однако насколько я помню ещё в 4-й куте меньше 4 мб даже вырезав всё получить было нельзя.
Алсо, есть различные компрессоры/пакеры.
Можно, но только если у тебя есть хороший опыт – это обязательно в любой удалёнке, тем более в плюсах.
Фриланс – нет. Хотя изредка на апворке бывают заказы на гуйню, но едва ли так можно более менее зарабатывать.
Перспективы – хайлоад, различный риалтайм (вроде игрушек и компуктерного зрения), низкоуровенные библиотеки, иногда десктоп и, конечно же, поддержка легаси вот уж где работа никогда не закончится.
У плюсов есть две главные библиотеки – буст с костылями языка и кучей неведомой хуйни и Qt на все случаи жизни.
Такое дело, я студент-инженер, специальность: "электроника и автоматика физических установок".
У нас на первом курсе был С и С++, с достаточно слабыми лекциями и зачеты просто так проставили. Вот сейчас я понял, что если что и знал по С++, то забыл.
Но зато впереди есть 2 летних месяца и у меня возникла идея подучить кресты, точнее я выбираю как бы продуктивнее провести время. По специальности, как я понял, я буду сталкиваться с микроконтроллерами, электронными схемами, если честно не особо представляю суть работы.
Собственно вопрос, насколько инженеру-электронщику актуален С++, на каком уровне желательно его знать, на что стоит обратить внимание? Понимаю, что речь не идет о том, чтобы стать нормальным программистом за 2 месяца, только выучить основы для дальнейшего развития. Может имеет смысл ограничиться языком С или посмотреть в сторону питона, скажем?
в HFT активно берут на удаленку. и даже парт тайм. так что можно в несколько контор устроиться. но там требуют очень хороший уровень + знания трейдинга
в электротехе с++ ограничено применим. лучше уж си. питон вообще для пердоликов с адруиной
Тащемта, это легко сделать. Пишешь шаблонную обертку, перегружаешь все операторы строго для однотипных операндов, преобразования не реализуешь. И заменяешь везде int на Wrapper <int> etc. Из-за инлайновости никакой деградации не будет, текста прибавится ровно на джва символа для каждого литерала, если использовать auto и пользовательские литералы, которые по 1_w будут генерировать такие обертки.
Мне кажется, что clang форкнуть будет не намного сложнее.
Допустим, есть поток CheckDataFromServer, который регулярно обновляет веб-страницу, пока она не даст мне нужную информацию.
Если 30 секунд никакой информации не выдаётся, прекратить работу потока. При этом основной поток останавливать нельзя.
Насколько нормально создавать отдельный поток-супервизор, который будет ждать эти 30 секунд? Есть ли тактика получше?
std::thread не предлагать, ибо Visual Studio 2010 и C++11 тут поддерживается лишь частично.
Нормально, если ожидание сделано нормальным, неактивным, а не через while (!readData()).
Я же скинул пасту. Через WaitForSingleObject, вызванного из потока-супервизора.
Я не силен в WinApi, но рискну предположить, что специально заточенный под ожидание вызов оптимизирован до минимизации фоновой нагрузки на этот поток. Так что норм, по идее.
boost::boost
Не могу считать символ с клавиатуры. Необходимо считать нажатие управляющих клавиш, а именно стрелочек.
int a = 0;
a = getch();
cout << a;
Раньше давно, я так и делал и получал 72, 75, 77 и 80. Сейчас же мне MSVS 2010 выводит 244 для всех четырех стрелочек?
ЧЯДНТ?
Стандарт не гарантирует, что стрелочки и прочая хуйня влезут в char, они не из базового набора. Поэтому ты получаешь implementation defined работу с консолью, и студия не обязана, вообще говоря, даже сохранять поведение в разных версиях, не говоря уже о совместимости с *nix.
Прочел что
"При чтении функциональной клавиши или клавиши со стрелкой каждая функция должна вызываться дважды"
Видимо в этом и загвоздка. Вопрос, как мне быть в данном случае?
#define IsKeyPressed(KeyCode) (GetAsyncKeyState(KeyCode) & 0x8000)
bool IsLeftPressed()
{
return IsKeyPressed(VK_LEFT);
}
bool IsRightPressed()
{
return IsKeyPressed(VK_RIGHT);
}
Ну ты понял.
Это лишь функции для опроса клавиатуры, в консольком тоже будут работать.
Всё, что тебе нужно знать - это коды клавиш https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx и функцию GetAsyncKeyState() https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx .
Пример, чтоб у вас появилось представление о чем я говорю:
example.dat
2016 : 6 : 28
-тут
-много
-текста
2016 : 6 : 28
-тут
-тоже
Что мешает хранить в том же или соседнем файле инфу о записях?
> считывать текстовые данные из файла. fstream ведь не подойдет, да?
Братишка, нахуй тебе этот пердолинг, если в Qt есть sqlite?
что-то я не подумал про базы данных
бамп, аноны, как поставить? удалил 2013ю, хочу 2015ю, но тут такая ерунда, в гугле ничего подобного не заметил
Разве что если хочешь бесцельно вымазываться шаблонами ради шаблонов. В остальных ситуациях любая из перечисленных тобой книжек даёт знния для 99% жизненных случаев.
Александреска в том числе?
Хочу блять наконец-то не только понимать как работают enable_if и прочая муть, а и понимать, когда это полезно использовать. Чтобы метапрограммирование и SFINAE не были для меня умными словами из википедии.
Бля, ну в шапке же все написано. Вандевурд-Джоссатис - для понимания механизма и обхода подводных камней. Александреску - для применения в проектировании. Абрахамс-Гуртовой - для метапрограммирования.
Хули вы отвечаете дебилам, которые не могут установить студию. Лучше помогите мне.
> Visual Studio 2010
allo, yoba, privet
https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx
> Любишь бэкдоры?
а как будто семёрка не дырявая? и как будто вместе с обновлениями для неё нельзя притащить всё тоже самое говно, что есть на десятке? лоллирую просто с тебя
> и как будто вместе с обновлениями для неё нельзя притащить всё тоже самое говно, что есть на десятке?
У даунов с автоматической установкой обновлений - можно. Остальные смотрят описание обновлений в MSDN и выбирают, что ставить.
А кого ебут потенциальные возможности? Факт, что десятка была уличена в посылании телеметрии, а с семеркой прецедентов не было. Если будут - придется валить и с нее, а пока выбор для меня очевиден. Алсо, телеметрия это еще хуйня, а вот та же пиратская студия на десятке может внезапно выпилиться вместе с игорами, в рамках борьбы с пиратством.
Телеметрия в семерке есть, но легко отключается, достаточно удалить/не останавливать лишь несколько обновлений:
https://blog.kplus.pro/adm/windows-7-8-disable-telemetry.html
Посоны, оффтоп же. Тем более, с точки зрения c++ *nix куда как лучше.
Там есть визуальная среда разработки, как в Borland Builder(возможность размещать кнопочки, поля ввода, итд)?
И есть ли там возможность писать программы с эффектами(как например в ворде 13, там все плавно переходит)? А то в Builderе UI получается грубоватый и без всяких красивых эффектов, которые есть в современных программах.
Плагины только для полной версии, не? И еще что-то было, типа code coverage. Так-то я никогда бесплатной не пользовался, у меня честная Enterprise.
Какой пафосный и самолюбивый скриптеныш, лол.
Видимо, это переиграли в 2015, да.
гугли макса шлее
Ну а автоматика, там же по-любому программировать на чем то надо? Или расчет в matlab-е, а потом на типовых элементах собирать схему?
>>782631
Nemnozko
Потому что память не забивается тут же нулями, а просто помечается как свободная.
Ты не понял вопроса. Я спрашиваю не "почему я не могу", а "ЗА ЧТО, СУКА!"
Почему бы не запретить это компулятором? Просто это не безопасно, лезть в память, которая уже свободна.
Я себе пару раз стрельнул в ногу.
Сейчас хочу определиться с библиотекой(ми).
Думаю о DirectSound. Что можете о ней сказать?
В общем прошу советов и чтива на лето по этой теме.
А как же распечатать шпоры в последнюю ночь перед экзаменом? В нас пропал дух авантюризма!
Печатать? да ну. ток вручную. хоть запоминаешь
Разрешаю тебе пойти в десятый класс.
Конечно :)
Как там, "на pythone можно написать нейронную сеть, а на с++ можно написать python". Другой вопрос - зачем.
Методы не привязаны к объекту, ало.
сначала нужен парсер, который будет определять что вообще пользователь пишет. на этом моменте проектируешь синтаксис языка.
потом компилятор/интерпритатор, который пропарсенный код будет переводить в инструкции для процессора/промежуточный байт-код. тут вообще пиздец. простой компилятор ты может и напишешь, но на то, чтобы написать хороший компилятор, который по качеству сравниться с clang-ом, у тебя уйдет уйма времени.
>но на то, чтобы написать хороший компилятор, который по качеству сравниться с clang-ом, у тебя уйдет уйма времени
Если ты знаешь асм и есть опыт, то транслятор из ssa с оптимизациями вроде DCE, CSE можно написать за пару месяцев. Это уже будет около O1 по скорости.
Без проблем. Это очень просто, на самом деле. Бери forth - это очень минималистичный стековый язык. Простой интерпретатор напишешь за неделю, если вообще без опыта. Если хочешь писать компилятор - бери llvm. Там все несложно, при этом получишь быстрый нативный код со всеми оптимизациями и минимумом усилий.
Не понял, я не тот чувак, которому ты отвечал, объясни. Я думал системы есть х32 и х64? Соотв. указатели имеют по 32 и 64 бита размеры. Что за х86? Объясни дауну, пожалуйста.
А еще всегда можно узнать размер указателя вот так:
type *p;
int x = sizeof p;
Я прав?
Объясни порядок действий i++ + ++i, как это будет выполняться вообще, пожалуйста.
а вопрос еще: какой области видимости будет принадлежать i, если я его запишу так:
{
/ внешний блок/
for (int i = 0; i<10;i++)
{
/внутренний блок/
}
}
Я вроде писал такой примерчик, скорее ответ будет такой: переменная i будет видна только во внутреннем блоке, однако, почему так происходит? В K&R говорится, что цикл for (int i = 0; i<10;i++) эквивалентен такому циклу
int i = 0;
while (i<10)
{
/инструкции/
i++
}
тогда получается, что переменная должна быть видна и во внешнем блоке. Пожалуйста, помогите разобраться
Спасибо х2, ответил на 2 моих вопроса.
Еще хотел спросить, как лучше прохавать си и си++, я читал книжки и т. д., но сам понимаешь, после них остается много пробелов. Читать стандарт? Есть ли он на русском? Если нет, где мне его взять хотя бы на иглише?
В Си Кернигана и Ричи может и аналог. Но в плюсах в цикле for (int i = 0; i<10;i++) i будет видна только в самом теле цикла.
В Си вообще нельзя объявлять переменную в инициализаторе цикла (по крайней мере, в C89). Т.о. ты там можешь писать только первый вариант. В крестах второй вариант эквивалентен первому с дополнительным наружным блоком (не считая мелких нюансов с break и continue) - {int x = 1; for (...) {...}}.
Вызывать статические методы безопасно, ибо им вообще не нужен объект. Вызывать нестатические методы небезопасно, но нет способа быстро проверить в рантайме, указывает ли ptr на валидный объект, когда ты пишешь ptr->tvoyaMamka (). Представь, сейчас у тебя нет оверхеда, хранится 4 байта с указателем, и от тебя требуется лишь немного внимательности (или использование unique_ptr, где такой проблемы вообще нет). Если пытаться контролировать корректность, на каждый указатель будет дохуя дополнительных данных, а на каждое разыменование - куча проверок, вместо одной инструкции станет, например, тысяча. В быстром языке это неприемлемо.
Второй вариант <-> первый вариант.
Лень ждать пока ты спросишь почему поэтому щас объясню. На этапе компиляции это сделать нельзя т.к. выделение и удаление памяти происходит во время работы программы. Значит это можно делать только с помощью сборщика мусора и компилятор не может этого запретить.
Что объяснять-то? Ты о вещах вроде ARC и концепции растовских лайфтаймов хоть слышал, дурашка? Нахуй ты пишешь что-то о расте, когда у тебя о нём представление уровня "ну эт такая хуитка хз чо ваще делает"?
Спасибо, понял тебя
МОДУЛИ
Ну-ка, в чем выражается гибкость C++, в отличие от других языков? Приведи пример
Поясните, что такое LLVM и зачем он нужен? Почему нельзя просто пользоваться обычным компилятором/линковщиком?
>Поясните, что такое LLVM и зачем он нужен? Почему нельзя просто пользоваться обычным компилятором/линковщиком?
Посоны, что такое внедорожник? Почему нельзя просто ездить на обычном фордфокусе/велосипеде?
Стоит ли использовать qt quick в проекте? Если да, то какие от этого будут плюшки?
b = a
c = b + length(b)
d = c + length(c)
https://ru.wikipedia.org/wiki/New_(C++)#Placement_new
Храни в векторе указатели на родителя.
Маллок не настолько медленный, чтобы экономить на такой хуйне.
>А какое отношение ARC к компиляции-то имеет?
ARC проставляет изменение счетчиков ссылок во время компиляции?
>Очевидно, как в расте
Раст не запрещает тебе произвольно лазать по памяти внутри unsafe, так же как С++ не заставляет тебя использовать сырые указатели вместо автоматических. Не можешь организовать работу с памятью вручную - используй автоматические средства.
Наверно то, что он считает ссылки во время компиляции?
>>784064
Зато он ткнёт тебя носом вне ансейфа в это место, что и хотел тот антоша, и его модель памяти не несёт оверхеда в отличие от смартпоинтеров.
>и его модель памяти не несёт оверхеда
Она несет оверхед в виде затраченного времени программиста.
Забухай
лабы в универе(реализация всяких алгоритмов в основном,пара проектов - типо натягивания выпуклых оболочек),использовал лишь стандартные библиотеки.
Короче - уровень бомжа со знанием каких-то основ.
Не зашквар. Главное в обработчиках кнопок не пиши основной код и называй кнопки нормально.
>>783930
QML нужен, если хочешь быстро нарисовать сложный плоский интерфейс. Есть биндинги. Любой объект можно расширять дополнительными данными прямо в коде. А сложную логику можешь писать на с++, связав QML и C++.
Имхо, тогда лучше поучиться на практике. Сделай либо как можно больше тривиальных задач, либо несколько средних/сложных с пика, например.
По книге тоже нормально. Есть "Tour of C++" Страуструпа. Там как раз беглый осмотр всего языка.
Тонкости языка - "The C++ Programming Language" того же Страуструпа. Только ищи 4th edition.
ухххх гора с плеч
сложно? строить предложения уже можешь? понимать японскую речь без переводчика?
Японскую речь без переводчика не могу,есть узнавание некоторых фраз,простые предложения могу строить,в стиле- "я люблю бухать,как дойти до ближайшего ларька". около 130 иероглифов знаю, это где-то уровень 2го-3го класса ихней школы. Зимой поеду экзамены сдавать. Много лулзов в языке.
Тоже учу иероглифы, только корейские. Хочу туда в универ, когда с колледжа корку заберу.
Эх, поехал бы в Японию, если бы деньги были. Удачи тебе, хули.
Тоже удачи.
Ты наверное про Китай. В Корее все нормально вроде.
В данном контексте - в возможности вручную управлять памятью.
Оче редки. Тут не жаба же. К тому же weak_ptr.
При нормальной архитектуре не бывает. Достаточно соблюдать правило единственного владельца и следить, чтобы его время жизни было шире, чем у юзеров.
RAII работает как анус твоей мамаши держит говно – при любом исключении и пр. говно течёт.
Смартпоинтеры тяжелее unique_ptr в области где применяются плюсы – смишно.
>>784432
>соблюдать
Этим всё сказано. Либо у тебя компилятор-фашыст, либо ты будешь батрачить как коммунист если какая-то мелочь вылетит из головы.
Ну, все правильно. Элитариям, способным запомнить пару правил - кресты, необучаемым макакам - языки с анальными ограничениями.
>К чему стадам дары свободы?
>Их должно резать или стричь
Ну мань, мы уже поняли что ты нихуя в жизни не написал, у тебя не бывает легаси/сторонних библиотек с исп. исключениями и самрое главное – код всегда идеален – ты же круче робота и никогда даже ни на что не отвлекаешься (не забываешь разыменовать указатель добавив звёздочку, отвечая комраду например).
>забываешь разыменовать указатель
И компилятор такой вместо того, чтобы сообщить о несоответствии типов, злорадно отправляет отчет парням из WG21, те бросают обсуждение нового стандарта, летят через полмира, врываются в твою сычевальню и долго ебут тебя в сраку?
Щас подорву: в крестах не настолько фошистская система типов, и такая хуйня бывает (напр. xyu='a' прекрасно скомпилируется).
Мы плавно перешли от методов управления памятью и ЭЛИТАРИЕВ, которые никогда не ошибаются, к разговорам о хуйне вроде твоей мамки.
Залей на пастебин, а я популярно объясню, почему такого не бывает в нормальном коде.
Лучше объясни как же так вообще появляются ошибки вроде переполнения буфера или утечек – ведь кресты осиливают только высокородные иллитарии.
Потому что их специально и очень тщательно ищут. То, что раст дает тебе некоторую гарантию внутренней непротиворечивости программы, не означает, что она не развалится от специально подобранных невалидных данных.
Сравнительные примеры в студию, а то ты уже заебал своим нытьем на тему того, какой rust охуенный, а c++ - нет
Так я и не ною, а отвечаю на твою тупость.
>Он мне даёт даёт гарантии
Ну круто. Ада тоже неплоха в этом плане. Но если ты браузер не пишешь, и твое хобби не медитация над выхлопом тайпчекера за тарелочкой борща, то тебе в общем похуй на 100% корректность, главное чтобы падало не чаще некоторого предела. Чего очень легко добиться имеющимися инструментами вроде валгринда и линтеров. В расте лично мне гораздо интереснее нормальные макросы, чем линейные типы.
У меня за джва года с прикрученным vld не было ни одной утечки. А переполнения буфера не было вообще никогда, по той простой причине, что в крестах никто не велосипедит фиксированные буферы. Можешь включать врети-режим.
Не увидел там ничего, кроме традиционной для мамкиных евангелистов борьбы с мельницами. Берется какая-то фича языка, показывается, как ее можно использовать неправильно, затем показывается, как можно сделать в рекламируемом языке то же самое лучше. А пацаны-то не знали! Самое вкусное начинается, когда встречаются джва евангелиста и начинают кормить говном друг друга при помощи этой тактики.
2. Где взять код, который за меня решит какой контейнер использовать в различных ситуациях?
3. Чем отличается value и default initialization?
4. Почему в STL нет контейнеров типа деревьев?
>Поясните, зачем нужен std::deque, если есть другие контейнеры, например std::vector
Дек сохраняет указатели на элементы после ресайза, вектор - нет. Правда с учетом того, что размер бакета там неизменен с 80-х, порядка десятков байт, проще запилить свой дек, который будет забирать память страницами.
А разве не предусмотрено изменения гранулярности (с помощью аллокатора или еще чего)?
1) Там где нужен такой формат данных;
2) Нигде. Нахуй ты такому коду вообще нужен был бы? Где-то были пикчи с алгоритмом выбора контейнера, поищи;
3) Перевести попробуй;
4) Есть.
>>784712
Так ты, вась, нихуя похоже не понел. Суть даже не в том, что именно этот код падает, а в том, сколько нужно знать о костылях языка чтобы написать даже такую банальщину без сегфолта.
>Правда с учетом того, что размер бакета там неизменен с 80-х, порядка десятков байт, проще запилить свой дек, который будет забирать память страницами
Мать, ты чего? Да одних реализаций stdlib существует под 5 штук и чо, везде так, ты думаешь? Нихуя.
предусмотрено, просто он дичь гонит.
https://github.com/llvm-mirror/libcxx/blob/master/include/deque
1. По факту есть три неуправляемых (т.е. не в виде сложных структур типа RB-trees) контейнера - vector (быстрый доступ, медленное добавление), list (медленный доступ, быстрое добавление) и deque (фактически list из нескольких vector, средний по обоим пунктам). Все остальные контейнеры - либо обертки над ними (queue, stack), либо небольшие модификации (forward_list). Добавление нужно в среднем реже, чем доступ, поэтому vector рекомендуется по дефолту, но есть места, где deque лучше (например, тот же queue, для которого vector вообще не годится из-за добавления в начало, а list плох, вероятно, из-за недружелюбности по кэшу, ибо часто в очередь добавляют и забирают элементы сразу пачками).
2. https://habrahabr.ru/company/infopulse/blog/194726/ . Код будет, когда к компилятору прикрутят полноценный AI, лол.
3. Основные отличия синтаксические, связанные с неоднозначностью парсинга объявлений функций и определений переменных с инициализаторами (про это в стандарте написано очень хорошо, в пунктах 8.2 и 6.8). С точки зрения использования - для пользовательских классов разницы нет, для встроенных типов default оставит переменную неинициализированной, но только если она имеет не static duration (включая thread_local). Неинициализированную нельзя читать до первой записи, если не хочешь получить UB.
4. Стандарт не регламентирует реализацию контейнеров, только интерфейс и алгоритмическую сложность методов. По факту деревьями реализуются все ..._set и ..._map. Прямой интерфейс дерева (x.left (), x.right ()...) слишком низкоуровневый для STL, обычно ты все равно пишешь обертку, чтобы оно балансировалось автоматически.
Если не прочитать инструкцию по использованию бензопилы, можно взять ее неправильным хватом и отпилить себе голову. Поэтому мы будем валить лес затупленной ножовкой, это точно безопасно.
В этом треде лес валят костылями, апгрейд до тупого топора не так уж и плох.
в deque есть push_front.
vector ГАРАНТИРОВАННО распологает элементы последовательно в памяти. То есть он может использоваться массив.
deque НЕ ГАРАНТИРУЕТ последовательное расположение в памяти. Так же deque распологает элементы блоками.
Вот бенчмарк вектора, деки и листа:
http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html
из матлаба конвертируешь в с/с++ код и радуешься. все так делают
привет с++ господа,
к вам небольшой вопрос.
поделитесь каким нибудь мануалом, чтобы с опытом 2 года java вкатиться в плюсы.
2 года java это всмысле 2 года работы
>разницу между языками
Так нет таких книг. А если будешь учить по другому, то пропустишь что-то важное.
>90% знаю
Попробуй cppquiz из конца шапки, маня. Для джаваблядка даже 9% правильных ответов будет подвигом.
Выбрал я для него win32API в MS Visual C++. Но столкнулся с несколькими проблемами, как их решить?
1) Показ поверх окна игры в полноэкранном режиме.
[code]SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);[/code]
Помогает лишь с приложениями неполноэкранных. При заходе в игру - скрывается под ней. Как исправить? (чтобы в этом плане как окна Steam)
Это прямо звиздец как надо, иначе от приложения никакого профита не будет. Мб как-то привязать к конкретной игре можно? (джов мод там все дела)
=========
2) Собственно, как можно "вылавливать" информацию из онлайн игры программно?
Например, если я хочу, чтобы здоровье персонажа отображалось в моём приложении
Мейерса читай. Там как раз тонкости описаны, без разливания воды для нубасов. Лично мне хватило википедии и Мейерса, чтобы вкатиться.
Александреску еще посмотри, чтобы типовые паттерны шаблонной магии знать.
Страуструп "Tour of C++".
Можно наверное было бы выделить память и перемещаться по ней используя адресную арифметику и приведения к другим типам. Или это зашквар? Есть способы лучше?
universal hashing так и не завезли, падлы.
> 2017
> алгоритмы хеширования намертво прибиты к типам
Это пиздец!
>куда указывает структура хранился не указатель на массив
Так всегда если не используешь new
http://ideone.com/b0S3Yy
>>785268
>>785292
Так это всё подтверждение слов крестофанатика выше: другие языки не нужны. Можно толочь говно костылями, проходить cppquiz в лучшем случае на 10% и сидеть пиздеть что кресты – единственный нужный язык.
> А что вы скажете о темплейтах, а точнее даже о частом использовании оверлоадинга, всех этих "специализаций", плюс наличии ещё и нетемплейтных вариантов и т.д.?
Ну а как ты будешь делать какие-то структуры данных без темплейтов?
Да ты шутник.
При отладке функции между #ifdef __linux || __linux__ и #endif не выполняются.
Для ниши кроссплатформенного низкоуровневого языка с кучей либ на все случаи жизни и компиляторами подо все, что способно запускать код.
Я видел переписанный Квейк на JS.
Значит ли это, что нужно бросать С++ и писать на JS?
Может новый Дум, например, написан на Паскале?
Играл в хеджворс на компьютере с гигом оперативки и целерон д на 2 ГГц? Я пробовал, получается хуёво.
Для любого реалтайм/хуйлоад софта и пр. замена уже давно есть, компилятор под все платформы не беда - ллвм поможет.
>Для любого реалтайм/хуйлоад софта и пр. замена уже давно есть
Почему же ее не используют?
>компилятор под все платформы не беда - ллвм поможет
Под винмобайл, например, уже появился?
>Почему же ее не используют?
В основном, легаси.
>Под винмобайл, например, уже появился?
Ух блять. Обычно тралят экзотическими китайскими мк, но тут у нас что-то пожоще.
Нет, и не будет под это мёртвое говно.
>В основном, легаси
Это не "легаси", а отсутствие вменяемых средств разработки у других языков.
>Нет, и не будет
Я так и думал.
Это легасиговнище – никому не всралось переписывать готовые движки, которые начинали писать десять+ лет назад.
Конечно ты правильно думал – привёл легасипример, причём никому нахуй не нужный. Хоть бы бохатый эмбдед который делается на хуитках вроде Qt Embedded – там да, нет альтернатив.
У каникулёра просто закончились аргументы, в ход пошло "смотри, а я зато на голове стоять умею!".
Лучше продолжу тут толочь говно костылём. Как никак напрямую к плюсам относится тема.
Про кроссплатформенность тоже было. Касаясь десктопа, есть ли для раста, ди и го гуи либы уровня qt и wx?
>У раста всё нормально с армом, не проблема абсолютно
Под винфон можно конпилировать только МС тулзами, а там поддержку раста как-то не завезли еще.
Конечно тут останешься, в треде про вашу хипстероподелку никто и не постит.
Всегда есть языконезависмый QML.
>>785822
Лол, так даже эпл не выёбывается. Ну, уже похуй – платформа мертва.
>>785823
Ну да, там нету толпы нюфагов с вопросом как запустить компиляцию (где там та пикча?).
Попробовал собрать исходник через g++ напрямую и нихуя. __linux__ так и не задается.
std::string getSystemName()
{
std::string result;
#ifdef _WIN32
// TO-DO
#elifdef __linux || __linux__
struct utsname uts;
uname(&uts);
char buffer[1024];
snprintf(buffer, 1024, "%s %s", uts.sysname, uts.release);
result = buffer;
#endif
return result;
}
std::string getSystemName()
{
std::string result;
#ifdef _WIN32
// TO-DO
#elif defined(__linux) || defined(__linux__)
struct utsname uts;
uname(&uts);
char buffer[1024];
snprintf(buffer, 1024, "%s %s", uts.sysname, uts.release);
result = buffer;
#endif
return result;
}
#if defined(__linux) || defined(__linux__)
Есть массив:
static int deVisAttribs [] = { GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
GLX_DOUBLEBUFFER, 1,
GLX_RED_SIZE, 8,
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8,
GLX_ALPHA_SIZE, 8,
None };
Есть библиотечная функция:
extern GLXFBConfig glXChooseFBConfig( Display dpy, int screen, const int attribList, int nitems );
Есть вызов функции:
deFBConfig = glXChooseFBConfig( deDisplay, deScreen, deVisAttribs, deFBCount );
Все написано аналогично примеру в OpenGL-вики, так же выглядит в ряде других исходников. Не понимаю, почему g++ считает, что для третьего параметра "error: invalid conversion from 'int' to 'int*'"? Это что-то так поменялось в С++11?
Попытался собрать чистый пример из OpenGL-вики - еще хуже: g++ утверждает, что функции из XLib не определены, а опцию -lX11 игнорирует.
deFBConfig = glXChooseFBConfig( deDisplay, deScreen, deVisAttribs, &deFBCount );
последний параметр указатель на int принимает, а ты просто int пытаешься передать
Не последний, а предпоследний (третий, а не четвертый).
Амперсанд уже пробовал ставить, в этом случае выдает "error: cannot convert 'const int (*)[15]' to 'const int*'"
Не понимаю, этот код раньше работал же у кого-то?
Ептыть макаба! Звездочки тупо парсит, а html-коды значит не кушает, скотобаза!
https://www.opengl.org/sdk/docs/man2/xhtml/glXChooseFBConfig.xml
nelements Returns the number of elements in the list returned by glXChooseFBConfig.
И все же последний
1488
UB
отвечаю, сам охуел, когда сегодня эту тему вспоминал. По-хорошему, все эти implicit conversions нужно нахуй выпилить и зопретить. Не понимаю, чем думали те, кто это делал.
Сам такое ищи.
Если хочешь научно-популярно, то ищи тут:
http://en.cppreference.com/w/cpp/language/implicit_conversion
http://en.cppreference.com/w/c/language/conversion
Эта параша одинаковая и там, и там.
Ну, с первыми двумя пунктами я согласен. А вот насчёт 3 и 4 вопросы. Почему ты по-разному обозвал то, что там происходит? Где разница?
В первом случае там signed integer overflow, а во втором - integer type narrowing.
Где же там overflow? INT16_MAX это integer-литерал. short-литералов не завезли, в отличие от long
Так что справа от `=' всё o'k.
Да, ты прав. Пример составлен неправильно. Надо было int32_t n4 = INT32_MAX +1;
Ссылочку на стандартик
> C++ - довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений. Человек, который хорошо в нем ориентируется - это хорошее зубрилко а не хороший программист.
Не, забей, никто не учит стандарт до тех нюансов, что выше по треду. Обычно реальный код сводится к довольно ограниченному подмножеству c++ с довольно строгими правилами, так что ситуации вроде проблем с неявными преобразованиями не встречаются практически никогда.
> Я правильно понимаю, что быть хорошим C++ разработчиком == знать наизусть стандарт
Язык это лишь инструмент.
Если ты им владеешь хорошо, то это замечательно.
Но при помощи инструмента ты создаёшь какие-то детали программы.
И если ты не знаешь как правильно сделать её и как они будут взаимодействовать с другими, то толку от простого владения мало.
Школьник ITT, спешите видеть. Если откинуть неоправданно сложные моменты с неявными преобразованиями и разрешением перегрузок, то cpp окажется одним из передовых. А с введением концептов - будет еще круче.
> Если откинуть неоправданно сложные моменты с неявными преобразованиями
То получится OCaml с оператором + для целых и +. для плавающих типов.
>OCaml
Как что-то плохое. Да и в чем проблема явно преобразовать значение перед работой? Такое вообще бывает довольно редко.
Понимаю, я говорю о том, что именно у C++ программистов очень сильный дроч на знание языка.
> я говорю о том, что именно у C++ программистов очень сильный дроч на знание языка.
Да, это так.
Возможностей отстрелить себе ногу очень много.
А если не поместится, то будет UB.
Что делать, господа?
P.S. Вот вам выдержка из стандарта. Тут говорится "value", т.е. подразумевается, что если непосредственное значение во время рантайма влазит, то все будет ок. Я правильно понял?
Почему так происходит? Ведь итератор - это просто обертка над указателем на элемент (или нет?).
А зачем заморачиваться в коде, какую функцию нужно вызывать, если можно вызвать все ту же func<тип>?
Во-вторых, шаблоны можно вызывать без параметров в угловых скобках, например, когда компилятор может сам догадаться исходя из параметров в (), тогда тоже можно будет не запариваться.
Ну и иногда оно полезно, например, при рекурсивных шаблонах - задается определенный параметр шаблона, на котором она заканчивается.
>А зачем заморачиваться в коде, какую функцию нужно вызывать, если можно вызвать все ту же func<тип>?
В смысле? Я не имел в виду другое имя, а просто оверлоад сделать. Чем func<тип> удобнее, чем просто func-то? Конечно, со специализированным темплейтом не нужно тайпкастить все аргументы, если их несколько, для автоматического выбора желаемой функции.
>компилятор может сам догадаться
Так он и с обычной функцией догадается же, только без дополнительной возможности обосраться.
>>787561
>при рекурсивных шаблонах
А можешь пример показать?
>просто оверлоад сделать
У шаблонов самый большой приоритет при перегрузке. Ты не сможешь просто переопределить.
>Так он и с обычной функцией догадается
Смотри выше
>А можешь пример показать?
http://ideone.com/OVvf8I
>У шаблонов самый большой приоритет при перегрузке. Ты не сможешь просто переопределить.
Но ведь нет. http://ideone.com/RmW7B0
Интересно. А как это в <> у тебя не тип, а значение? Туда что угодно можно вставлять, что ли?
И что это за формат template<unsigned i>? Это как называется, чтобы прочитать? Меня только template<typename typename> в качестве базового шаблона пока учили.
>>Но ведь нет.
Странно, где-то я читал обратное. Нужно будет повторить теорию.
>>787609
>Туда что угодно можно вставлять, что ли?
http://en.cppreference.com/w/cpp/language/template_parameters
Если добавлять элементы в дек в конец или начало, итераторы станут невалидными, в то время как указатели и ссылки остаются валидными.
Почему так происходит? Ведь итератор - это просто обертка над указателем на элемент (или нет?).
Пиздец, какой же мрак и гниль эти шаблоны.
Это невозможно поддерживать, если такое как у тебя в примере будет дохуя в проекте.
class Bar {
public:
float Set_price_start(float price_start)
{
float start = price_start;
return start;
}
float Get_price_start() { std::cout << start << std::endl; };
private:
float price_start;
Bar();
};
почему Get_price_start не понимает что такое start???
Может быть писать price_start вместо start?
В нем QtCreator не может найти std::make_unique. CONFIG += c++14 прописал, <memory> подрубил.
Заметил, что если отключить плагин clang code model, то все работает нормально. Что это за хуйня?
Нужен шаблон - а на его основе буду писать уже то что мне надо
Линуксовый
Элементарно делается через статическую переменную, но задача дана в главне, предшествующей описанию статических переменных. В этой же главе описывались инлайн функции, дефолтные аргументы и темплейты. Возможно ли эту задачу как-то сделать через инлайн функции (у меня не получилось), или составители просто ошиблись и не туда впихнули задачу? Prata C++ Primer 6th Edition, Chapter 8, Ex. 1
Ну глобальная понятно, она ж тоже, формально, статическая будет (скоупинг и времена доступа к/жизни переменных в следующей главе шли, в любом случе).
А под "внешним аргументом" ты что подразумеваешь?
Не, сигнатура функции по заданию была оговорена.
Ладно, спасибо. Видимо, и правда не туда вставили, так как в следующей главе похожий вопрос есть.
Есть определенная иерархия папок. Надо все их просканировать на *.h файлы. Во всех папках надо найти все конструкции вида #define IDD_WIZARD_PAGE 101 и распарсить их, составив словари IIDD_WIZARD_PAGE - 101 для каждой папки.
Программа должна уметь:
1) Игнорировать часть папок. Список папок задавать в отдельном файле.
2) Показывать дубликаты. Дубликатом считать если число одинаковое в разных папка, а ID разное.
3) Выводить на экран список занятых диапозонов значений для конкретной папки.
То есть у программы должны задаваться команды из командной строки:
your_app.exe --showdups или your_app.exe -sd для показа дубликкатов
your_app.exe --showrange folder_name или your_app.exe -sr folder_name для показа занятого диапазона значений
К примеру если дан массив int a[10]. И если я попытаюсь получить доступ к a[-1] или a[11], то получу предупреждение.
Это копия, сохраненная 24 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.