>>961905 А то ты WEB-GUI под крестами собрался писать, кловн. Ничто не мешает использовать кресты для бэкенда и яваскрипт для фронтенда (где ему и самое место), другое дело, что на крестах это будет огромный велосипед (еще и неизвестно какой), вместо использования уже обкатанных java или asp.net. Каждый язык занимает свою нишу.
>>961919 Javascript нет места нигде. С одной стороны новое поколение гуманитариев, которые рвутся в кодинг и не могут осилить ничего кроме JS и пытаюстся написать на нём небо и аллаха, с другой стороны программисты, которые годами пытаются выйти за грань реальности в попытках оптимизировать интерпретаторы этого говна, и ничего хорошего из этого всего не выходит.
>>961977 Но он свою нишу занял ведь и конкурентов у него нет, насколько я понимаю (или я слишком отстал от жизни). Опять же, навряд ли от него будут оказываться, по крайней мере, в ближайшем будущем, хоть он кому-то и не нравится. Кроме того, чтобы найти замену JS, его необходимо конкретно распиарить и перетащить опять же на него сообщество разработчиков/говнокодеров/пользователей и прочей шелупони, что также требует большой работы. Тот же Go, наверно, никому в хуй бы не уперся, если бы в свое время google не стала его пропихивать куда ни лень. Ту же самую науку провернула Microsoft со своим C#, только раньше. А у всех отростков или языков, которые внезапно появляются, и так же быстро умирают, без должной поддержки будущего нет, несмотря на то, какие бы пиздатые концепции в них не были заложены или с какой простотой и эффективностью реализовывались бы программы на них. Они так и будут игрушкой для хипстеров и прочих рукоблудов.
>>962005 Ну дернуть удаленный метод чтобы он вернул мне строку huipizda это я еще могу понять. Но как отрисовать интерфейс написанный на другом языке нет.
>>962020 это ты прекрасно живешь в своем манямирке, а на Расте надо будет постоянно биндинги пердолить (или брать хрен знает насколько проверенные на стороне) и трахаться со сборкой.
>>962052 Есть генераторы биндингов (это настолько сложная хуйня, что она должна быть проаерена, кек, ты прям жявамакакен только и делаешь что фреймворки скрепляешь друг с другом), а про еблю со сборкой в плюсотреде слышать даже не смешно.
Няши, помогите, не врубаюсь что не так. Писал программу под opengl (sdl) на маке, там в конфигурационный файл для qmake вписал: INCLUDEPATH += /Library/Frameworks/SDL2.framework/Headers А сейчас переношу на линукс, и непонятно какой путь включать.
Нигде не могу найти инфу про fork(), как использовать, зачем оно надо и что делает. Есть описание в терминах процессов и все. Книгу может посоветовать может кто?
Как в плюсах вернуть некий тип от enum? Образно говоря, есть enum numbers { one; two}; Я вызываю функцию из другого класса которая делает return one; Как вызывающий класс понимает что это? Надо и в нём делать такой же enum?
Котаны, есть ли инфа, собираются ли вообще в коммитете хотя бы мусолить тему или мб уже даже черновик на эту тему есть? о стандартизации опций компиляторов?
>>962398 Ахуенная шуточка. Самое весёлое что все, кроме спермокомпилера поддерживают как минимум один основной базовый набор команд и используют гнутый стиль CLI.
>>962393 Описать стандартом правила манглинга, стандартное соглашение о вызовах и прочую хуйню. Модель памяти же стандартизировали как-то.
>>962404 > все, кроме спермокомпилера gcc, clang и icc. Остальные не поддерживают.
>Описать стандартом правила манглинга Зачем? > стандартное соглашение о вызовах И что делать на ARM, если стандартизуют, что первый аргумент передаётся в RDX? > Модель памяти же стандартизировали Для абстрактной машины.
>>962402 Это так значит шутка что ли? Это он на твоей x86/x86-64 машине в 32 битное значение устанавливается, потому что его доставать оттуда проще будет. Ничего не мешает тебе объявить enum с заданным размером значения (цэ 11): http://en.cppreference.com/w/cpp/language/enum
>>962407 >gcc, clang и icc. Остальные не поддерживают. Прибавь к ним msvc - и получишь все живые компиляторы, у остальных распространение на уровне хачкеля (если не учитывать всякую закрытую залупу для соснолек прочего, хотя мне кажется там сплошные форки гцц как и в мире мк). >Зачем? Потому что закрытый софт и регулярное обновление компиляторов - это анальная боль. Да, для с точки зрения программиста конечно тупая ситуация, но бизнесу похуй. >И что делать на ARM, если стандартизуют, что первый аргумент передаётся в RDX? а) Класть хуй на стандарт; б) Стандартизировать на распространенные архитектуры отдельно (их всего-то грубо говоря 3-4 штуки). >Для абстрактной машины. Учитывая сколько говна лилось и сколько ее пилили в той же жаве, кажется мне, что она тоже говно, хорошо что мне не приходилось с ней работать, лол.
>>962419 Ну как сказать. Я вот сегодня послушал челика, который рассказывал что был на вчерашнем ивенте яндекса, и в 17-м стандарте вместо 128 и 256-битных интов как в гцц будут просто автоматически растущие в ^2 инты, а так же классы с апкастом в компайлтайме при переполнении разрядной сетки и прочего, а так же в constexpr будет свой std::vector и у меня возникло ощущение, что клоуны в коммитете сидят.
>>962427 А че там самое главное, когда эти пидоры введут статическую рефлексию, мне уж очень интересна эта тема, потому что уже использование protobuf'а и прочих, без вранья, костылей, доебало, когда можно было бы применять свои типы с ленивой загрузкой, COW и прочими ништяками.
>>962431 Лет через 10. А ты пока держись там, наслаждайся новыми интами и оператором <=>, всего доброго и хорошего настроения. >>962436 Зато фс в стд завезли, радуйся барской щедрости!
>>962442 Ну пока генераторы схем есть итак неплохо. В принципе, думаю под себя для работы наковырять один небольшой, чтобы можно было определять пользовательские типы, да вот только все это костыли, как ни крути, хочется нативной поддержки от языка таких трюков.
>> <=> Че ето такои? Это пришло на замену триграфам?
Анонасы, хочу сделать сигнал в одном классе а слот в другом. Просто лютый бред писать например реакцию на клавиши в классе отображения. Это вообще реализуемо? Попытался пойти напрямик - QObject::connect: Cannot connect (null)::pressedButton() to (null)::receiveKey()
>>962523 Не только. Возможно, менеджеры пакетов на плюсы завезут или хотя бы можно будет как в жабе подключать либы (или около того). Профит все получат и сразу.
>>962592 В не-абсолютные пути точно умели в 2010 студии. Раньше - не знаю. Так что не какай жиденько, а делай уроки, завтра в школу. Расскажешь всем как ты круто линукс устанавливаешь.
Всем привет. Вот хочу я найти библиотеку для работы с деревьями не могу этого сделать, гугл по запросу c++ деревья, выдает только детские рассуждения с хабра. Научите.
помогите с методом зейделя пожалуйста: мейн: https://pastebin.com/gA0411vF заголовочный: https://pastebin.com/pNvcCRJ3 файл с матрицей: https://pastebin.com/dj6q7R8u правильный ответ: X1 := 4 X2 := 0 X3 := -1 моя проблема скорее всего находится в функции zeydel, которую я скопипастил с википедии, однако я мог там что-то накосячить(но я проверял). Помогите исправить пожалуйста программу.
>>962849 Ну так в крестах ничего сложного нет, по сути, а с приходом c++11 (или сторонних либ еще ранее), тебе даже не нужно ебать всем мозги по поводу автоматического высвобождения ресурсов, потому что для этих дел есть unique_ptr и shared_ptr.
>>963143 Твоя фраза должна звучать так: "я тупо не видел ничего другого в глаза, вот и ебусь в них". >>963161 Если писать всё на подсчёте ссылок, то получится тормозное говно как на яве (единственный плюс — быстрый стартап, но в когда объекты начнут дохнуть получим вообще петон).
>>963249 У меня был такой чувак на прошлой работе, все хуярил обычными указателями, память у него текла пиздец, зато БЫСТРО (ну, он так думал, профайлер он не запускал ниразу). И еще он в 93ьем написал свою уебищную STL и до сих пор ее использует. Это не ты случаем?
Я пришел к вам из C# иди нахуй отсюда чмо. Посоветуйте актуальных ресурсов (желательно сайты) с введением в многопоточность в C++. А то что-то тут совсем не Thread'ы и Task'и у вас, или я ничего не нашёл.
>>963267 >>963261 А теперь немножечко более живой пример, с парой хуиток которые компилятор не может просто взять и выкинуть (я конечно понимаю, что местным похуй, и самое главное статичные данные известные на этапе компиляции обернуть в смартпоинтер, но всё же попробую достучаться):
>>963261 >И еще он в 93ьем написал свою уебищную STL и до сих пор ее использует. Это не ты случаем? Не, братан, я вообще STL в рот ебал. Хотя в чём-то с этим стариком солидарен — лучше уж свой костыль, в действиях которого хотя бы можно быть уверенным и который спокойно будет рефакторится и отлаживаться без ебли в сральник.
>>963384 Если колл стек твоего приложения не вмещается в l3 кеш - ты занимаешься каким-то пиздецом (еще и с нестандартными настройками кнопилятора). Если это компулсори мисс, то и ты и я будем ждать 300 циклов в любом случае пока твоя и моя залупы загрузятся из памяти.
>>963261 > он в 93ьем написал свою уебищную STL и до сих пор ее использует. Все правильно сделал. В любой более-менее нормальной конторе пользуются собственной библиотекой шаблонов.
>>963415 >Все правильно сделал. В любой более-менее нормальной конторе пользуются собственной библиотекой шаблонов. Вся суть крестов: нахуй нам нормальная стандартная библиотека, мы лучше будем велосипеды делать.
>>963375 >Разница по количеству инструкций всего-то в... 2 раза. С unique_ptr 22 инструкции C голым указателем 18 22/18 = 11/9 = 1.(2) Даже близко не в 2 раза. Или ты, дебил, в случае unique_ptr с 25-й по 47-ю строки тоже считал?
>>963375 >Разница по количеству инструкций всего-то в... 2 раза. Как оказалось, разница даже не в 1.25 раза и это при том, что код с unique_ptr не течёт при эксепшенах.
Приведи немножечко более живой пример, где экспепшены могут быть и гарантируй то же отсутствие утечек для голого указателя с помощью try-catch блоков. После этого попробуем посчитать инструкции, ха-ха.
>>963709 Уже есть такое предложение. Остается только ждать. Я лично думаю, что хотя бы дебаггер для MSVC было бы неплохо заиметь для начала, но с другой стороны у меня треть кода в проектах красная.
Где можно найти кроссплатформенный макрос для эскспорта из динамической библиотеке? Хочу собирать .so и .dll с помощью GCC Писать __attribute__ ((visibility ("default"))) и __attribute__ ((dllexport)) перед каждым классом или перед публичными методами тоже?
>>963772 И вот ещё в догонку вопрос, как в cmake сделать подпапку как цель сборки? То есть когда пишешь make test cmake запускает subdirs(tests/) tests/test_executable
В tests/ лежит другой CMakeLists.txt, который собирает test_executable
Сейчас я просто написал subdirs(tests/) и тесты собираются вместе с основным проектом, это нехорошо
Двач, что-то не гуглится нубский вопрос, подскажи, можно ли явно удалить локальный объект? { Или единственный вариант это только загонять его в область видимости? }
>>964375 Обьект на стэке умирает по выходу из стэке. Т.е. да, уебанские фигурные скобки, и ничего больше. Возможно, разделить куски кода на лямбды и их дергать, что, практически, тоже самое
>>964375 А смысл, если место на стэке всё равно не освободится. Ты хочешь постоянно создавать и удалять объект в одной области видимости? Или освободить ресурс?
Всем здарова. Где-то год назад видел, но потерял. Толстенький pdf, где разные куски кода С++ дизассемблили и разбирали, что получается. Получилась такая специфическая книга по реверсу, си++ и оптимизации. Мб кто-нибудь видел такое
>>964599 > "Мусолить" не означает "сочинить ABI". Не сочинять, а чтобы у каждого был свой ABI? > обязать всех авторов ОС делать ABI. Да их и обязывать не надо, они сделали каждый свой ABI. Короче, проблемы нет.
>>964616 >Пальцем в жопу. Пальцем в жопу это не луп. Вот если рот к жопе пришить, может луп получиться. Но вообще goto назад это луп. > Блядь, я не засну сегодня. Что не так?
Господа из ДС2, думаю о том, чтобы попробоваться в Транзас, если в чонить более успешное не выйдет. Сейчас работаю в мелкой конторе без юнит-тестов и нормального цикла тестирования вообще, без проработки архитектуры и всякого такого прочего. План - поработать годик в конторе, где все это есть и набраться опыта. Кто-нибудь там работал, есть что рассказать?
>>964608 Ихихихи, ну ты и лалка. QEventLoop занимается тем, что продолжает выполнение запланированных событий (которые были вызваны QueuedConnection или BlockingQueuedConnection способом), при этом, если его завершить, то сначала завершится обработчик активного события, а потом продолжится выполнение твоего кода после QEventLoop::exec()
Как сделать чтобы объект целиком был в другом треде? Хранить std::thread и делать detach() в конструкторе? Когда из основного потока вызываются методы класса, они ведь в другом потоке будут выполняться? Когда-то работал с тредами в Qt, сейчас уже всё забыл
>>964841 Возьмут, почти наверняка. Есть пара вакансий, по которым я полностью прохожу по обязательным условиям и по большинству дополнительных. Ну и объективно я не особо говнокодер, способен закодить что-нибудь на бумажке, архитектуру гибкую набросать, в алгоритмах разбираюсь и даже в общение могу.
Вопрос же всё-таки не о том, возьмут ли меня, а в том, стоит ли туда идти?
>>964844 У них вакансии открыты годами, оптимистичный ты наш совсем-не-говнокодер, но сходи, с тебя не убудет) А вообще сейчас как-то много сионистов из транзаса бегает по собеседованиям.
Как быть с декструктором объекта данные которого перемещены через std::move()? Везде хранить поле bool is_moved чтобы не выполнять деструктор дважды? http://ideone.com/Eu11FI
>>964894 >Как быть с декструктором объекта данные которого перемещены через std::move()? Перемещение должно оставлять объект в пригодном для разрушения виде. > Везде хранить поле bool is_moved Обычно это не нужно.
>>964909 >move, в основном, нужен для двиганья указателей. Просто в обьекте откуда муваешь, ставишь указатель на nullptr, и все ок Блять, один нюфаг который хочет дебильной хуйни, второй либо тоже нюфаг либо просто дебил.
move() только то и делает, что свапает указатель с нулптром (но стандартом это не оговаривается, как минимум в одной из версий гцц указатель просто копировался — ведь п-перформанс жи, так что надо смотреть в конкретной реализации std), данные он вообще никак не трогает.
У меня вот вопрос к эвангелистам раста вроде этого >>961847 — вы серьёзно считаете что ваша хуйня может стать широкоиспользуемым языком, пока тут пол треда задают вот такие вот вопросы >>964894 и вот такие вот ответы за три сотни >>964909 ?
>>964948 Мой ответ касается в первую очередь того ответа, но и твой вопрос покрывает — просто проверяй свой указатель в деструкторе перед удалением. Ну или просто иди нахуй
Неофит ИТТ. Недавно перешел на cpp с C#, пишу в visual studio. Насколько я знаю, в VS VC++. Дак вот, проект cpp в VS компилируется в байт-код как проект на C#, или только если в настройках cpp проекта включить "Использовать CLR"? Или все проекты VC++ в VS хуячатся напрямую в машинный код и для запуска никакие .net'ы не нужны?
>>964956 Ну вот GCC был на С написан, а потом его переписали, насколько знаю весь, возникли проблемы с бутстрапом и стандартами. Все порешалось, но теперь компилятор собирается хуй знает сколько, выжирая кучу места на диске. Это же простая утилита по сути.
Можно сделать темплейт чтобы убрать указание типа при вызове функции? http://ideone.com/ca7dQt У меня не получается, компилятор так пытается кастовать один тип в другой
>>964980 Ладно, пришло время окончательно закопать идею с полиморфизмом на стеке Я хотед сделать оператор, например [], чтобы можно было вытаскивать переменные через префикс scalar = perl["$var"] array = perl["@var"]
Когда доделаю весь функционал придётся всю работу с переменными переделать на указатели, на стеке слишком много ограничений
>>965010 Вероятно, ты не сможешь завести программу, если везде повесишь. Ну и если вдруг тебе придётся в этом случае убрать constexpr, следом упадут связанные функции.
Привет, аноны. Не знаю, туда пишу или нет. В общем, хочу вкатиться во фриланс. Чего умею - писать коды на c++ для определенных целей, занимаюсь этим постоянно года 2 или 3 по работе. Чего хреново умею - шарить в оптимизациях, всяких утечках памяти и прочей программистской кухне сам по образованию не программист, на работе использую C++ только как костыль для решения конкретных небольших задач, прогами этими пользуюсь в основном только я, иногда коллеги, которые прогать умеют еще хуже, чем я. . В общем, как такие днища навыки применять, чтобы помимо основной работы можно было наварить около 10 рублей, работая раз в неделю? С чего начать?
Scalar ж var = perl.getScalar("my_variable") var->setValue("huita"); delete var
(при том что Scalar содержит указатель на Си данные, которые продолжат жить в куче) ёбаный стыд... Как-то занимался играми, там из-за наличия основного цикла и событий легко подчищать умершие объекты, а тут нихуя, бери и пиши сборщик говна с нуля
>>965054 Грубо говоря class Scalar { InternalScalar ж ptr; ...куча методов... } ;
class Array { InternalArray ж ptr; ...куча методов... } ;
Учитывая что они хранят всего лишь указатель и не контролируют его (этим занимается интерпретатор с подсчётом ссылок), логично размещать все объекты на стеке
Но без наследования от общего предка с приведением типов туда-сюда архитектура слишком ограниченная, придётся возвращать new Scalar из функций
динамический полиморфизм (на вирт функциях) работает через косвенные обращения - через указатели для объектов созданных в куче, через ссылки для объектов созданных на стеке или в глобальной памяти.. статический полиморфизм реализуется через шаблоны.. ad hoc полиморфизм посредством перегрузки функций..
>>965109 Да и вообще, так ли уже тебе нужны 2 класса? В контексте того, что ты нам показывал - это изврат. А что там тебе в реале нужно, ты ещё особо не показал.
>>965103 Задача - аналог liblua, достаточно быстрый для использования в играх Основная проблема - прямой вызов С++ функций внутри eval() и require(). Пришлось сделать XS модуль, через который можно в рантайме создать функции в main:: или другом пакете и из них вызывать С++ коллбеки. Вызов получается не прямой, зато есть полный контроль над стеком, то есть в созданной функции можно свободно принимать и возвращать массивы Может тебе известен другой способ? Я весь интернет перерыл в поисках
Код может залью через пару дней, сначала надо определиться с моделью хранения указателей на переменные, чтобы избавиться от вот этого пиздеца (везде должно быть Variable)
Какие то вопросы в треде освещаются скучные. Я тут ожидал больше архитектурно-концептуальных ответов, а тут один неосилятор доказывает другому как с его точки зрения STD работает правильно.
>>965107 Програмчую, фабрике владеть этим указателем большого смысла далее нет. Но геморой может быть с уникальным указателем на куче, случайно можно проебать, если реально где-то в разных местах используется.
Тут точнее говорить - либо фабрика должна отдавать шаред ибо таков замысел - фабрика шаредпоинтеров, или же очень внимательно следить за циклом жизни в скопе.
>>965192 Поразбирай парашу, написанную с их применением. В десятках часах, разыщи же ту строчку кода, которая сука меняет состояние этого объета. Убедись, что другая строчка кода в двух папках левее в другом cpp перезатирает состояние объетка, и от этого все работает хуй пойми с какой предсказуемостью..
А потом возвращайся, и дай нам ответ на этот вопрос.
>>965195 Так, хорошо. Но как быть с теми случаями, когда доступ к какой-нибудь хуйне нужен часто и из очень разных классов например в какой-нибудь QStatusBar сообщения всякие передавать?. И где о таком вообще можно почитать что-нибудь? Если не понятно, что я хотел сказать, могу постараться поподробнее объяснить
>>965198 Создаешь интерфейс IStatusBar. У него метод IStatusBar::addMessage(const std::string& message) = 0; Твой статус бар реализует этот интерфейс. Передавай этот указатель туда, где нужно его использовать по иерархии композиции.
В том и суть, что хороший дизайн требует передачи такой штуки только туда, куда по логике нужно его передавать. А плохой - куча вложенных друг в друга обхектов, каждый из которых тащит указатель на это. НО даже это лучше глобаьного объекта.
Другой пример - интерфейс доступа к настройкам. Казалось бы, настройки приложения реально глобальные. И делай их глобальными. И да, можно, если каждая сущность хранит их в своей секции. Но как только кто-то начинает менять настройки другой, чужой сущности - тут начинается херня, и делать так не стоит.
>>965203 Если честно, то я не совсем понял, а чем это лучше. Ведь точно также все эти классы будут тащить указатель на мой statusBar. И точно так же я буду разгребать это говно
>>965209 В твоем случае используй то, что лучше вписывается в общую архитектуру. Если нигде не использовал интерфейсы - то не используй. Если везде тащил указатели - используй указатели. Если синглтоны - то синглтон. Решение должно быть обосновано как-то и гармонично. Ты обосновал - часто требуется доступ из разных мест, за гармоничность тебе решать.
И в твоем случае, обезательно передавай в метод - кто послал сообщение, иначе не разгребешь.
Вроде получилось пнуть компилятор чтобы генерировал любое количество версиий одной функции http://ideone.com/eJl8Cv Пускай код засран, зато всё чистенько на стеке
>>965221 А вот так получается выглядят сигнатуры всех моих шаблонных методов. Каждый вариант пишется вручную, там всё равно разные си-функции дёргаются везде Завтра займусь реализацией
Что такое WinAPI в объявлении функции типа int WinAPI winMain(int argc, char* _args){} ? Где можно почитать об этих квалификаторах или как там мать их?
>>965350 Long ago, in a distant past, когда вызов функции был чуть более, чем обычным goto с сохранением адреса возврата, надо было придумать, как передавать туда параметры и как получать результат. И разные люди придумали и использовали разные способы - кто в стеке, кто в регистрах, а кто вообще в памяти. Так что вызывая какую-либо неизвестную функцию, она вполне могла невозбранно затереть твои регистры, не предупредив. Стало быть нужно помечать, какая функция как работает с параметрами, так и появились конвенции о вызове.
>>965300 Поставил нормальную IDE Eclipse, теперь всё собирается. Странно, всегда щитал нетбинс годнотой, по крайней мере в проектах на php и js оно меня ещё так не подводило
>>965406 Чет тоскливо. Плохо себе представляю, как можно получать удовольсвтие от кодинга на тормозной машине. Может купить старенький Сэнди-бридж на авито тысяч за 10?
>>965408 У меня Ivy Bridge, что вроде бы даже новее чем Сэнди. Ты уверен что на б/у говне за 10к студия будет идти лучше, чем на игравом ноутбуке за 60к?
>>965393 Твоя проблема в том, что программировать надо головой, а не IDE. Студийные макаки обмажутся своими гигабайтными тормозными монстрами и потом не могут высрать ни строчки кода без них.
Обмазался тут новыми инициализаторами, возник вопрос. Можно ли использовать запись std::vector {5}, чтобы создать вектор из пяти пустых элементов, как в случае std::vector(5)? Но создается вектор с одним элементом - пятеркой, видимо из-за конструктора, принимающего initializer_list. Можно ли добиться такого поведения со фигурными скобочками? Хочу использовать такую инициализацию везде вместо обычных скобок.
>>965454 Ох лол. ИЛИТА в треде. Прости, я сейчас пойду удалю студию, и винду даже удалю. Поставлю LOONIX без иксов даже, и буду в виме пердолиться. Ведь результирующий продукт и скорость разработки не важны. Важно, что ты ИЛИТА и пердолишься в ВИМЕ
>>965463 Я тоже так думал, пока меня не пересадили со студии. Красноглазая залупа и хваленый ДЖЕТБРЕЙНС даже близко не валялись. А что там в виме - мне даже страшно представить.
>>965454 Владелец квантового кластера? Если запихнуть вим мегабайты VimScript через плагины и довести фунционал до сносной IDE, он будет работать медленее студии.
>>965453 qt creator, atom, kdevelop, gnome builder, sublime text, emacs, vim. Это неполный список легковесных и быстрых сред разработки. А ты иди скачай еще один апдейт студии на 5 гигабайт.
>>965486 Да, среди перечисленных он самый тормозной. Но все равно выигрывает на фоне говна на джаве, моментально отжирающего всю память и студии, которая весит 10 гигабайт и устанавливается два часа.
Программисты 300к\сек, подскажите, нахуя нужен динамический массив? >при объявлении статического массива, его размером должна являться числовая константа, а не переменная. В большинстве случаев, целесообразно выделять определенное количество памяти для массива, значение которого изначально неизвестно. Но я все равно не вхуяриваю, для чего это надо. Если сказано, что должна быть константа, но почему бы после получения размера массива от пользователя просто не использовать ту переменную. гуглил - нихуя. И что за некий указатель p_darr?
>>965540 >Если сказано, что должна быть константа, но почему бы после получения размера массива от пользователя просто не использовать ту переменную. Потому что константа, определяющая размер массива, должна быть известна на этапе конпеляции. Очевидно, что статический массив находится прямо в экзешнике, и поэтому ресайзить его там не вариант. А динамический создаётся в рантайме в куче, которую выделяет для процесса ОС, а в куче выделяй/удаляй - не хочу
>>965546 Тому что константы должны быть вычислимы в момент компиляции программы. Виталик вводит свою циферку после компиляции программы -> константа не вычислима.
Размер статического массива должен быть константой потому что иначе компилятор вообще не ебет сколько ему памяти выделять на следующий стек фрейм в противном случае.
Динамический массив выделяется на куче, а на стеке выглядит как один указатель (размер которого известен компилятору)
>>965540 Если нужно небольших размеров динамический массив только на время выполнения функции, можешь воспользоваться функцией alloca или _alloca (одно и то же, по сути, только названия разные для разных компиляторов). Если нет - то тогда new[SIZE] и освободить не забудь при помощи delete[]. А еще лучше используй std::vector.
>>965553 >>965556 Так, подождите. Как я понял, то получается, что статический массив создается в памяти, которая уже используется для открытия программы, а динамический использует свободную память, которая есть в комплюктерне, так? >>965560 В том то и дело, что пока надо разобраться с new и delete.
http://ideone.com/H9UTH6 Как сделать ParamT шаблоном, при том что ReturnT указан явно? Я так понял нужно что-то вроде template<class ReturnT, template<class ParamT> > но как это сделать не ясно, на SO везде сраные template<class> Containter, а не отдельные методы
Мимо программист не на C++ бугурт. Вот нахуй вы так делаете? Нахуй эти постоянные #define и typedef для каждого чиха? Ладно, допустим для большей ясности вы создаете макрос для оператора/модификатора/квантификатора, но почему вы тогда не можете использовать только 1 вариант?
>>965605 APIENTRY определен как WINAPI. А знаете, что скрывается под WINAPI? Конечно же __stdcall, что там еще можно использовать? Это же очевидно - назвать синее красным, красное зеленым, а зеленое - синим.
>>965604 Ты слишком маленький, не поймёшь. Но дам подсказку - те значения дефайнов, которые тебе показывает IDE, это значения которые были вычислены по твоему компилятору, его версии, версии ОС, наличию разных библиотек и т.д. На самом деле там большие деревья условий (IFDEF, IFNDEF), которые определяют именно тот набор дефайнов, которые ты сейчас видишь. А typedef для большей ясности, так ещё с Си повелось
>>965604 Потому что в 1970-ых годах Ричи придумал язык С. В нем был препроцессор. За 40 лет ничего лучше С для системного программирования не придумали. На С же и написали WINAPI.
А с++ тут только при том, что он частично обратно совместим с С и из него можно вызывать сишный код.
>>965487 Еще одна илита в треде. Я так и представляю прыщавого толстого подростка, который зашел в класс, его все проигнорили, он решил хоть как-то привлечь к себе внимание, и сказал "Я под линуксом сижу". Жаль, что Ерохины продолжили обсуждать, как они вчера клеили тянок, а бабы еще больше отвернулись от этого недоразумения.
Компилятор ругается на подобные строки ifstream infile( "alice_emma" ); Пишет, что нет конструктора с *char В то же время в интернете много подобных примеров. Если загнать имя файлы в пременную стринг, а потом ifstream infile( "alice_emma" ); то это все равно не помогает.
>>965720 Подключен, иначе откуда берутся все эти функции указанные компилятором. А вот замена помогла, но только при g++ -std=c++11 А вот с gcc не хочет https://clbin.com/WG4MW1.png
>>965727 Ой, это я по привычке видимо как неудобно получилось, интересно почему у меня столько кода другого работало А чем там линуксогоспода нынче компилируют, а то я чет подзабыл. g++ или как там? g++ -std=c++11 мне не нравится.
Двач, подскажи, как создавать gui окна? В смысле не используя какие-либо наборы виджетов и api. Что-то я нагуглить не могу, мне гугл всё чьи-то очередные "самые лучшие" библиотеки подсовывает.
>>965770 >-Ofast Это уже блоат и некоректные вычисления могут быть. Самая мякотка -O1 ультимейт решение без трейдоффа, но производительность может быть ниже чем -O2
>>965787 Но зато кол-во строк для вывода одного треугольника возросло в 5 раз. Да и видеокарты почти не поддерживают. Нафиг делать программу, которая запустится у 2% целевой аудитории? Программа должна запускаться как можно больше где.
>>965788 Я о том, что без -Ofast не будет автовекторизации (для fp-чисел), а в чём там перемалывать числа без векторизации — в XMM или в YMM — какая к чёрту разница?
>>965787 > Полностью вытеснил опенгл Проиграл с этого школьника, что-нибудь кроме дотки и тестовой игры его поддерживает? Кто-нибудт спешит на нём разрабатывать игры? На сколько производительность лучше? На 10%? 1000 строк чтобы нарисовать квадрат? Vulkan это не нужная параша.
>>965789 >в 5 раз Не в 5 раз это во-первых, во-вторых это делается один единый раз при написании своей либы. Вулкан не имеет оверхедов, опенгл много чего выполняет под капотом в ущерб производительности. >Как можно больше где Для этого его и сделали, теперь не надо пердолиься с версиями OpenGL, OpenGLES, теперь у нас единое API которое работает на всех платформах. API поддерживается даже на древних встройках интела, не знаю о чем ты там говоришь.
>>965790 Ofast это не только автовекторизация, и кстати а разве она в O2 не включена? Там еще несколько сложных алгоритмов оптимизации кода, которые могут сделать код большим и медленным, поэтому надо отдельной опцией указать быстрые вычисления -ffast-math если не ошибаюсь.
>>965794 > Ofast это не только автовекторизация, и кстати а разве она в O2 не включена? Для векторизации fp обычно нужна ассоциативность, которая без -ffast-math не предполагается.
>>965803 > Работать не хочешь Если бы ты знал как сложно делать игры на чистом API, то ты бы не пиздел такой хуйни. И на OpenGL делать игры это достаточно серьёзный жизненный шаг, а что там на Vulkan будет я и не представляю.
>>965798 Заметь что почти все они на разных движках. Тоесть разработка игры на вулкане уже не отличается от разработки на опенгл, это пока что только игр относится, в скором будующем и все графические либы на него перекатят.
>>965793 >опенгл много чего выполняет под капотом в ущерб производительности. Ты точно про core профиль? >API поддерживается даже на древних встройках интела, не знаю о чем ты там говоришь. А у меня почему-то другая инфа, всегда думал, что он поддерживается только на самых свежих картах, и то если поставить дополнительные дрова для вулкана.
Есть у меня 3 процесса. Я точно не знаю какие я буду запускать(через CreateProcess), но должен выполнять(закрывать?) их параллельно. Могу ли я использовать WaitForMultipleObjects и передавать туда хэндл по два процесса даже если и не запускал их? что будет от этого? Если допустим для первого процесса я пишу "жди второго и третьего" а второй я даже не запускал. Хендл второго будет передавть мол "завершен" и первый будет ожидать только третьего? Или я не правильно понял принцип работы WaitForMultipleObjects ? Объясните, пожалуйста.
Не могу придумать, как без говнокода загружать в память и сохранять из памяти дерево. Не бинарное, количество потомков и уровней неизвестно, у некоторых концевых вершин есть доп. массив с информацией.
Ребят, в С++ начинающий Какой компилятор посоветуете? ибо я так тред почитал и понял, что многие - шлак О И заодно литературу какую почитать было бы неплохо
Неофит на связи. Почему в C и C++ так любят объявлять сигнатуры функций в одном файле (.h), а определяют их в другом файле (.cpp) или в том же файле чуть позже? И с классами та же тема, сигнатуры хуячите в описании класса, а определяете вообще хз где: ClassName::FuncName()
Почему нельзя сразу определять тело функций? Какой профит с описания лишь сигнатур? Типа чтобы точки входа в функцию рядом располагались, и по ним можно было бы прыгать по указателю?
>>966118 Чтобы ты не лез куда попало. Видишь интерфейс - им и пользуйся. Ну и, естественно, ускорение времени компиляции, потому что разным юнитам трансляции придется делать одно и то же, если все подряд хуячить в хэдере. Алсо, платформенно-зависимые куски приходится дефайнить (хотя это один из самых хуевых вариантов написания кросс-платформенной библиотеки), и тогда у тебя будет все засрано, как в WINAPI (ох уж эти уебанские описания COM интерфейсов и перехватчиков, фу блять, как вспомню только)
>>966124 Таки нет. Почитай про wrapper facade, им заворачивают платформенно-зависимый код. Зацепив к одному заголовочнику , например, несколько вариантов исходников (которые выбираются во время сборки) можно избавиться от этого говна. Ну и про PIMPL не забывай, это, конечно же , лишний оверхед, но для кросс платформенности нормально.
>>966123 А если функции в хедере void или возвращают указатели, можно инклудить все зависимости в cpp, а хедер будет чистый и не потянет зависимости выше по иерархии инклудов
>>966132 Системой сборки блять. Что ты за человек то. Это гораздо лучше, чем городить блядские дефайны где ни попадь, а к слову, я даже знаю одного человека, которые дефайнил целые функции, потому что считал, что так быстрее будет.
>>966135 >Системой сборки блять. Что ты за человек то. Которая написана на C(++) и где были использованы эти кроссплатформенные дефайны. Ну или платформа определяется запуском препроцессора над файлом с ifdef-ами и проверкой, какие куски этого файла выжили.
>>966136 Конфиг конфигом, я тебе про платформенно-зависимый код говорю. Тот д же мьютекс под разными осями будет иметь в итоге один общий интерфейс, в то время как логика создания/захвата и т.д. может различаться. Проще и чище вынести код для каждой платформы в отдельный сорец и там пилить логику, но уже без дефайнов, чем ковыряться в куче говна. Об этом речь. А система сборки для того и нужна, чтобы этот мусор разгрести.
>>966142 >Конфиг конфигом, я тебе про платформенно-зависимый код говорю. Я понял, петушочек, что ты хочешь сказать. Я говорю о том же.
Объясняю ещё раз. В твоей системе сборки ты проверяешь текущую платформу каким-нибудь так if($platform==OSX) srcs+=(mutex/impl/osx.cpp); endif (это псевдокодкод условной системы сборки).
Только вот значение $platform: 1) Определяется при сборке этой системы сборки с помощью тех же дефайнов. 2) Определяется при запуске системы сборки выполнением каких-нибудь скриптов, которые вызывают препроцессор и опять же смотрят, какие переменные в нём предопределены.
>>966330 Декларацию function() throw(X) убрали? Помню как-то написал throw(A, B), и спустя время где-то внутри дочерних вызовов внутри этой функции выкидывалось С, и это исключение невозможно было поймать, как будто его кидает main. Долго пытался понять что происходит вообще. Эта хрень требует указывать абсолютно все исключения которые могут возникнуть, поэтому убрали видимо.
Кроме того, твой опциональный массив должен быть частью payload - само дерево в идеале должно содержать только payload и быть template-ом, чтобы ты мог использовать его c другими классами без изменения.
Неофит с очередным вопросом. Стоит ли использовать константы по поводу и без? Есть ли ощутимая разница в производительности, есть ли разница в скорости компиляции? А то пока что единственная причина, по которой стоит использовать const - чтобы "не забыть, что переменную нельзя изменять", что мне кажется как то надуманно и не особо важно, но в то же время по const'ам аж главы в книгах пишут.
>>966406 Привет, крестовики. Я тут задумался недавно, а зачем вообще C++ и почему не пишут все на haskell. То есть приведите примеры где C++ необходим.
>>966283 >Вот есть дерево. Я его рекурсивно обхожу. Что дальше? Что я должен записать в файл? Последовательно обхода, наркоман. Ты, прежде чем такие вопросы задавать, указывай возраст, мол студент первого курса. Итд. И пробуй хоть гуглом воспользоваться.
>>965604 Это пример прекрасного и мощного кода. Такого кода больше нет, одно хипстерство и пидорство. Его можно сравнить с огромным, брутальным промышленным комплексом. А WinAPI, кстати - лучшая в мире библиотека для каких-либо языков программирования. Ибо она умеет всё.
>>966422 > что мне кажется как то надуманно и не особо важно > но в то же время по const'ам аж главы в книгах пишут Так может потому они и важны раз пишут целые главы?
>>965787 Скажи мне, друг, а ты проводил тесты? Сравнивал производительность одной и той же программы, написанной с использованием OpenGL и с использованием Vulkan?
Или ты просто прочитал где-то, что Vulkan - это модно, молодёжно, будут бабы давать, и OpenGL уже не нужен? Знаешь ли ты о синхронизации и о том, как с не бороться? О том, как вручную управлять ресурсами? Сможешь ли ты хотя бы написать на вулкане программу, которая будет по производительности хотя бы такая же, как аналогичная на OpenGL?
>>966160 >> 1) Определяется при сборке этой системы сборки с помощью тех же дефайнов. Каким хуем ты приплел исходники из кода к парсеру системы сборки?!
>> 2) Определяется при запуске системы сборки выполнением каких-нибудь скриптов, которые вызывают препроцессор и опять же смотрят, какие переменные в нём предопределены. Это ты так привык, но это не обязательно. Хотя с использованием какого-то конфига так проще всего, потому что и с этим зхэдером, по факту, ты работаешь только вскользь.
>>961839 (OP) У меня есть два байта данных (uint16_t, quint16). Оригинально они задумывались содержать беззнаковое целое. Как можно представить эти данные во float (забросить их в least significant bytes) и signed int? Главное, чтобы результат имел то же бинарное представление, что и оригинальное число. Это какой-то очередной posanskiy_cast?
Накидайте свои крутые assert макросы, больше всего интересуют универсальные __FILE__ и __FUNCTION__ для разных компиляторов Использовал бы стандартный, но там какая-то еботня с NDEBUG, который надо отслеживать в чужих хедерах И ещё нельзя написать return assert(x)
>>966716 >Да здания - это же просто нагромождения арматурин с цементом, что там может быть сложного?
Когда ты сделаешь структуру и будешь хранить её вместе со строкой (кстати, так делать нельзя, ведь структура - это часть реализации, значит, в хедере ей не место), то у тебя получится тот же самый C++. Только вымученный, со странными названиями функций и без неймспейсов.
>>966780 При последовательном обходе в выходной файл придется записывать полный путь каждой ветки Вершина/вершина2уровня1 Вершина/вершина2уровня2/вершина3уровня1 Вершина/вершина2уровня2/вершина3уровня2 А вот при рекурсивном Вершина(Вершина2уровня1/Вершина2уровня2(ТУТ ЕЩЕ ДВЕ ВЕРШИНЫ МНЕ ЛЕНЬ))
>>966796 Можно и без рекурсии такое построение сделать. Тебе нужен поиск в глубину (я так понимаю, ты его используешь). Ну так-то я и не знаю, что сказать. Если ты просто будешь выводить во время обхода номера вершин в строку, то получишь практически тоже самое, что хотел. Тут надо только мозг включить и расставить скобок и слешей, где надо.
>>966823 Ну вот, скобки и слеши. То есть у меня в файле будет каждая вершина упоминаться ровно один раз. Именно о таком алгоритме я и спрашивал. Алсо я придумал его еще до того, как написал сюда, потом решил, что он несработает из-за синтаксиса, а через 20 миут понял, что все ок. Т.е. я около суток морочу всем здесь голову.
>>966831 Я уже прошел и теорию графов(предмет назывался наглядная геометрия и топология) и теорию деревьев (авл, красночерные и прочие кошерные вещи), введение в мат логику и теорию алгоритмов тоже было. Все изученное использую. Меня просто переклинило.
>>966726 >кстати, так делать нельзя, ведь структура - это часть реализации, значит, в хедере ей не место Твои обезьяньи java-привычки тут не работают, макакич.
>>966449 >Кому вообще пришло в голову инкриментировать bool? На реддите чел плакался, что ему придется кучу кода пидорасить из-за этого. Из рахи, судя по нику.
>>966938 Джава - абсолютнейшее говно с точки зрения отделения интерфейса от реализации. Вся документация обычно в исходниках - если нужна инфа, нужно вручную читать исходники. Функции объявляются и на месте реализовываются, в итоге исходный код превращается в кашу.
Я понимаю, для студента вроде тебя нормально держать в хедере таборы цыган, которые создают мешанину, уязвимости и никогда не пригодятся пользователю, но человек со вкусом такого делать не будет.
>>966844 А этого и нет в реализации языка. Плюсовый std::string - лишь часть стандартной библиотеки, ты волен не использовать его. Можешь взять любой васянский типа CString или QString и даже написать свою версию.
Прогромач помогач, не знаю как гуглить некоторые вопросы, а есди и знаю, то поисковая выдача не радует. Вот есть у меня структура. Я вызываю функцию и хочу чтобы эта функция возращала ссылку на такую структуру, зосданную внутри этой функции, причем чтобы этот объект потом не исчезал. Сейчас компилятор не ругается на такой код[code] structure Al {int cogolikl;}; Al Yoba(int n) { Al Cus = new Al; (Cus).n = 1499; return Cus } [/code] Значение полученное функцией использую как ссылку. Можно это сделать как-нибудь красивее и приятнее?
У тебя ОС семёрка, судя по всему? Я просто насчёт SDK не уверен. Пакет для графических инструментов 8.1 - это немного не то. У меня на десятке стоит Windows 10 SDK (10.0.10586.0). А вот для Win7 я пункта что-то не вижу.
Да, если что, отладчик графики и профилировщик GPU в Windows 7 работать полноценно не будет. Он ещё в VS2013 не работал нормально на семёрке.
Как можно сжать и расжать std::string через zlib/bz2/lzma? А то как не посмотришь на примеры, там тыща каких-то стримов-хуимов, буферов-хуюферов начзначать надо. Хочу как в питоне s = b"asdfg" compressed = bz2.compress(s)
>>967055 >Я понимаю, для студента вроде тебя нормально держать в хедере таборы цыган, которые создают мешанину, уязвимости и никогда не пригодятся пользователю, но человек со вкусом такого делать не будет. Да-да, java-дебил, при реализации строк нужно обязательно применить pimpl-idiom, а строки создавать только фабрикой.
>>966710 __FUNCTION__ вроде не все компиляторы поддерживают, в отличие от __LINE__, __FILE__ Никакой еботни с ndebug нет, просто он отключает ассерты. Если наоборот хочешь включить то просто пишешь #ifndef nbebug #undef ndebug #endif Алсо, мне нравится такой ассерт: #define asserted ? (void*)0 : fprintf(stderr, "Assertation failed.")
>>967113 Дегенерат-студент вспомнил термины из лекций полугодовалой давности и решил, что это то, о чём я говорю. Ну ладно, со временем ты поймёшь, что значит не показывать пользователю то, что ему не нужно.
>>967082 >Это что, нужно писать специализации для каждого возможного char[N]? Нет. http://ideone.com/Plv64x >>967121 > Почему так никто не делает? Так все делают. >>967136 > ба-бах Держи банан.
>>967129 Если конструктор присваивает пару указателей и не исполняет кода, неплохо бы его инлайнить чтобы копирование объектов было похоже на инициализацию структуры, без вызова функции конструктора >>967132 Ни разу не видел чтобы конструкторы писали в хедере
>>967141 Знаешь, это твоё дело. Если ты не умеешь делать то, что ты пишешь, опрятным и юзабельным, то это целиком твои проблемы. Просто когда у тебя возникнет вопрос, а почему это никто не хочет пользоваться тем, что ты создал, вспомни мои слова.
>>967165 Я бы взял то, что тащит не особо много кода за собой, уже написан какой-то функционал для работы инициализация и всё такое, есть документация/туторы.
Сам спросил - сам ответил. Чтобы работал initializer_list, должен быть известен тип initialiser_list. Конструкторов может быть несколько. То есть, разумеется, можно добавить в стандарт исключение для объектов с одним определённым конструктором, но это противоречит идеологии продажи оружия для уничтожения ноги.
>>967173 Может и подойдет, я не знаю, поэтому и спрашиваю. У меня есть класс, у каждого экземпляра должен быть свой скрипт на Lua. Есть события, которые вызывают определенные методы. Эти методы должны вызывать соответствующие колбэки в Lua. И наоборот, вызов определенных функций в Lua, должен вызывать методы в классе. Мне нужно то, что позволит это сделать проще всего.
Если у меня есть string A, а мне нужно разделить ее на две строки, которые в изходной строке разделяются каким-нибудь символом, например тильдой, то как мне это сделать? Видел очень много примеров типа string B = strtok(A, "~"); или string B = strtok(A.c_str(), "~"); но во-первых мой g++ отказывается такое есть из-за проблемы с конст чар, а во-вторых видел мнение, что это сишный код, а мы пишем на плюсах, поэтому стоит избегать такого.
>>967119 >Гугли А как ты думаешь, как я нашёл именно этот способ и почему спрашиваю, нет ли ещё? Может потому что везде этот способ предлагают. Суффиксные массивы/деревья не в счёт, заебёшься с их быстрой реализацией.
Олсо, std::find неоптимален для пересекающихся вхождений: в тех случаях, в которых КМП-поиск пропускает символы, std::find этого не сделает, так как ты вызываешь его много раз, а не один.
>>967194 Ну почему не даёт. Во-первых, можно хранить внутренние функции в .c, а не в .h. Во-вторых, в случае со строкой можно делать так: вместо char использовать void, в первых байтах хранить информацию-заголовок, а в оставшихся - данные. Для обработки написать кучу разных функций, знающих, как работать с таким форматом. Что, собственно, и делается в C++, только без костылей.
Вообще, языку Си не хватает только strong typedefs и неймспейсов для безопасности.
>>967364 >Во-первых, можно хранить внутренние функции в .c, а не в .h.
Это крестотред. Декларации всех методов должны быть в заголовке - фиг бы с ними, с функциями.
Не могу понять, почему нужен pvoid для строки. Что мешает затайпдефить структуру? Чем структура отличается от указателя? Ведь и то, и другое - метаинформация.
>>967372 Это было к вопросу о том, как нормально реализовать строку в С, т.к. pchar - слишком медленный вариант (читай Джоэла выше).
Проблема структуры "указатель - длина" в том, что длину строки, по-хорошему, нельзя оставлять открытой для изменения. Это небезопасно, это путает пользователя и это вызывает вопросы вида "А что будет, если я сделаю strStruct.size = 100500; CopyStr(strStruct, strStruct2);?". Более того, некоторые так и будут делать.
Задокументировать всё, конечно, можно, но гораздо лучше, если таких вопросов не будет возникать in the first place.
>>967377 А, и ещё. Положив size открытым полем в структуру, ты больше не сможешь переименовать его или сильно изменить. Потому что тогда у пользователей всё сломается. А спрятав реализацию, ты спокойно можешь менять там что угодно, главное, чтобы открытый API сохранял свою работоспособность.
>>967334 Спасибо за подсказку. Только я ннп, как я должен находить "разделитель, который не должен нигде более встречаться", он же "любой символ, не входящий в алфавит".
>>967377 >Проблема структуры "указатель - длина" в том, что длину строки, по-хорошему, нельзя оставлять открытой для изменения.
Приватный size, публичный геттер. Но в сях с этим хуже, да.
>"А что будет, если я сделаю strStruct.size = 100500; CopyStr(strStruct, strStruct2);?". Более того, некоторые так и будут делать.
Эти ошибки можно делать и без этого. Не надо беспокоиться о безопасности, которой нет.
>ты больше не сможешь переименовать его >или сильно изменить
Зачем? Почему нельзя в объявлении класса оставить только сигнатуру? Зачем мне вообще менять метод size() для элементарной структуры? Каким образом изменение метода вычисления size может сломать программу?
Это нужно только для того, чтобы остановить поиск. string.find останавливает поиск сама с учётом сохранённой длины строки, и в своём цикле ты не должен пытаться заскочить за конец строки. Во всех учебниках написан алгоритм для строки неизвестной длины.
>>967398 Я о сях говорил, у крестов таких проблем нет.
>Зачем? Почему нельзя в объявлении класса оставить только сигнатуру? Зачем мне вообще менять метод size() для элементарной структуры? Опять же, в сях не может быть метода size(). Может быть только функция GetSize(MyString* str) или публичный, открытый для всех член структуры. От последнего варианта нужно бежать как от огня.
>Каким образом изменение метода вычисления size может сломать программу? Если это плюсовый метод, то, опять же, никак. Если это публичный член структуры в Си, то вот тебе сценарий:
Изначально хранилась пара "Указатель - длина". Для нужд других функций её поменяли на "Указатель на начало - указатель на конец". Всё, поля size у структуры больше нет. У пользователей всё поломалось.
Поэтому хранить сложные объекты в чистом Си в виде структур абсолютно некорректно. Поэтому и вариант с pvoid - единственный нормальный.
>>967377 >Проблема структуры "указатель - длина" в том, что длину строки, по-хорошему, нельзя оставлять открытой для изменения. >>967380 >А, и ещё. Положив size открытым полем в структуру, ты больше не сможешь переименовать его или сильно изменить.
Java-макака перечитала букварей по о-о-пе а-ля Бради Гуч и теперь с умным видом поучает всех банальностям.
Потому что шаблон vector<T> не может заматчить initializer_list<T>.
Если ты думал, что тут выстрелит конструктор вектора, принимающий initializer_list и произойдёт implicit conversion, то ты жестоко ошибался. Это происходит при overload resolution, который происходит в более поздней фазе компиляции, чем инстанциация темплейтов.
Братия, вопросы. а) Имею (упрощенно): static struct { Trigger trigger; } ctrls[] = { { Trigger(HOLD_CYCLES, CRIT_TEMPERATURE_C), }, { Trigger(HOLD_CYCLES, CRIT_TEMPERATURE_C) }}; По стандарту, должны вызываться копи-конструкторы, с помощью которых экземпляры триггеров попадут в массив? А исходные объекты создаются где, в стеке? Все сразу первым делом, и потом копируются, или создался-скопировался каждый по очереди? Мне важно, потому что стек ппц маленький. И еще любопытно: вот эти временные объекты - они rvalue? Для них будет вызыван move-конструктор вместо copy, или нет и не будет? 2) Дальше по тексту будет что-то вроде for (auto &ctrl : ctrls) {}. В данном случае будет ли какая-нибудь разница между for (auto &&ctrl : ctrls) и for (auto &ctrl : ctrls)? Если здесь не будет, то где будет? Не предлагайте писать for (const auto &ctrl : ctrls), у меня там вызывается фкункция, изменяющая состояние объекта.
>>967487 Ну напиши что-нибудь простое и проверь, как это на самом деле работает. У меня не вызывался конструктор копирования. Возможно, что я не так задачу понял или не шарю. http://ideone.com/KDH1h2
>разница между for (auto &&ctrl : ctrls) и for (auto &ctrl : ctrls) Ну для rvalue ссылок будет конструктор перемещения использоваться, так что я бы не стал этим баловаться в цикле.
Новый вопрос: как мне из отрицательного float, 0.0f и положительного float сделать -чото, 0 и +чото соответственно?
Для интов это элементарно: return b-a. А для флоатов?
>>967447 >Если это плюсовый метод, то, опять же, никак. Если это публичный член структуры в Си, то вот тебе сценарий:
В C безопасности нет, зачем эта осторожность? Разве что для успеха ловли багов.
>Изначально хранилась пара "Указатель - длина". Для нужд других функций её поменяли на "Указатель на начало - указатель на конец". Всё, поля size у структуры больше нет. У пользователей всё поломалось.
Не-а, не катит. Откуда у пользователей взялась старая версия? Сериализация должа быть с версионированием, если ты собираешься менять класструктуру.
>>967436 >Какого ляда нету lower_bound с выбором компаратора? По стандарту должно быть, где оно? Точнее, почему оно с двумя подчёркиваниями?
Сам спросил, сам отвечаю: задефайнено в другом месте. Креактор не подхыватывает почему-то.
>>967530 >Новый вопрос: как мне из отрицательного float, 0.0f и положительного float сделать -чото, 0 и +чото соответственно? > >Для интов это элементарно: return b-a. А для флоатов? Чё?
>>967530 >В C безопасности нет, зачем эта осторожность? Разве что для успеха ловли багов. Вариант с pvoid вполне более безопасен, чем открытая структура. Средненькая безопасность лучше плохой. >Не-а, не катит. Откуда у пользователей взялась старая версия? Сериализация должа быть с версионированием, если ты собираешься менять класструктуру. Ну пользовались они два года старой версией. Использовали либу у себя в проекте. А после обновления все места, где либа использовалась, перестали работать. Нехорошо как-то.
>>967568 >Ну пользовались они два года старой версией. Использовали либу у себя в проекте. А после обновления все места, где либа использовалась, перестали работать. Нехорошо как-то.
С хера ли они перестали работать? size больше не возвращает size? sizeof(yoba) не использовали?
Кайф, ещё 50 строк и можно будет делать callbacks.set<ReturnT, ParamT>("name", [] (ParamT x) -> ReturnT {}) и ReturnT result = callbacks.get<ReturnT, ParamT>("name")(param)
>>967781 Бля, опять проблемы http://ideone.com/6oLAjz function<void(...)> и function<...(void)> не работают даже при перегрузке функции, а шаблоны где T = void это вообще отдельная история
>>968031 >чому main файл всегда без хежера? Зачем? В идеале в main ничего не должно быть кроме точки входа в программу и может обработки текстовых аргументов. >Что будет если я сам добавлю его? У тебя будет main с хидером.
>>968127 И часто ты пишешь программы, единственным результатом которой может быть поедание процессорного времени и возврат результата в виде экзит-кода?
Шолом, крестачи. Есть вектор a, положим - std::vector<int> a = {1,4,8,8}; Мне нужно как в дишечке - снять с него слайс, т.е. получить еще вектор который сделан по данным старого вектора.
Т.е. там бы я сделал int[] a = [1,4,8,8]; int[] b = a[1..$]. Тут делал std::vector<int> b(++std::begin(a), std::end(a)); Только вот я глянул на data() - и как выяснилось, эта проблядь второй вектор скопировала, а не просто указалась на данные первого.
Как это сделать? Ну т.е. чтобы второй подмассив показывал на данные первого, т.е. без копирования? Я пробовал ставить const - думал этой хуйне нужны гарантии что я там нихуя не поменяю - ей по барабану.
>>968291 В языках без сборки мусора такое сложно сделать. А конкретно с вектором нельзя, потому что вектор управляет памятью в которой хранятся его элементы. Ебись с итераторами.
>>968291 Тебе придётся хранить в исходном векторе указатели или ссылки. Если ты будешь хранить в одном векторе данные, а в другом ссылки, то эти ссылки наебнутся при ближайшем перестроении исходного вектора.
>>968388 > то эти ссылки наебнутся при ближайшем перестроении исходного вектора. По условиям задачи этот вектор и вовсе константный, (ну почти, после инициализации и сортировки), все его слайсы никогда не переживут его самого, и на момент когда они создаются - и он сам, и они - никогда ничего внутри менять не будут, кроме как сужаться.
Я думал, что или есть способ заставить вектор так сделать, или что в stl есть какая-нибудь обертка над парой итераторов.
Есть какие нибудь ресурсы на русском/английском, где хорошо объясняют, как работать с Qt в плане создания форм, подписывания на событий и прочим? Провёл достаточно времени за win forms и wpf, вот хочу в Qt вкатиться для GUI. Или лучше официальной документации ресурса нет
>>968413 Ну, документация там довольно неплохая. Если тебе понадобиться что-то конкретное сделать, шансы найти почти готовую реализацию в доках высокие. Ну если тебе просто нужно выучить до уровня "Qt на кончиках пальцев", то есть книги, но что-то конкретное я не могу подсказать. Кроме этого, миллион статей в интернете и различные попенсурс проекты но это не точно
Как почистить глобальный неймспейс от макродрисни? Если я сделаю хедер clear.h и скриптом соберу в него множество #undef, это сработает? Так кто-нибудь делае вообще? Схема получается такая:
Как в плюсах сделать многопользовательское приложение. Вот есть сервер для работы с базой данных, и должна иметься возможность параллельно несколько пользователей обслуживать, как такое реализовать? Чтобы А ввел, команду, потом Б, потом А еще одну. Думал про форк, но это же не распаралеливание, там дочерний процесс выполняется, а потом снова родительский.
Есть ли в stl какой-нибудь единый тип итератора? Хочу передавать в функцию одномерный вектор/массив/множество, через который пробегаюсь один раз. Логично было бы не бойлерплейтить и перегружать функцию, а просто передавать в неё итераторы начала и конца. Если нет, то как это нормально сделать? Не приводить же тип каждый раз.
>>968974 Для распаралеливания кода в одном потоке можно использовать корутины, в с++11 кажется что-то в этом роде добавили в стандарт (std::future), или это только для тредов, не помню
Чтобы сделать функцию, принимающую итератор, нужно функцию занести в темплейт. Функций станет много (по одной на каждый набор аргументов темплейта), но ты этого не заметишь, если будешь использовать угадывание аргументов темплейта.
У вас когда-нибудь было на работе такое, что налабал алгоритм, и он почти работает, и ты несколько часов смотришь в код (элементарный и понятный) и не видишь ошибку?
Сап эксперты. Прошу пояснить ньюфагу за механизм исключений. В чем его предназначение?
Правильно ли я понимаю, что вот это вот try-catch, это типа эволюционировавшее сишное If (foo() == -1) { // проверить значение errno и действовать дальше исходя из него } // все хорошо, работаем дальше
>>969053 Да только ещё исключение это полноценный класс в который можно при выбрасывании засунуть любую информацию и чуток логики для взаимодействия с ней. Обрабатывается не на месте а где-то выше по стеку вызовов. Когда кидаешь исключение посреди функции обычно приходится ломать голову как освободить ресурсы и вообще выйти из этой жопы чтобы приложение продолжило работу когда эта функция снова будет вызвана после обработки исключения, которая обычно происходит где-то далеко и не имеетпрямого доступа к тому с чем эта функция работает.
https://pastebin.com/9cVUnNMb Подскажите пожалуйста ньюфагу где я обосрался: шахматная доска, хочу пройтись по диагоналям н-точки и поменять значения, для этого ищу 1 - начало левой диагонали, 2 - начало правой диагонали.
Ананасы, вопрос такой. В общем есть некоторый интерфейс наподобие: https://pastebin.com/zKsCUdsg Итак, после некоторой стабильной работы (пара десятков запусков с отладкой, например), fn() начинает валиться. Я стал копаться из-за чего это, дело оказалось в том, что не смотря на то, что c указывает на валидную область память и читается (при этом и ичтается его атрибут _element), результат же выполняемой функции c->getElement() возвращает указатель на область памяти по адресу 0x00000001. Что за хуйня?! Ничего касательно этого кода не меняется абсолютно, что может быть причиной такого поведения?
>>969354 Первое, что приходит на ум - ты объект класса на стеке создаёшь. После выхода из createSomeClass() объект утилизируется. Это единственное, что приходит на ум с таким количеством информации.
>>969366 В том то и дело, что все в куче. По сути, getElement возвращает только указатель, который уже хранится в объекте. Через GDB я читаю все поля объекта нормально, но вот после вызова getElement возвращается какая-то хуйня, не смотря на то, что память вроде как нормальная. Единственное, что помогает это перекомпилировать все с нуля, но это пиздец идиотия, я считаю.
>>969379 После нее возвращается нормальный адрес, а не 0x00000001. При том, что ничего не меняется. Я вообще нихуя не могу понять... может на оперативку стоит сетовать теперь.
>>969397 Ну так она возвращается потом через некоторое время. Может действительно стоит забить на это, но я думаю, как бы это не вылезло все в риалтайме.
>>969325 Попробуй что-то такое. Просто самое тупое, что в голову пришло (в вольфраме массивы с 1 начинаются, так что небольшие корректировки нужны) кеке.
>>969401 Undefined behaviour, блядь. >>969369 >В том то и дело, что все в куче. _element в куче? Отдели функцию от остального кода и вызывай её в цикле. Олсо, возвращать указатель на приватную переменную в геттере - долбоебизм.
>>969401>>969395 Undefined behaviour, блядь. >>969369 >В том то и дело, что все в куче. _element в куче? Отдели функцию от остального кода и вызывай её в цикле. Олсо, возвращать указатель на приватную переменную в геттере - долбоебизм.
>>969442 Они там охуеть какие приватные. Я этот заголовочник не менял, хотя почему-то у меня подозрения по поводу публичности полей. С другой стороны, ни friend-классов ни аксессоров нет. https://pastebin.com/YYG4Teix
>>969444 Нам не интересен твой говнокод, нам нравится помогать людям. Если ты не можешь поделиться программой, которая ТОЧНО падает после длительного выполнения - забей и забудь.
Олсо, если проблема в памяти, то с большой вероятностью у тебя должен регулярно падать браузер - у меня мемтест ничего не находил, зато падали Опера, Хром, ФФ и ошибки в Prime95/LinX были.
>>969446 >> которая ТОЧНО падает после длительного выполнения Она даже не в многопоточке. Эта хуйня вылезает при отладке и вылезши единожды остается навсегда до следующего полного ребилда. И я бы избавился от этого места, но у меня часть физики завязана на этом.
>> Олсо, если проблема в памяти, то с большой вероятностью у тебя должен регулярно падать браузер - у меня мемтест ничего не находил, зато падали Опера, Хром, ФФ и ошибки в Prime95/LinX были.
Сап, анон, нужна твоя помощь или совет. Последние пару недель по вечерам казуально вкатываюсь в плюсы, пописывая небольшую игру на SDL, так чисто для себя for fun. В самом SDL нет ничего, кроме биндингов к битмаповым текстурам OpenGL, так что движок по сути я пишу сам. Так вот я упёрся сейчас в необходимость некоего "Tween Manager'а", который бы мог управлять изменением во времени свойств моих объектов, например изменить координату 'x' некоторого спрайта на +50 пикселей за 5 секунд с интерполированием по синусоиде, чтобы было плавно. Проблема только в статической типизации, есть например свойство "прозрачность" с типом unsigned char (от 0 до 255), есть координаты в int, угол наклона в float... Пока единственное, и возможно очень тупое решение, которое пришло мне в голову, это писать всю логику твинера на (void*) и кастовать к нужному типу внутри, что-то на подобии:
MySprite★ player = new MySprite(); player.x = 150; player.y = 300; int newX = 200; // переместить спрайт по х из положения 150 в 200 за 5 секунд TweenManager -> tween ( &(player.x), 'int', &(newX), 5000, TWEEN_EASE::SIN);
Но это скорее хак, нежели правильное решение, да ещё и для целевого значения нужно выделять переменную, чтобы передавать её адрес. Не самый лучший способ в общем. А кучу врапперов для врапперов для свойств писать так не хочется...
>>969679 Кому-то может показаться, что здесь идеально подойдут шаблоны, но на самом деле нет, потому что твины будут храниться в векторе, а тип свойств нужно определять в рантайме, чтобы можно было, к примеру, загрузить из файла-скрипта кастомную сцену с твинами.
>>969691 Гуд. Я вижу тут 2 выхода: 1. Создаёшь базовый абстрактный класс с виртуальной функцией tween. Потом у дочерних классов реализуешь как надо каждый. 2. (неочень способ) Делать, как ты хотел. Для этого существует dynamic_cast.
>>969510 ещё о чем хотел спросить вот есть такое приложение на ведромб и ios "SoloLearn" Там всё подробно объяснено Замещает ли оно книгу "С++ для чайников"?
Хочу, чтобы компилятор предупреждал меня о том, что: - итераторы начала и конца заведомо относятся к разным объектам - имя, которое является частью стандарта языка, переопределяется в одной из либ/заголовков (при using namespace std).
Такие есть? Или пока что это только статические анализаторы умеют?
>>969968 >Хочу, чтобы компилятор предупреждал меня о том, что: >- имя, которое является частью стандарта языка, переопределяется в одной из либ/заголовков Что в этом плохого? Чтобы он орал на определения swap, begin, end, operator<< и пр. подобное для твоих типов?
>>967461 Запилил Рабина-Карпа для множества образцов, работает в десятки, если не сотни, раз быстрее. Даже хэш считать не пришлось, unordered_set само всё делает.
У меня есть дерево, нужно реализовать поиск по имени вершин. Но так, чтобы потом по результатам поиска была возможность еще раз провести поиск. Не могу придумать, как так передать вершину в метод рекурсивного поиска, чтобы дерево-результат не было зачищено.
Привет, анончик. Ебусь с винформ. Расскажи как я могу LPWSTR засунуть в textbox или LabelBox? Или расскажи куда я могу эту шляпу засунуть? Нужно сделать список (сетевых дисков) а в NETRESOURCE Localname хранится в LPWSTR. Буду очень благодарен. Прикрепил скрин части кода где оно должно быть и скрин формы(сам не знаю зачем).
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Прошлый - https://2ch.hk/pr/res/947007.html