"Пусть мир в декларативность обратился, Остались своей скверне мы верны. И где тебе абстракций строй явился,
Лишь байты нам отчетливо видны, - Промолвил он, - как близоруким людям; На жизнь в страданьи мы обречены,
Но веру вашу принимать не будем: Как не поймет церковной чистоты Развратный содомит, погрязший в блуде,
Так ваши парадигмы нам чужды".
FAQ:
Q: Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задач. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
<устарело> Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl <устарело> Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод: Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все. Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Тонкости языка (для гурманов): Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++: Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты: Читать по необходимости. Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5) Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Софт и библиотеки:
IDE, призванная похоронить Visual Studio пока не особо получается. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion/
Йоба-набор библиотек, способный удовлетворить даже самые скотские фантазии - http://www.boost.org Библиотека для удобной высокоуровневой работы с сетью (ахтунг! утягивает за собой boost, openssl и даже Аллаха) - https://casablanca.codeplex.com Простая в обращении библиотека для работы с графикой и аудио - http://www.sfml-dev.org
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
>>581583 (OP) Сап, страусята. Скоро сессия и значит пора начинать делать СВОЙ ПРОЕКТ, вместо решений задач "создайте два класса и напишите к ним по два конструктора" на семинарах, я выбрал один цельный проект, который бы эти все задачи бы включал. И заодно забил на семинары сказав, что в конце года покажу все это вот.
Задача проста, как дважды два четыре, есть сайтик на котором есть нужная мне информация, я должен подключиться к нему, пропарсить инфу и сохранить нужное. С парсингом и сохранением вроде проблем нет, но вот с подключением к сайтику я не знаю что делать. Подскажите статьи/книги на данную тему.
P.S. Язык менять нельзя, писать только на цпп. P.P.S Прошу прощения за пунктуацию, она у меня хромает.
>>581659 Если с минимумом ебли, то libcurl. Она написана на сях, но без проблем компилируется и используется с крестовым компилятором. В твоем случае нужно будет написать простейший коллбэк, который схороняет полученные от сайта байты туда, куда тебе нужно в string, или что там у тебя еще. Собственно запрос инфы делается буквально в пять строчек. Рикамендую такую либу.
>>581837 Пока закрутился, блоги никак не соберусь структурировать. А про куте не накидали достаточно инфы для параграфа. В общем, постараюсь к следующему, если все гладко пойдет.
Дело очень серьёзное. Нужно вкатиться за 3 месяца в олимпиадное программирование почти с нуля. Нужен хороший курс. В нём должна быть теория, сборник задач, возможность проверить своё решение онлайн и пояснение в задачам если не смог решить. Нашёл codeforces, но там нет теории, а если есть, то я не понял как пользоваться поэтому сложно подобрать задачу на нужную тему.
>>581996 Любой отдельно взятый курс - хуита. Ищи сам, копайся в десятках разных курсов, книг, статей. Гугли нужную тему под задачу, или задачи под тему, и так далее.
>>582147 Стоп. Не отвечай. Это тупой вопрос. Лучше ответь на этот. Где найти темы задач? Список самых популярных алгоритмов с задачами на них. Так чтобы учить всё в правильном порядке и ничего не пропустить.
>>582167 Я особо не разбираюсь, но думаю подборку из двадцати задачек ты не найдешь. Решай выборочно из категорий http://acm.timus.ru/problemset.aspx Особенно налегай на задачи на структуры данных, графовые задачи и строковые алгоритмы.
Как вообще пишутся кроссплатформенные приложения без всяких Qt? Как вообще Qt и подобные кроссплатформенные либы это делают?
Ладно, с виндой и линуксом понятно. Всякие #ifdef _WIN32 и #ifdef __linux__, дальше просто #include нужных системных библиотек.
Но что делать с макосью? Их Cocoa не работает на C++, только Obj-C. Их Metal не работает на C++, только Obj-C. Obj-C код компонуется в либу, а потом функции вызываются оттуда? Какие-то более хитрые инструменты препроцессора? Как это достигается?
>>582184 > Их Cocoa не работает на C++ Вообще-то работает. Всплывают, конечно, подводные камни, в основном из-за нескольких вариантов objc_msgsend и необходимости понимать какую вызывать. Но скорее всего используют библиотеку. Ну или интерфейс пишут нативный - основа приложения (модели) на плюсах (например), а UI на обжективе, часть проекта же можно написать на плюсах, часть на обжективе.
Здравствуй анон. Лабу сдавать уже завтра а я нихуя не понял и вобще тупой дебил, но это единственный предмет в моей шараге и я очень прошу помочь. Есть несколько алгоритмов решения задачи о рюкзаке. Не мог бы ты написать комментарии к ним для даунов вроде меня? http://pastebin.com/G5bE7BMj http://pastebin.com/eRV41asS http://pastebin.com/CQzEzwab
>>582302 пика я такого не помню, но у меня старое издание читать там надо было 2-5 главы обязательно в начале (алгоритмическая сложность и прочий матан), а потом уже можно было в разнобой
>>582343 >Вижу, кому-то печёт от того, как много собачьего дерьма валяется повсюду. Ведь на самом деле собачье дерьмо - фитоняша, а жируха - это несвежий понос.
>>581665 >>582295 Спасибо загуглю. Черный ящик это конечно хорошо, но хотелось бы понять как это все устроено в цпп, хотя бы совсем в общих чертах. То есть как реализуется подключение к серверу, делается запрос и т.д.
>>581996 Скиену гугли, но по сути теория там мало нужна. Нужно тупо ебашить задачи.
>>581996 Не использовать плюсы в олимпиадном программировании. >>582413 >То есть как реализуется подключение к серверу, делается запрос и т.д. К сожалению, в std нет функций для работы с сетью, так что это зависит от платформы (или же от библиотеки) что ты используешь.
>>582460 >нет функций для работы с сетью Всё правильно, байтослесари не должны использовать сеть, их задача дрочить байтики и искать элемент в массиве.
>>581996 Informatics.mcme . Начинать с раздела про поиск, и дальше по порядку. В каждом из разделов есть теория и задачи по возрастанию сложности. Параллельно рекомендую пройти физтеховский курс по комбинаторике на курсере, и какой-нибудь курс по алгоритмам.
>>581996 А вобще за 3 месяца ты только хуй пососёшь скорее всего, максимум сможешь решать простенькие задачи на реализацию и несложную идею. Алгоритмы ты применять за 3 месяца не научишься.
>>582295 У меня подозрение, что он хуево работает, или не обновляется, или еще что-то. Я смотрел в его сторону, но не использовал, хоть и не могу вспомнить, почему.
Крестаны. Подскажите где че по оптимизации почитать или задачки какие-то? Возможно на собес скоро пригласят, но я понял, что никогда код не оптимизировал в тырпрайсе, только поверхностные знания есть
>>582840 Первое правило оптимизации: не оптимизируй раньше срока и поиска узких мест. Второе правило оптимизации: оптимизируй сначала алгоритм. Третье правило оптимизации: оптимизируй работу с сетью/файлами/БД и т.п. (кеширование, буферизация и т.д.).
Ну а вообще есть эффективное использование с++, например.
>>582872 На глаз трудно оценить производительность по нескольким причинам: 1) Надо быть истинным экспертом, чтобы точно знать какой код сгенерируется. (Например, разные компиляторы могут сделать функцию как встроенной, так и нет. А так же различная оптимизация вызовов рекурсивной функции). 2) Часто используются библиотеки и, будучи незнакомым с ними, нельзя точно сказать, насколько они производительны.
Ну а на глаз: 1) Вынести расчеты из циклов, которые можно. 2) Использование RTTI. 3) Создание потоков, вместо пула (если не единичный раз).
>>582880 > 1) Надо быть истинным экспертом, чтобы точно знать какой код сгенерируется. (Например, разные компиляторы могут сделать функцию как встроенной, так и нет. А так же различная оптимизация вызовов рекурсивной функции). -S флаг подрубить и попыриться в машинный код, а? Там и видно что и как оптимизируется.
>>582900 Честно говоря - даже не представляю. Сколько собеседований было, вопросов по оптимизации не встречал (разве что вопросов в стиле "А всегда ли алгоритм со сложностью O(n*log(n)) быстрее O(n^2)?")
>>582904 Уточню. Собеседований для энтерпрайза, что подразумевает использование готовых алгоритмических библиотек. Были вопросы по поводу оптимизации различных алгоритмов или структур данных, для этого могу посоветовать традиционный квартет для с++: 1) Кнут. Искусство программирования. 2) Кнут. Конкретная математика (математический аппарат для анализа алгоритмов). 3) Кормак. Алгоритмы, построение и анализ (теория алгоритмов). 4) Седжвик. Алгоритмы на с++ (тут уже практические особенности реализации на с++ )
Погромисты выручайте, есть два файла, в одном фигуры точеные, в другом визитор дроченый… Вообщем не работает, что делать [CODE] //shapes.h
#include "visitors.h" - так зацикливает включения class ShapeVisitor; - так знаяет так обращаться к методу visitLine class Shape { public: virtual void Accept(ShapeVisitor) = 0; };
class Line: public Shape { public: Line(int x1 = 0, int y1 = 0, int x2 = 0, int y2 = 0); void Accept(ShapeVisitor visitor) { visitor->visitLine(this); } private: int _x1, _y1; int _x2, _y2; }; [/CODE]
[CODE] //visitors.h #include "shapes.h" - так зацикливает включения class Shape; - так знаяет так обращаться к методам shape и наследников class ShapeVisitor { public: virtual void visitLine(Line) = 0; };
ребята, читал статью на eax.me Сама статья не всем будет интересна, но зато там 10 актуальных не заброшенных блогов о PR. И большая часть - CPP Ориентированные :
Что можно почитать современного за template-design? Есть пара старых книг: Александреску да templates the complete guidе. Первая давно прочитана, а на вторую боюсь потратить время
>>582862 >Странно 2015 отказалась устанавливаться, 2013 тоже, а десятая установилась. У тебя либо xp, либо старая ревизия семёрки. Упдейт неизбежен, не сопротивляйся и дай мс-у вставить в тебя свой ключ на 10.
>>583045 >современного Дык, там ничего особенно нового не появляется. Ну, именно чего-то такого, что сделало бы всю старую лит-ру неликвидом. 1-2 фишечки всегда вычитаешь в сети, общая суть не изменится.
>>583070 Но зато сам язык развивается, а вместе с ним и новые способы организации появляются. Даже в тех же ranges сфинае-изъебства выглядят неизъебствами.
>>583151 Ну чтобы сходу были векторы и функции для них, нормализация, кроспродукт, дотпродукт. Матрицы там и тдд. Пожалуй это уже не тригонометрия, но это то, что мне нужно.
>>582908 Если я правильно понимаю твой тырпрайз, то нахер им "оптимизации" усрались. Глагное сделай хоть как-то работающий код, а железа докупить не проблема.
>>583219 Смотря где. Два года назад, на моей первой работе, я работал в РТИ и мы там писали вполне типичные энтерпрайз приложения на крестах (Qt в частности). Правда, там целевой платформой был линукс.
Братишки, хочу отказаться от Qt, потому что он жируха. Но тогда встает вопрос о гуе: на чем его пилить? Есть ли отдельная исключительно гуёвая библиотека, чтобы можно было пилить няшные формочки так же просто, как и в qt?
>>583045 b.atch.se доставит, базарю. Еще гугли template metaprogramming tricks, например. Я не помню точный адрес этого блога, но там чувак на шаблонах сделал ассемблер времени компиляции.
>>583277 Нужен когда с ним удобнее или вообще невозможно без него. Или когда в стандартной библиотеке не хватает способов взаимодействия программы с внешним миром типа чтения зипов.
>>583277 Это как с еблей в жопу. Ты долго сопротивляешься, не хочешь подключать это говно и шквариться. Потом обстоятельства берут верх, ты подключаешь ее ради какой-нибудь фичи. И потом уже начинаешь получать удовольствие и все проблемы решать бустом, а обратного пути нет.
>>583306 Почему же? Вячеслав - Слава. Николай - Коля. Тоже не очень логично, на первый взгляд. У меня был более наглядный пример, но я его забыл. Вспомню - отпишу.
>>583324 >>583321 Это же американцы, их имена вообще ничего не значат.
Боб может и в паспорте быть. Еще Роб.
William может быть Will или Bill.
Есть такие, которым не нравится определенный вариант своего имени, иногда даже этот вариант в паспорте числится.
Возврат массива из функцииАноним18/11/15 Срд 23:49:08#138№583355
Блядь, я затрахался возвращать из функции указатель на массив, везде не забывая все эти звездочки и амперсанды. Можно ли как-то возвратить значение по ссылке, чтобы хотя бы во внешнем коде не ебаться с этим бредом? Ну типа http://pastebin.com/JjLSwTFx Я хз, передавать в функцию ссылку на массив как-то тупо, вспоминаются времена Паскаля. Очищать память вне функции еще пиздецовее, вообще быдлокод какой-то. Я так понимаю, это как-то через вектора можно сделать, но я типа только начал учиться и не дошел до этого, но не иметь возможности вернуть массив для меня недопустимо.
>>583360 > Я так понимаю, это как-то через вектора можно сделать, но я типа только начал учиться и не дошел до этого >>583370 Серж, только это не под француза, а под латинянина.
>>583386 Ты вот думаешь, я много понял в этом пиздеце? Почему const? Зачем & перед именем функции (то есть, зачем именно ссылка, почему с обычным массивом так нельзя и почему без ссылки, по значению нельзя)? Как с этим работать во внешней программе? Надо ли потом вручную память от этого чистить? Господи, какое же задротство, нервы, сука.
>>583398 Спасибо на добром слове, вот только в пыхе, жабе и где угодно еще у меня таких проблем не возникает, хотя занимался я ими раньше. Мб старею. Это не к теме срача, объясни пожалуйста, почему все именно так убого, ёбнуто, как оно есть, почему нельзя проще и логичнее; и как с этим жить? Ну или хотя бы работать.
& - в данном случае обозначение ссылки (ссылка - синтаксический сахар над указателями). const - т.к. ссылка должна быть константной, это продлевает жизнь переменной, на которой она ссылается.
Память чистить не надо т.к. это std::vector, динамический массив, который сам управляет памятью.
А вообще - иди и читай учебник нормальный с 0, у тебя нет знаний основ.
>>583403 >const std::vector<int> & - тип, возвращаемой функцией (константная ссылка на std::vector<int> ) Это я понимаю. >& - в данном случае обозначение ссылки Это тоже, я не понимаю, почему 1) нельзя так же возвращать обычный массив? "Просто потому что"? 2) нельзя вернуть этот вектор по значению? >const - т.к. ссылка должна быть константной, это продлевает жизнь переменной Этого не понимаю. Куда продлевает, зачем, насколько, на что это влияет? >Память чистить не надо т.к. это std::vector, динамический массив, который сам управляет памятью Ок, понял, до этого просто не дошел еще. >>583407 Это общие слова. Не вполне понимаю, как возможность вернуть ссылку на область памяти вместо ссылки на ячейку памяти или указателя на область памяти влияет на производительность.
>>583414 >>const - т.к. ссылка должна быть константной, это продлевает жизнь переменной >Этого не понимаю. Куда продлевает, зачем, насколько, на что это влияет? Он, наверное, имел в виду RVO, но написал хуйню. Константная ссылка ничего не продлевает. Тот пример должен возвращать просто std::vector<int>.
>Тот пример должен возвращать просто std::vector<int> И в случае присваивания, будет копирование ВСЕГО. Или же ты предлагаешь еще и про семантику перемещения рассказывать?
>>583448 P.S. >1) нельзя так же возвращать обычный массив? "Просто потому что"? Увы, но да. Можешь выделять память динамически, но тогда придется самому следить за ее очисткой. >2) нельзя вернуть этот вектор по значению? Ответил чуть выше - будет произведено копирование вектора, что долго. На самом деле нет, в std::vector поддерживается семантика перемещения и копирования в данном случае не будет, просто взял простой пример, но он получился неудачным >Этого не понимаю. Куда продлевает, зачем, насколько, на что это влияет? http://en.cppreference.com/w/cpp/language/lifetime
>>583449 >Ответил чуть выше - будет произведено копирование вектора, что долго. Эм, а так что будет, если не копирование? Переадресация на ту память? Как из внешней программы с такой функцией работать, приведи пример вызова и использования полученного массива, пожалуйста.
В общем, суть в том, что при выходе из "зоны видимости", стековые переменные автоматически уничтожаются. Поэтому, если возвращать из функции ссылку на стековую переменную, будет плохо т.к. ссылка вполне реально может быть невалидной и будет UB.
>>583460 >Поэтому, если возвращать из функции ссылку на стековую переменную, будет плохо т.к. ссылка вполне реально может быть невалидной и будет UB. А если, как в данном случае, возвращать значение, все будет хорошо и в основной программе не нужно вектор делать константным? И ссылку тоже не нужно? >Опять дам совет: прочти хороший учебник, который покажет основы. Да я читаю понемножку, но по с++, похоже, НЕТ хороших учебников. Что Шилдт, что Прата, что Страуструп - они говно, они огромные и бестолковые, я не готов ждать до 500ой страницы, чтобы узнать, что в С++ таки тоже есть нечто похожее на динамические массивы и с ними можно по-человечески работать, это тупо и неэффективно. Не важно, читаешь ты самоучитель по иностранному языку, языку программирования или чему-то еще, ты после прочтения 100 вводных страниц уже точно должен знать основы, а нормальные массивы и нормальная работа с ними, как бы это не называлось, это основа-основ в любом языке. Здесь же я, читая "хорошие книжки", прочитав половину не знаю ничего и ничего толкового написать не могу сравнить хотя бы с книжкой по С K&R, где хоть и мутно, но прочитав, ты можешь все. А пролистав всю книжку, не понимаю кучу постоянно встречающихся моментов. Ни в жабе, ни в пыхе, нигде такого нет. Если ошибаюсь - подскажи эту хорошую книжку.
>>583472 >Не важно, читаешь ты самоучитель по иностранному языку, языку программирования или чему-то еще, ты после прочтения 100 вводных страниц уже точно должен знать основы Тут очень хорошее сравнение можно привести: есть "мгимошные" учебники или курс Петрова, где ты начинаешь говорить на языке с ходу, а есть школьные учебники, где ты на 263ей странице знакомишься со структурой глагола.
>>583472 Люто двачую. Мне интересны ФАКТЫ, СТРУКТУРИРОВАННАЯ ИНФОРМАЦИЯ и может НЕМНОГО говна, чтоб разбавить это всё. У горы воды с переменными вхождениями ключевых элементов — удел художественной литературы. Я бы может и почитал художественную книжку о программировании, но не когда твоя первостепенная цель — получить хорошее знание языка.
Если в разных файлах какой-нибудь .h или .cpp инклюдится несколько раз, он ведь в реальности прилинкуется лишь единожды? Если нет, то как избежать дублирования? Само по себе указание using namespace std в библиотеке влияет на что-нибудь? Удобство, скорость работы, еще что-то? А то ебал я везде std:: подписывать. Но меня напрягает, что это может повлиять на нэймспейс того места, куда линкуется данная библиотека. Может есть какой-нибудь аналог, работающий в пределах файла?
>>583512 >Само по себе указание using namespace std в библиотеке влияет на что-нибудь? Не влияет до тех пор, пока имена элементов из разных пространств не начнут пересекаться.
>>583472 >>583502 >C++ >через сто страниц знать основы 1-8 пдфки отсюда http://cmcmsu.no-ip.info/2course/ При условии, что ты знаешь C. Но нирикамендую, такой подход порождает иллюзию знания языка, тогда как тысячи нюансов пройдут мимо тебя.
>>583512 >прилинкуется лишь единожды? По умолчанию прилинкуется столько раз, сколько встретится, для одного раза нужно #pragma once или include guard. >влияет на что-нибудь? Откроется портал в Данию, из него вылезет Бьерн и долго будет ебать тебя в жопу. Включать целые пространства имен - плохой тон, из-за этого легко получить коллизию и выстрелить себе в ногу. Пиши using std::имясущности для каждого имени, которое ты используешь. И да, в .h файлах нельзя делать даже так, в них ты должен квалифицировать каждое имя как std:: без всяких using'ов, либо вынести его использование в .cpp и уже там использовать using.
Теперь, блядь, иди и добавь во все хэдеры #pragma once, а using'и все удали из них, я проверю.
>>583538 Ее и нельзя возвращать, тот хуй сразу UB получит. Несколько тредов назад же писали про это, но нет, блядь, на те же грабли, на те же грабли. Саттера читаем, но не глазами, а жопой. "Слышу звон, да не знаю, где он, блядь".
Еще раз: ВОЗВРАЩАТЬ ССЫЛКУ НА СТЕК НЕЛЬЗЯ. МОЖНО ПРИСВОИТЬ CONST- ИЛИ RVALUE-ССЫЛКЕ ВРЕМЕННЫЙ ОБЪЕКТ, ЕСЛИ САМА ССЫЛКА ХРАНИТСЯ НА СТЕКЕ.
[code lang="cpp"] const int & a = 5; //можно const int & b = [] {return 5;} (); //можно const int & c = [] () -> int & {int x = 5; return x;} (); //гроб гроб кладбище UB [/code]
>>583447 >>583450 Сам ты пидор. Ненавижу таких воннаби-экспертов как ты, которые обладают поверхностными и посредственными знаниями, но уже поливающих других своим говном (лол, это блядь даже не ссылка на стандарт, а просто очередной сраный блог пост)
Чувствуешь разницу между const T& a = f() и const T& f()? В первом случае временная переменная уже есть в скоупе на стеке или в регистре и lifetime легко продлевается. Во втором случае из функции возвращается ссылка на объект, который в ней создан и соответственно должен быть где-то уничтожен. Как по-твоему вызывающая функция догадается вызвать деструктор? У тебя может быть две функции, для одной нужно вызвать деструктор, для другой нет, и колсайт может динамически вызвать одну из них. Что тогда?
См. пример http://ideone.com/yR1nOS Лол, у меня это говно даже не без ворнингов компилируется. > a.cc:16:12: warning: returning reference to temporary [-Wreturn-local-addr]
P.S. Ваше уже написали, что ты не прав.
>>583448 > И в случае присваивания, будет копирование ВСЕГО. Есть RVO. В простых случаях компилятор может заинлайнить создание объекта и никаких копирований не будет. > Или же ты предлагаешь еще и про семантику перемещения рассказывать? Ну да. Если ты хочешь вернуть объект из функции без копирования, то это и есть перемещение. В крайнем случае можно выделить память на куче и вернуть какой-нибудь std::unique_ptr.
Кресты давно не трогал надо повторить и особенно надо найти основные алгоритмы и структуры данных в стандартной библиотеке. Они же на кучу заголовочных файлов разбросаны и в стандарте по одному их искать и повторять слишком долго. Может есть книга по этой теме? Или глава посвящена в каком-нибудь учебнике типа прата или страуструпа?
>>581583 (OP) > Лишь байты нам отчетливо видны, > Современный C++ весьма далек от языка, которым он был в 1998 году. > Так ваши парадигмы нам чужды > C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм.
>>583565 Не-не-не, на размер вектора смотреть не надо, внутри него указатель на данные, так что sizeof в данном случае ничего не скажет.
>Есть RVO. В простых случаях компилятор может заинлайнить создание объекта и никаких копирований не будет.
То есть? Про это подробнее, не слышал.
>Ну да. Если ты хочешь вернуть объект из функции без копирования, то это и есть перемещение.
Перемещение - когда передаем владение одним объектом другому. Например, в том же векторе, целевому указателю присваиваем значение исходного, а исходный обнуляем.
>>583593 >Есть RVO. В простых случаях компилятор может заинлайнить создание объекта и никаких копирований не будет. >То есть? Про это подробнее, не слышал.
Прочитал. Это работает только с простейшими случаями.
>>583565 Когда копируется вектор, копируется не только его шапка, но и содержимое. Проверить очень просто: создай std::vector<int> v{ 1, 2, 3}; Скопируй его в функцию, там к нему допиши четвёрку, сделай в этой функции вывод всех его элементов.
Потом вызови эту функцию, а потом сделай вывод всех элементов в исходном скоупе с std::vector<int> v{ 1, 2, 3};
Ты не поверишь, но вывод будет такой: 1 2 3 4 1 2 3
>>583770 Да я основы знаю. Учить его я не собираюсь. На cppreference всё в разнобой. Алгоритмы в одном заголовочном файле, каждая структура данных в отдельном. Например только сейчас узнал что в стандартной библиотеке есть функция для комбинаторики. Может мне тогда не учебник нужен, а какой-нибудь справочник?
Во-вторых, дело в том, что с++ ОЧЕНЬ сложен как я язык и особенностей полно (спор выше о времени жизни и ссылках это наглядно показал), поэтому без детального изучения и понимания основ языка не получится хорошо на нем писать.
Пиздец какой-то, нихуя не понимаю, как расти над собой дальше, работы по крестам в моей мухосрани нет, свои проекты как-то не срослись. Хочется выпилиться уже.
>>583919 Вектор объявленный в функции создаются в куче с указателем на него в стеке, а array на стеке? Тогда векторы можно большими делать, а массивы нет?
>>583930 Как выше заметили, vector работает через указатель на кучу, а память для array выделяется на стеке, что быстрее, вроде, даже в компайл тайме. ну и вектор избыточен для статического массива.
>>583937 Размер одинаков, выделяются на стеке, оверхеда нет, но array обладает рядом свойств, недоступных обычному массиву, например, итераторы и информация об размере.
>>583943 Сукапздц. Ладненько, сейчас хоть ридми запилю нормальный и открою .-. Попробую пошерстить на предмет удаленки. По ходу, двощ верит в меня больше, чем я сам.
>>583938 То есть в С++, грубо говоря, есть сишный массивы, есть array, а есть вектор? Охуеть. Думал, что из нововведений только вектор, для чтений байтовой последовательности из файла использовал сишный массив в качестве буфера, но это, видимо, не лучший вариант.
>>583967 >Дело в том, что статические и глобальные объекты создаются на этапе компиляции, так что об этом не стоит переживать. И память там тоже не может кончиться как в куче?
>>583967 Вот оно что. Блин, а мне они понравились, лол. Ну их же всё равно оставят для совместимости с сишечкой? И вообще, вон у меня fread и frite требовали указатель на массив в качестве первого параметра. Будет ли оно работать с чем-то, кроме сишног стандарта массива?
>>583972 Не использовать fread/fwrite и пользоваться потоками. Ну и да, всегда можно преобразовать указатель на переменную к char (пример ниже, естественно, где-то в коде открывается файл и задается х).
int x; std::ofstream file; file.write(reinterpret_cast<char >(&x), sizeof(x));
>>583950 А прикинь, написать программу, которая будет брать все файлы на твоей пекарне, переводить имена на китайский и выстраивать ярлыки так, чтобы они напоминали твое ебло, взятое с вебкамеры. Такая-то непростая задача, но статья об ее решении никому нахуй не сдалась, ибо троллейбус из хлеба. Статья на хабре должна быть полезной, а не просто о сложной вещи, высосанной из пальца, смекаешь?
>>583983 А ты думаешь, что разработать калькулятор, который по функциональности может конкурировать с каким-нибудь вольфрамом - это простая и высосанная из пальца задача? Хоть я и сомневаюсь, что там калькулятор такого уровня.
>>583988 За грамотную статью по реализации символьного интегрирования алгоритм Риша и вот это все я бы и сам ему отсосал. Инфы-то нихуя нет, сраный Стивен закрыл исходники, а в доках одна хуйня. Но он-то пилит тривиальнейшую поделку с арифметическими действиями, которая даже как учебное пособие не может быть интересна, ибо на хабре таких статей от школьников уже дохуя. А написать что-то уровня вольфрама это нихуя не шутки, там въебывать придется.
Почему я не могу сделать cout << "а равно " + a; ? Что на этот-то раз ему не нравится? C++ не умеет сложить строку с числом без посторонних функций?
>>583521 Ты серьезно, блядь? Нет конкатенации строк, нет сложения строк, мне каждый раз хуярить эти нелогичные угловые скобки через шифт место плюса (особенно, если на русском языке пишу)? Ну ок, а если я хочу сначала сгенерировать строку из строки, числа, пробела, числа, еще строки и еще числа, а вывести ее где-нибудь потом, мне как быть?
>>584072 >Сложение строк, внезапно, есть, но ты какой-то пиздецки тупой. Ну и как его осуществить? >Ну ок, а если я хочу сначала сгенерировать строку из строки, числа, пробела, числа, еще строки и еще числа >Ты выводишь данные в поток, дебил. Какой нахуй русский язык? Ты какой-то слишком агрессивный. Русский, русский язык. Через смененную локаль. В строке русские символы. >Плюс тоже через шифт ставитс На твоей кастрированной клавиатуре может быть.
>>584066 Что должно получиться в результате сложения строки с числом? Какой-то абстрактный "универсальный тип"? Не выйдет-с, динамической типизации не завезли, любителям оверхедов предлагается пердолиться с полиморфными классами. Или должна получиться строка? Допустим, но по каким правилам преобразовывать число в строку? Какая система счисления, какое форматирование? Язык не будет диктовать тебе какой-то единственный правильный способ, ты должен выбрать это сам. Поэтому либо используй std::to_string для явного преобразования числа в строку с нужными тебе параметрами, а потом уже конкатенируй сколько влезет, либо пихай их в поток по отдельности и не выебывайся.
Привет, аноны. Дрочу в универе си плаз плаз и встала задачка такая: нужно создать МАТРИЦУ СТРУКТУР. Т.е. есть структура типа: фамилия, год рождения, стаж работы (данные о работнике) и этих структур должно быть n на n штук. суть задачи в их сортировки, с чем я справлюсь на изиче, у меня проблема в МАТРИЦЕ СТРУКТУР. как бы я не ебался - что-нибудь да ломается. Помогите, молю, второй день сижу на этой хуйне.
>>584076 Обосрался - обрекай. >>584079 Очевидно же, блядь, что СТРОКА. >Допустим, но по каким правилам преобразовывать число в строку? Какая система счисления, какое форматирование? Язык не будет диктовать тебе какой-то единственный правильный способ, ты должен выбрать это сам По любым, это незначительно в 99% случаев, параметры стандартные, отброс лишних нулей справа, десятичная система, округление произвольное.
>>584103 Никаких варнингов, строка из одного символа тоже прекрасно прибавляется. С to_string проблем не вижу, прекасная функция, не зря её добавили. Работая со стрингами вместо массива чаров вполне адекватным считаю её использование вместо привычных преобразование инт > чар.
>>584121 > std::accumulate Что-то я не вполне понимаю его. >>584120 Приятно познакомиться, соковня. Я понимаю это, преобразование типов можно было и автоматически осуществлять по наиболее универсальному правилу.
>>584082 >как бы я не ебался - что-нибудь да ломается Чинить пробовал? А искать ошибки? Ты на какую кнопочку программу запускаешь? На компьютере драйвера все установлены?
>>584131 Приходишь ты такой в деканат, как люди из твоих структур. Тебе присваивают номер, выдают студак и указывают комнату в общаге. Ты идешь туда, а общагу еще не построили. Улавливаешь аналогию?
>>584131 Почему имя и год у тебя на английском, а стаж ты не загуглил, сделав говна вместо этого? У меня после универа в дальнейшем отвалились все, кто так делал, а я вышел молодцом, ибо не делал говна.
>>584140 >>584138 >>584133 да я понял ебана в рот, грузите так, как будто я тут сижу выебываюсь какой я прошаренный в этом вашем СИ. Мне он то по сути нахуй не сдался, так как не основной предмет, но препод ебнутый считает иначе. вот и дрочу эти задачи сижу уже второй семестр. >>584144 экспириенс бро
>>584130 Так это сделано в любом языке для людей, а не для пердоликов в трех свитерах. >>584128 Ну я типа только начал учить кресты, мне рано в эту схему вникать.
>>584140 >Ты идешь туда, а общагу еще не построили Там должен быть знак с надписью "одноместный сарай с названием общага стоит здесь" и сарай на одного студента.
>>584079 >>584153 Каков пердомаксимализм, а! Если язык предоставляет удобные конструкци, значит он уже что-то обязательно диктует, навязывает...как будто нельзя сделать по-своему, если уж захочется запердолиться. >>584153 Если бы кьют, ue4 , мармелад и прочее были под человеческий язык, я бы к этому некроговну и не притронулся даже.
>>584124 >автоматически осуществлять по наиболее универсальному правилу На очередном заседании комитета стандартизации ISO WG21 было установлено, что большая часть программ на C++ являются хэллоуворлдами. В связи с этим была принята новая версия стандарта, названная C++15. Стандарт был сокращен на 1364 страницы и теперь состоит из единственного требования: любая программа на C++ должна в точности совпадать с: [code lang="cpp"] #include <iostream> int main () { std::cout << "Hello, world!" << std::endl; return 0;} [/code]
>>584159 В твоем примере больше кретинизма, чем в проблеме выше: >#include <iostream> Подрубать стандартные функции автоматически не умеем. >std::cout >std::endl; Самые используемые поточно-консольные команды, которые никто не использует в других пространствах имен, надо писать как уебан или подрубать стандартное - лишние строки >точкисзапятымиточкисзапятымиточкисзапятыми >INT main, когда он уже последние лет 20 инт. > Бессмысленные двойные угловые скобки через шифт вместо плюса или точки >куча символов для простого переноса строки >быдлокодные фигурные скобки вместо читаемых табуляций
>>584165 >ПУСТЬ ВСЁ ЗА МИНЯ ДЕЛАЕТСЯ КАРОЧИ ШОП ПРОСТА КНОПКУ НАЖИМАЕШЬ И ТАМ УЖЕ ПИЗДАТО ШОП БЫЛО НУ А ЕСЛИ МНЕ ШОТА ДРУГОЕ НАДО ТО НАДО СДЕЛАТЬ ШОП МОЖНА БЫЛА АБОЙТИ ВСЮ ЕТУ АВТОМАТИКУ И СДЕЛАТЬ КАК МНЕ НАДО КАРОЧЕ ХОЧУ ПИЗДАТУЮ ГИПКАСТЬ СОВМЕСТИТЬ С АВТОМАТИКОЙ ШОП ОНО ЗА МЕНЯ ДУМАЛО Нахуй иди.
>>584165 Кстати я тут мимо проходил и подумал. Что будет если написать скриптовый язык программирования который легко конвертируется в С++ а от туда компилируется и так же легко конвертируется в js и от туда запускается или просто интерпретируется без конвертации в js. Велосипед? Есть применения? Скриптодети одобрят?
>>584165 >внезапно понадобилось заменить консольный вывод на гуй >в крестах меняешь одну строку >в языке с ВСТРОЕННОЙ ПОДДЕРЖКОЙ ВВОДА-ВЫВОДА начинаешь полнотекстовые замены всех вызовов Ну да, охуенно, ничего не скажешь.
>>584165 > Бессмысленные двойные угловые скобки через шифт вместо плюса или точки Ты имеешь настолько мало знаний, что не осознаешь, насколько это разные вещи.
>Самые используемые поточно-консольные команды Которые могут быть нахуй не нужны в других пректах, а значит автоматическое их подключение — вред.
>Подрубать стандартные функции автоматически не умеем. Аналогично. Иногда нужно, иногда не нужно. Почему оно дожлно быть автоматизировано? То есть ты хочешь, чтоб тебе АВТОМАТИЗИРОВАЛО это дерьмо. В таком случае, я буду вынужден отключать что-то вручную вместо того, чтоб просто НЕ ВКЛЮЧАТЬ. Ты туп.
>куча символов для простого переноса строки Ну ебашь \n, никто не против.
>быдлокодные фигурные скобки вместо читаемых табуляций Бессмысленная придирка.
>>584124 >Я понимаю это, преобразование типов можно было и автоматически осуществлять по наиболее универсальному правилу.
Охуенчик. Добавляю число к концу строки, добавляется 1 char с его двоичным кодом % 256 или char'ы с кодами цифр?
А если первый вариант, что насчёт знакоопределённости: reinterpret в unsigned или что вообще? А ты знаешь, кстати, что char знаконеопределён по стандарту (а по факту знаковый, что сплошная головная боль)?
>>584172 Обосрался - обтекай. >>584174 Кому надо - юзают луа, питон и прочее. Указатели и STL ты не сконвертишь. >>584175 ОДНУ? Пруфы будут? Берешь сейчас исходники любой консольной утилиты и одной строчкой цепляешь гуй. го >>584177 Ну да, аргумент к человеку, какие-то бестолковые выебоны. >Которые могут быть нахуй не нужны в других пректах, а значит автоматическое их подключение — вред. Если не используются, значит не подключаются, что ж ты тупой-то такой? >Аналогично. Иногда нужно, иногда не нужно. Почему оно дожлно быть автоматизировано? Потому что используется. Значит нужно. Иначе смотри предыдущий пункт. >Ну ебашь \n, никто не против. Я этого не говорил, клоун. >Бессмысленная придирка. Два лишних нажатия шифта каждый блок кода и стимулирование развития быдлокодеров без представлений о красоте. Найс. >>584181 Больше лишнего говна вместо одного символа!
>>584199 >>584201 И опять подрывы. Эх, что может быть слаще подрывания экспертного состава /pr длиной в два дня? Столько синдрома утенка и защиты манямирков, а ведь написали бы пару тысяч строчек на питоне, и ни у кого бы не хватило мозгов что-то кукарекать про диктовку или гибкость. Ладно, пожалуй, хватит, было жирно, но нажористо. Всем спасибо. >>584238 Извини, анон, я сам не ожидал, что аккуратные указания на недостатки некропараши вызовут столько бугурта.
Около месяца назад навернул себе VS community с офф.сайта, там сказанно, что это бесплатно. Так какого черта сейчас он говорит мне о окончании платного периода? Что делать? Алсо, посоветуйте какую-нибудь ИДЕ на замену.
>>584273 >недостатки некропараши Потому что недостатки - это плата за низкий уровень абстракции.
Безусловно, код на каком-нибудь питоне будет лаконичнее и короче, но он не будет таким производительным (что важно в некоторых задачах) и некоторые грязные хаки (особенно касаясь работы с памятью) будут недоступны.
Есть байтовый массив, как через cout вывести значения на экран в шестандцатеричном виде, а не в десятичном? Через printf могу задавать форматирование, а через cout как?
>>582283 задавал вопрос про олимпиадное программирование за 3 месяца >>582908 эта литература вроде тоже подходит
Взял значит кармена и седжвика. Прочитал первые 2 главы и содержание обоих. Остальное пролистал. И там немного не то. Не очень похоже на учебник по олимпиадному программированию. Алгоритмы есть и очень подробно, а в начале очень упорно разбирают их оценивание и анализ. Но хотелось что-то от простого к сложному. Сначала простые алгоритмы вроде задача с рюкзаком или найти выход из лабиринта, а потом чуть сложнее как алгоритм дейкстры. А то на это уйдёт слишком много времени. Есть что-то на этот случай или продолжать одну из книг?
>>584416 Тогда и гугли задачник по олимпиадному программированию. И да, за 3 месяца вряд ли успеешь до нормального уровня подготовиться. Увы, но олимпиады (по большей степени) по программированию, это просто заботать бОльшую часть алгоритмов. В любом случае, с++ плохо подходит для олимпиадного программирования.
>>584420 >Тогда и гугли задачник по олимпиадному программированию. Тогда нужен список задач тоже от простого сложному. Его реквестил, но дали книги. >И да, за 3 месяца вряд ли успеешь до нормального уровня подготовиться. У меня уже есть опыт 3 года хуепинания, но я очень лениво готовился. >Увы, но олимпиады (по большей степени) по программированию, это просто заботать бОльшую часть алгоритмов. Но это да согласен. Но благодаря сайту что дали выше смогу хоть задачи по тэгу нужному искать и практиковаться. >В любом случае, с++ плохо подходит для олимпиадного программирования. Самый быстрый и большая stl. Выбор или он или паскаль.
Ещё кто-нибудь даст совет?
6.12303e-016 вместо 0Аноним20/11/15 Птн 00:00:06#318№584430
В результате последовательного выполнения тригонометрических операций иногда получается такая хуета вместо 0. Я знаю про std::setw, знаю про способы округления, речь не об этом. Это абсолютно тот же ноль, просто криво выведенный из-за ограниченных возможностей по точному расчету или это все-таки какое-то очень маленькое число, отличное от нуля? Если сложить его с любым числом, в результате получится это число, но вот если его умножить на что-то, будет уже не 0.
>>584435 Там задачи по сложности, а не их темы. Зачем мне много раз подряд решать задачи на одну простую тему? На http://informatics.mccme.ru/ есть такое разделение по тэгам, но в каком порядке их делать. Например у каждой темы на пике есть ещё подтемы которые тоже разной сложности и пока слишком сложные учить не надо. И при этом нужно по не многу из каждой темы учить.
>>584442 Твой вопрос был: > Это [...] ноль [или] все-таки какое-то очень маленькое число, отличное от нуля? Ответ: сравнивай с эпсилон. Если fabs(x)<epsilon, то считай, что ноль. >>584443 > Впрочем, у меня в любом случае не С11 Это тред про C++, но даже в C есть эти же самые константы, просто под более ортодоксальным интерфейсом: http://en.cppreference.com/w/cpp/types/climits
>>584441 > Там задачи по сложности, а не их темы. Какой вопрос, такой и ответ. Со списком тем сложнее. Порядок тем зависит от того, как глубоко в каждую ты готов погружаться. Как вариант, здесь http://e-maxx.ru/algo/ алгоритмы внутри каждой темы упорядочены по сложности. Можешь пробежаться по «элементарным» из каждой темы, потом по более сложным и так далее.
>>584448 >алгоритмы внутри каждой темы упорядочены по сложности Уже находил, но не понял что там они как-то отсортированы. > Можешь пробежаться по «элементарным» из каждой темы Там такого нет. Только общий случай.
Значит можно там разбирать 1 задачу, а потом гуглить эту тему и искать ещё задачи? Спасибо.
>>584451 >> Можешь пробежаться по «элементарным» из каждой темы > Там такого нет. Нет, есть. Конечно, не абсолютный порядок, но алгоритмы там определённо сгруппированы. > Алгебра (23) > элементарные алгоритмы (20) > Функция Эйлера и её вычисление > Бинарное возведение в степень за O (log N) > ... > Графы (51) > элементарные алгоритмы (4) > - Поиск в ширину [TeX] > - Поиск в глубину
> Значит можно там разбирать 1 задачу, а потом гуглить эту тему и искать ещё задачи? Задачи по теме ты легко найдёшь. От каждой темы тебе нужно знать теорию и алгоритмы. Пробелы в первом обнаружишь, когда будешь разбираться во втором.
>>584456 >Нет, есть. Точно не заметил. Только в первых темах и мало. Ещё не нашёл основных структур данных как стэк или куча, а только какие-то неизвестные мне названия. Их отдельно искать? И что значит [TeX]?
>>584463 Спасибо. То что надо. Осталось только найти сайт где по темам задачки искать можно и отправлять решения на проверку. Что-то типа графы>поиск кратчайшего пути>поиск в ширину. Что-бы быстрее задачки гуглить. Знаешь такой?
Почему корректно работает только при а<6? При больше ведет себя так, как если бы а было = 5. Как исправить? [code] double rrround(double number, int a) { long temp = pow(10, a); return round(number*temp)/temp; } [/code]
Что, блядь, за хуйня у меня происходит? На тестовых файлах всё нормалньо работало, но внезапно наступил обосрамс. Я уже наговнокодил костылей, дабы найти косяк, но так и не осилил.
Короче, читаю байты из файла, получаю информацию о том, сколько байт и начиная с какого байта мне нужно считать. На скрине код и сама консоль.
В g положил результаты операций fread и write. То есть я считал в буфер, а затем из него записал в файл 32788 байт.
И тут же на скрине мы видим, что конечный размер файла НИХУЯ НЕ СОВПАДАЕТ, да и в самом файле часть данных не совпадает. Где проблема? Что я упускаю?
>>584482 Целочисельный тип всегда влезет в double. Может потеряться точность (проебутся младшие разряды), но на результат это не повлияет, так как он записывается же в тот же дабл с потерей точности. Если нужна точность то нужно цеплять библиотеки с большими числами/точностью.
Нужно использовать wb для записи, а не w, дабы работать с файлом как с двоичным, а не текстовым. Теперь понятно, почему на тестовых примерах всё и так работало — не попадались байты совпадающие с кодом перевода строки.
>>584277 Лол, я поставил летом Enterprise, спустя 90 дней оно кукарекнуло, что триал кончился. Кракена нигде не нашел, решил от безысходности ввести ключ, найденный в гугле. И шо бы ви думали? Оно его съело и нормально работает. Видимо, мелкомягкие просто вырубили DRM, лол.
Снова платина. И снова я предлагаю использовать такое разбиение на функции, в котором у тебя не более 1-го вложенного цикла (т.е. 1 внешний, 1 внутренний).
Тогда твои 3 или 4 цикла разобьются как раз на 2 функции. Прервать внешний цикл в любой момент можно при помощи return; прервать внутренний цикл (чтобы продолжить внешний) можно при помощи break;
Продолжить внутренний цикл (перейдя к проверке условия), как обычно, можно при помощи continue;
>>584576 Почему это с уб? Случаи уб четко специфицированы, если ты не будешь пытаться войти в блок, а просто выйдешь из цикла, то ничего плохого не будет.
Но вообще, если у тебя десять, блядь, вложенных циклов, то это плохая архитектура. Поэтому ящитаю охуенным, что нет break с меткой и тому подобного - хуево спроектированная программа должна вызывать страдания и желание саморазвиваться.
>>584599 А у них ведь эта хуйня по подписке, типа как у Creative Cloud, а не как у мелкомягких в Dreamspark? И через год пропадет возможность не только обновиться, а вообще работать, да?
Многопоточность или хуй знает чтоАноним20/11/15 Птн 14:26:17#370№584679
Сап. Для моей проги нужно, что бы я ввел, скажем, строку, но если во время ввода я нажму какую-то клавишу, то произойдет отмена ввода. Я так понимаю, что после запроса строки мне нужно еще отслеживать нажатия клавиш, но как, если консолька ждет мою строку? Аноны, поясните чо да как и почему я долбоеб и должен идти на хуй.
Почему корректно работает только при а<6? При больше ведет себя так, как если бы а было = 5. Как исправить? [code] double rrround(double number, int a) { long temp = pow(10, a); return round(number*temp)/temp; } [/code] >>584507 И как быть? >>584567 Это как? Если задача - вывести таблицу значений функции трех переменных, например?
>>585031 Не сайт, а какое-то тормознутое говно. А про уроки не скажу. Может быть, действительно хороши, но там надо регистрироваться. Но обычно, все эти курсы -- шлак для школьников.
Как идиологически правильнее делать сабж в крестах? Допустим, я пишу либу для внешнего использования, допустим, в ней есть функция, возвращающая результат от деления первого аргумента на второй, то есть действительное число. При этом, надо убедиться, что второй аргумент не ноль, а если он ноль, то вместо результата вернуть false и текст ошибки. Какую-то константу ошибки не зарезервировать, ибо область значений функции - все множество действительных чисел. Делать try-catch извне нельзя, юзер может об этом и не знать. И как быть? union, где один из элементов - структура ошибки с фолсом и текстом? Тогда в if будет проверки делать неудобно (в идеале делать что-то вроде if (func(a,b)) { //... } else { //ошибочка такая-то }
>>585195 1) - Уныло, нагружать пользователя лишней инфой. 2) Еще ебанутее, имхо. Хотя да, вариант, в принципе. Но тогда надо передавать ЕЩЕ одну переменную, которая будет содержать текст ошибки, если он есть. Сам понимаешь, как это стремно. Почему нельзя сделать результатом работы структуру или объединение, содержащее ожидаемый результат и структуру (или что-то еще), содержащую результат работы (тру-фолс) и текст ошибки?
>>585218 Потому что тебе придется городить лишнюю структуру и пользователю, вместо интуитивно понятного пользования функцией, придется работать через эту структуру.
>>585253 Конечно. Вот ты представь себе > в ней есть функция, возвращающая результат от деления первого аргумента на второй
И тут пользователь хочет проверить результат if( func(a, b) < 5.) { doSomeWork(); }
а если возвращать структуру, то так не получится, что делает ОЧЕНЬ неудобным. Я за вариант передачи дополнительной переменной, которая служит индикатором успеха операции (всегда можно перегрузить, чтобы была функция с возможность проерки и без).
>>585254 Поясни. Разве это не просто константы, которые теоретически не могут быть достигнуты при обычных расчётах? Есть что-нибудь такое для строк, например? Или вообще как-то возвращать false вместо результата? >>585257 >то так не получится ПОЧЕМУ не получится? структура.переменная или юнион? >Я за вариант передачи дополнительной переменно Да, годно, если бы была одна переменная, необязательная для передачи, с текстом ошибки. Если она непустая - значит ошибка. Но не хочется каждый раз эту переменную мутить. Нельзя же вроде сделать необязательно переменную по ссылке. Или можно? И что должна возвращать такая функция в случае неудачи? Рандомную строку? Просто return; ?
>>585278 >Чтобы сравнивать структуру с каким-либо значением, придется реализовать операторы сравнения. Не структуру, элемент структуры. Ну вроде if(structName.error) - так нельзя разве?
>>584567 >Прервать внешний цикл в любой момент можно при помощи return; Нельзя нихуя. Набираю - ошибка, а если return(1) - это прекращает работу всей main. Не закидывать же цикл в функцию.
>>585316 >Не закидывать же цикл в функцию. Именно это и делать. Если функция сделал всё необходимое, то выходишь из неё, осуществляя заодно и прерывание всех циклов.
>>585322 Хейтер. >>585323 Двачаю, я так и смог. Когда-то давно проходили всякие паскали, когда ещё был студентотой. Потом, когда в жизни возникали какие-то задачи — я реализовал их на дельфи, ибо не было времени разбираться с чем-то другим. Потом время освободилось, а задач меньше не стало — поставил студию, поковырялся в основах, разобрался в основах и начал реализовать свои задачи уже на плюсах. Уже после этого занялся чтением соответствующей литературы.
>>585340 Опять же - инлайнить ли функцию за тебя решает конпелятор, если даже использовать __forceinline и будет какое нибудь макакачанье с матанами-сортировками и куча заинлайненого говна - куча инлайнов тоже не факт что поможет в оптимизации. https://ideone.com/bXrZfP В таком безобидном гото ничего страшного таки нету.
Крестаны, есть ли в природе нормальная система сборки, как cargo в расте/cabal в хаскеле/dub в d/gems в раби? Чтобы хотябы приблизительно была возможность работать под прыщами и спермой и тащить либы откуда нибудь с гитахаба?
>>585614 Бывает, что условия меняются, часть фора удаляют, и получается вот такая хуйня. Но в твоем случае прозреваю, что код писал кто-то далекий от крестов and вместо && на это указывает, так никто не пишет и не дочитавший мануал до while, лол.
>>585658 И здесь тебе никто не мешает одной строчкой сделать, если следовать духу языка и вместо генерации слов-подстрок итерировать по исходной строке. Берешь find и рекурсивно применяешь с пробелом. Способов очень много, разница в том, что твой скриптоязык диктует единственный правильный способ передачи этих слов, а тут ты вынужден СТРАДАТЬ ОТ ВЫБОРА.
Я пытался запилить A*, делал по псевдокоду из википедии.Я уже третий час бьюсь и пытаюсь понять, почему эта хуита проверяет даже заведомо невыгодные ветки. И я нихуя не могу понять, почему так... Это беда.
>>585818 Судя по всему, ты хотел вывести сразу весь номер, составив его из трёх пунктов. В любом случае писать cout << t2 не получится, если только не перегрузить <<. Поэтому скорее всего тебе нужно писать в cout, как в написано в cin.
>>585844 C++ - немного не тот язык, который делался для удобства разработки как скала и разные функциональные язычки. И с этим легаси твоих требований он выполнять не начнёт.
>>585958 Ну, хорошо. Теперь расскажи нам, как можно добиться производительности си и обеспечить такой же уровень простоты, как в джаве (значит, повысить уровень абстракции).
>>585868 > C++ - немного не тот язык, который делался для удобства разработки как скала и разные функциональные язычки. Не вижу принципиальных отличий join и split от std::accumulate и std::generate. Только потому, что все привыкли, что в крестах нет этих функций, не значит, что это хорошо. Это плохо. И тем более не стоит кичиться тем, что их нет ко-ко-ко кресты не скриптопараша ко-ко-ко у нас даже string split не встроен в ядро ко-ко-ко Тем более если вы пишите > С++ давно уже приблизился к скриптовым языкам по удобству, и при этом превосходит их по скорости. (С чем я согласен.) Почему бы тогда не сделать часто используемую и нужную функцию в язык? > И с этим легаси твоих требований он выполнять не начнёт. Почему? Технически он и сейчас выполняет с функцией strtok. Всего-то нужно стандартизовать идиоматичную «обёртку» на итераторах.
>>585862 :-) Ну ты же не поленился ответить, значит интересует. И нет, не угадал.
Аноны, посоветуйте какие-нибудь 2d игровые движки на крестах. UE4 не предлагать, нужно что-то довольно простое, с упором на программирование, что-то похожее на libgdx.
Анон, мне для устройства на работу мечты срочно нужно вникнуть в основы сабжа. Есть на примете какая-нибудь книжка или викиучебник, да хоть видеоуроки, где просто, доступным русским языком, без задроства, будет показан каждый паттерн, а при нем - краткое описание, что, зачем, какие проблемы устраняет, зачем придумывался, какие плюшки сулит, внешний вид на плюсах и главное - какой-нибудь жизненный пример, где будет показано, какой же этот паттерн охуенный и как все стало круто.
>>585996 accumulate и generate не встроены в ядро, это часть стандартной библиотеки. split нет, потому что она противоречит идее stl - работе с функторами и итерированию по коллекциям.
>>586052 Тогда можно делать её не методом класса string, а просто функций из <string> который будет строку конвертировать в любой другой контейнер с выбранным разделителем. Но я не совсем понимаю что там противоречивого если сделать метод. Это же удобнее.
>>586137 Перечитай мой пост еще раз. Это как если бы ты предложил хаскиблядкам включить в их библиотеку функции для императивной работы. Хуле, никому же не мешают, пущай будут, да?
>>581583 (OP) >Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам. Как их изучать? Скоро меня в вузе будут учить этому, но любопытно же. Посоветуйте литературы какой-нибудь. И о каких алгоритмах идёт речь?
>>586423 Там темы из википедии. Могу не читая книгу, а только посмотрев содержание все легко освоить. Ничего сложно, требующего углубления и похожего чтобы можно было в одну книгу вписать нет. Сначала 5 скучных глав про оценку сложности алгоритма. Потом по полтора алгоритма на главу. 2 сортировки пару алгоритмов на графах и строках. Даже про структуры данных главу не нашёл.
>>586577 Не знаю. Прям совсем по верхам я пробежался, прочитав книгу "код. тайный язык информатики". Верхам верхов. Наверно, 1000 страниц это немного, если интересно и не слишком сложно. Но если есть что-то среднее, то есть попроще, то посоветуй.
Блядь, ребят, ну потерпите чутка. Тред ушел в бамплимит за пять дней, мне днем работать надо, а перепил шапки там знатный должен быть. И стихи еще надо обновить, а кто-то уже пересоздает со старыми, лол. Потерпите, братцы. До завтра все будет, мамой клинус.
Допустим, у меня есть вот такой метод в классе-шаблоне: inline virtual Type construct(const std::string &name) const { return Type(name); }
В классе-наследнике я его переопределяю: Nio::Object::Object construct(const std::string &name) const override; Nio::Object::Object Nio::Managers::ObjectManager::construct(const std::string &name) const { return Nio::Object::Object(this->geometryManager, this->objects.size(), name); }
Переопределяю, потому что стандартное определение вызывает конструктор, который принимает только 1 значение - string, таких объектов у меня будет больше всего. Но для построения Nio::Object::Object мне нужно передать в конструктор 3 параметра. После переопределения этого метода компилятор всё равно продолжает ругаться на то, что класс так посторить нельзя. Ругается на старое определение метода. Новое как будто не видит. Как быть?
>>587216 Ну, очевидно, что у тебя не работает виртуальность по каким-то причинам. Навскидку: ты вызываешь метод от имени самого шаблонного объекта, а не ссылки/указателя на него. Или ты вызываешь метод в конструкторе/деструкторе шаблонного класса, а в них виртуальность не работает. Или еще что-то подобное.
>>587225 Как привести указатель на int к указателю на string? Правильно - никак, нужно разыменовать и сделать static_cast, ибо представления double и float в общем случае совершенно разные, как и у int и string.
Поясните за static_cast, dynamic_cast, reinterpret_cast, программисты! Зачем всё это нужно? Почему я всегда писал (Type2)type1 И всё работало? Для чего эти новые для меня слова?
>>587233 По идее, нет. inline же работает как рекомендация, просто заинлайнятся только явные, невиртуализованные вызовы. Единственное - я не уверен насчет сигнатуры, вроде бы inline не является ее частью, но если вдруг, то у тебя будут разные сигнатуры в родителе и потомке, вместо переопределения получишь перегрузку. Попробуй убрать inline, чем черт не шутит.
>>587236 Звиняй, Мыкола, бананьев нема. ВНЕЗАПНО, любое арифметическое выражение вычисляется стеково, и ты неявно хранишь кучу промежуточных результатов, это не страшно.
>>587237 Нет, компилятор меня бы предупредил, что, мол, нет никакого переопределения override же в конце. А так - убирал inline - никакого эффекта. Один хрен, этот метод уже определён в хедере, так что inline тут никакой работы не делает.
>>587251 Чтобы получить другое число, надо прочитать сколько-нибудь байт с места, где находится указатель. Прочитаю 4 - получу одинаковые числа. Прочитаю 8 - разные.
>>587255 Бля, ну не тупи. Ты хочешь привести float к double. Но внутри представлений числа 1, например, у float и double будет различаться содержимое, как ты ни обрезай биты.
>>587339 Потому что это последовательный перебор кастов 1, 2, 3, 3+2 или что-то в этом духе, пока не скомпилируется. Если скомпилируется первое, что скомпилируется, а не что нужно, ну ты понял.
Т.е. если тебе нужно 3, а скомпилировалось 1. Пускай меня поправят, кстати. Но один чёрт я не знаю начинки сишного приведения потому, что использовал его (по глупости) только для "значение-значение", а в таком случае следует использовать static_cast.
>>587329 Никогда их не читал. Без обид. В шапке в первую очередь хочется видеть советы, ссылки. Может опустить стишки вниз вместо посылания всех нахуй?
UNIT-ТЕСТИРОВАНИЕ Как-то давно писал на джаве и юзал TDD. Было прикольно. Теперь пишу на плюсах и начинаю довольно большой проект. Хочу угареть по юнит-тестам и писать их для всего. Какие либы стоит юзать? Или есть какой-то стандартный функционал? На джаве я помню была отдельная либа. Алсо, что почитать про это? Как, например, тестить что-то кроме функций? Какие-нибудь перегрузки операторов для классов? И вообще, что нужно еще знать? Буду рад любым дельным советам.
>>587629 Погуглил и всё какое-то фиговое. Какой-то плагин Eclipse, который похоже не поддерживается, без всяких мануалов и описаний. Какие-то нерабочие ссылки на стаковерфлоу. Чем пользуется анон?
В моей игре в классе GameState есть unique_ptr на World(который собсна за саму игру отвечает без ничего лишнего). В гуе GameState есть кнопка перезапуска игры, следовательно было бы неплохо просто переинициализоровать World. Вопрос в том, как корректно? world.reset(); world = std::make_unique<World>(args..) Вот так будет без UB?
Остались своей скверне мы верны.
И где тебе абстракций строй явился,
Лишь байты нам отчетливо видны, -
Промолвил он, - как близоруким людям;
На жизнь в страданьи мы обречены,
Но веру вашу принимать не будем:
Как не поймет церковной чистоты
Развратный содомит, погрязший в блуде,
Так ваши парадигмы нам чужды".
FAQ:
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
+ C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь).
+ C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задач.
+ C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература:
Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
<устарело> Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl
<устарело> Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
<устарело> Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4527.pdf
Тонкости языка (для гурманов):
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG
Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Ссылки:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru/
Блог с хорошо расписанными фичами новых стандартов - http://scrutator.me/
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/ или более подробно на ангельском http://en.cppreference.com/w/
Блог Герба Саттера (на ангельском) - http://herbsutter.com/
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru/
Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++/
Видео с CppCon (на ангельском) - http://www.youtube.com/user/CppCon/videos/
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq/
Куда писать код:
Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Софт и библиотеки:
IDE, призванная похоронить Visual Studio пока не особо получается. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion/
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net/
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com/
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock/
Йоба-набор библиотек, способный удовлетворить даже самые скотские фантазии - http://www.boost.org
Библиотека для удобной высокоуровневой работы с сетью (ахтунг! утягивает за собой boost, openssl и даже Аллаха) - https://casablanca.codeplex.com
Простая в обращении библиотека для работы с графикой и аудио - http://www.sfml-dev.org
И многое другое - http://en.cppreference.com/w/cpp/links/libs
Памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий: