>>1099275 Хз, имхо надо уже делать третью надстройку, как в свое время кресты в си транслировались, пора что-то подобное на базе концептов пилить. Как есть выходит слишком сложная билеберда.
>>1099277 Хуй с ним, гулять так гулять. Вангую, что в какой-то момент кто-нибудь форкнет и запилит поддержку нового диалекта в крупный компилятор, интересно будет.
Кто-то посоветовал, мол, сравни свою реализацию примитивных функций вроде "посчитать длину строки" с библиотечной реализацией.
Открываю я исходник и смотрю реализацию функции strlen, а там...
И как такое вообще понять
_Check_return_ size_t __cdecl strlen( _In_z_ char const* _Str ); Что за _In_z_ ? Причем это уже реализация, которая должна быть прямо в хедере, я нажал f12. но я не вижу никакой реализации, только объявление
Интересует разработка под VR и разработка десктоп приложений, подскажите как с этим справляется c++, есть ли вакансии и много ли их, рассматриваю не только Россию но и возможность фрилансить или вообще завестри трактор. Слышал что плюсы не нужны и юзают только на заводах
>>1099302 Да, но только span не используется в STL, в этом разница. >>1099344 Кому ты пиздишь? new создаёт объект на куче. >>1099388 Не должна она быть в хедере, она должна быть в библиотеке языка, которая скомпилирована и линкуется. Смотри исходники: libcrt у GCC, crt у Visual Studio.
>>1099538 В современных IDE есть анализаторы кода, которые тебе сразу же подсвечивают ошибку, если что-то не так. Зато не надо уйму сил, чтобы писать код, и ждать несколько часов, пока твой код скомпилируется или выдаст ошибку.
>>1099554 >какой язык можешь посоветовать для разработки десктоп приложении C#. Но сейчас уже от десктоп приложений отказались в пользу веба. >что бы без проблем можно было найти РАБоту Java (правда умирает), C#, js, php, 1C
>>1099425 Ещё раз, SSO хранит данные строки НЕ НА СТЕКЕ. SSO хранит данные строки в самом объекте строки, а объект строки может быть и на стеке, и в куче. >>1099433 google://microsoft+crt+sources , чуть ли не первая ссылка. Сложно? >>1099567 Ясен фиг, можно в коде спрятать тип так, что анализатор его не найдёт. Во множестве программ определить динамический тип с помощью анализа возможно.
У меня есть Int. Он занимает 32 бита. Что будет в первой ситуации мне понятно, но вот что будет во второй? Где-то пишут, что увеличится, а где-то, что уменьшится.
Ситуация № 1: 0000000000000000000000000000011 -> 0000000000000000000000000001100
Ситуация № 2: 10110010110100000101111000000000 (32 бита) -> 0000000000000000000000000000001011001011010000010111100000000000 (64 бита, но тогда это уже не Int) или 10110010110100000101111000000000 -> 11001011010000010111100000000000
>>1099781 Я не думаю, что операция сдвига зависит от содержимого. Я спрашиваю, что будет с первыми битами, когда предел этого типа уже достигнут.
"E1 × 2E2 is representable in the corresponding unsigned type of the result type, then that value, converted to the result type, is the resulting value; otherwise, the behavior is undefined."
Двач, сап. Устроился погромистом на полставки на C++ пока учусь на 3ем курсе. Работаю уже почти 2 месяца. Я не особо фанат C++, если что. Не надо на меня гнать "ОХ УЖЕ ЭТИ ВКАТЫВАЛЬЩИКИ В КРЕСТЫ" и тд. Мне так-то пофиг на язык, я больше в сторону C#/Java глядел. К нам в универ пришли и предлагали работу, окей? В нашем мухосранске это чуть ли не единственный вариант на полставки работать.
Так вот, чё почитать по крестам? У нас на работе очень-очень много bind'оф, ламбд, каллбеков, фабрик... В общем это всё бьёт по мозгам очень сильно. Я вроде постигаю, но медленно.
В общем, посоветуйте книг почтать умных по C++. Но чтоб не учили всяким ПЕРЕМЕННЫМ И МАССИВАМ. Или там ООП в стиле
class Car : public veichle { private: Wheel wheels[4]; public: void move() override; }
Ну и тд. А чтоб поближе к реальности. Для интермидиатов.
>>1099799 >Устроился погромистом на полставки на C++ пока учусь на 3ем курсе У меня побежала слеза по щеке. 3 курс мехмата, приходится работать репетитором
>>1099790 Прочитай тот параграф полностью, там говорится отдельно о знаковых и беззнаковых. >>1099977 Visual C++ - это древняя среда разработки, которая превратилась в Visual Studio. Отличия - сам понимаешь, хер с авоськой сравнил.
>>1100030 А среда для разработки Cpp. Ну Ок, превратилась, и как стала называться? Просто я смотрю курсы кое-где по Visual C++ до сих пор предлагают -- что это?
>>1099142 (OP) >>1095677 (OP) Анон, как сишкоблядине с двумя годами опыта быстро осилить С++? Книги Трупа страуса вроде бы довольно фундаментальны и слишком большие или нет?, т.е. читать их долго и неинтересно если уже знаешь многие вещи. Может быть просто втупую учить по cppreference?
>>1100030 Меня интересует этот случай: "if E1 has a signed type and non-negative value". И все вытекает в "the behavior is undefined".
2147483647 << 1 уже не влезает в int и выдает -2. Но где-то пишут, что при сдвиге такого числа (2147483647) первый бит "отбросится", а к концу присоединится 0.
Я спрашиваю про конкретное поведение, котрое будет происходить после сдвига влево числа, которое уже предел своего типа. Я не верю, что вместо определенного поведения происходит "the behavior is undefined".
>>1100124 Еба, а в плюсах средства работы с указателями до сих пор не устаканились? Вообще язык нужен для специфических целей - пилить хуйню для андроида которую я бы с радостью на Си сделал, но ASOP едва ли не на половину состоит из говна на C++ с непонятными закорючками. В будущем ебал заниматься С++, хоть и лычку в резюме напишу, лол.
>>1100132 >Еба, а в плюсах средства работы с указателями до сих пор не устаканились? Устаканились в 2011 году, и более того: Липпман идёт от простого к сложному, в книге разобран и синтаксис языка, и то, где и как используются ссылки (а не только указатели), и там даже есть современные приёмы вроде безымянных функций (они же лямбды).
>>1099781 Собственно, я смеюсь, а результат операции сдвига знакового числа на самом деле зависит от содержимого. >>1100113 Для беззнакового типа никакого undefined. > Я не верю, что вместо определенного поведения происходит "the behavior is undefined". Стандарт языка (единственный источник такой информации) для тебя не аргумент? Язык - это не определение инструкций процессора, которые будут использованы, это определение языка. Хочешь иметь гарантии - прочитай инстракшн мэньюал к своему ЦП и сделай ассемблерную вставку.
>>1100166 >Собственно, я смеюсь, а результат операции сдвига знакового числа на самом деле зависит от содержимого. А результат суммы — от содержимого слагаемых. Охуеть, да?
>>1100123 >Ассемблер это уже, нахер не надо это всё. >>1100166 >Язык - это не определение инструкций процессора, которые будут использованы, это определение языка. Хочешь иметь гарантии - прочитай инстракшн мэньюал к своему ЦП и сделай ассемблерную вставку.
Я что-то пропустил, но разве C++ не СИСТЕМНЫЙ язык программирования?
Тащемто даже на C# можно все эти битовые операции делать спокойно с вполне себе определенным поведением.
Анон, помоги мне пожалуйста. Я что-то очень сильно не понимаю, настолько что даже не понимаю как правильно загуглить. В процессе решения поставленной мною передо мной задачи я наткнулся на какую-то адскую фигню, которую начал упрощать, чтобы понять в чём я ошибаюсь и в конце-концов пришёл к 4 пикрилейтедам - коду который вызывает ошибку, если его модифицировать. Стоит сделать активной строчку кода на втором пике (в С1.h) #include "QtGuiApplication3.h" как тут же при следующей отладке я получаю ошибку "С1: не определён базовый класс", которая вызывается из "С2.h" Почему так происходит? Как мне тогда (если я захочу этого) передать указатель на QtGuiApplication3 в объект класса С1 или С2?
>>1099351 ещё отличается дефолтное наследование ну, если связываешь плюсы с какой-нибудь скрипто-парашей, то скорее всего, с классами у тебя ничего не получится
>>1100175 Иногда полезно предположить, что собеседник не идиот. >>1100194 Ага, и ассемблерных вставок и implementation-defined-поведения в сисярпе нет. Остальсь только рассказать о том, зачем тебе нужно сдвигать отрицательно знаковое число. >>1100207 Ты не то инклудишь, походу. Смотри доки. http://doc.qt.io/qt-5/qmainwindow.html
Плюсач, как правильно организовать сетевую архитектуру на udp сокетах? У меня есть один сокет на прием данных, с фиксированным портом, один случайно генерирующийся, на отсылку информации, и один с фиксированным портом для броадкаст сообщений.
>>1100217 >Иногда полезно предположить, что собеседник не идиот. Прочитав, что результат операции сдвига вызывает смех, я так и не смог это сделать. Хотя очень старался. Честно.
>>1100250 >Прочитав, что результат операции сдвига вызывает смех На заборе прочитал? Русский язык, ду ю спик ит? >>1100228 >Одним из вариантов С++ является Visual С++ - продукт корпорации Microsoft, являющийся частью комплекта Microsoft Visual Studio. Майкрософт никогда не называла свой диалект С++ визуалом. Была ли IDE под названием Visual C++ часть студии хоть когда-нибудь - нагугли сам, не было такого. Писал это какой-нибудь секретарь, который не знает нихуя. >>1100230 http://coliru.stacked-crooked.com/a/28da7966de495986 >>1100253 Накатал порнятнку про то, что такое сделать нельзя, а тут ты. Пришлось стереть.
>>1100264 https://msdn.microsoft.com/en-us/library/w4ddyt9h.aspx?f=255&MSPPError=-2147217396 In versions of Visual C++ and Microsoft C/C++ before Visual C++ 2005, time_t was a long int (32 bits) and hence could not be used for dates past 3:14:07 January 19, 2038, UTC. time_t is now equivalent to __time64_t by default, but defining _USE_32BIT_TIME_T changes time_t to __time32_t and forces many time functions to call versions that take the 32-bit time_t. For more information, see Standard Types and comments in the documentation for the individual time functions.
>>1100290 Можешь спросить "Какие программы я смогу писать, пройдя ваш курс" и "Будем ли мы изучать теорию языка". Потому что умение что-то написать на C++ - это не умение найти проблему. >>1100321 Можно, только ногу себе не отстрели. http://coliru.stacked-crooked.com/a/89bda233c9ae90b3 То есть, если есть недефолтный конструктор, то аггегатная инициализация (так это называется) не может быть использована, и список значений в фигурных скобках становится списком аргументов конструктора.
>>1100257 Сам спросил, сам ответил: это костыль. http://en.cppreference.com/w/cpp/types/enable_if http://en.cppreference.com/w/cpp/language/sfinae Язык допускает некоторые ошибки в шаблонах для того, чтобы увеличить сферу их применения. Сфера применения увеличилась настолько, что с помощью намеренного внесения этих ошибок можно влиять на код предсказуемым образом. Если в момент инстатциирования шаблона возникает ошибка, компилятор пропускает шаблон и переходит к следующему. Это называется SFINAE.
template< bool B, class T = void > using enable_if_t = typename enable_if<B,T>::type;
template<bool B, class T = void> struct enable_if {};
template<class T> struct enable_if<true, T> { typedef T type; };
То есть, выражение enable_if_t<0> - заведомо ошибка, если оно использовано вне дедукции параметров шаблона. Далее: вместо нуля можешь подставить любое выражение этапа компиляции, и теперь ты получил ошибку, которая генерируется только при невыполнении условия, а когда условие выполнено, то параметр шаблона просто не используется.
Ну а дальше ты и сам поймёшь: вместо 0 в том куске кода подставлен размер списка параметров.
https://ideone.com/sTlxER - кроме того, из-за правил языка ты не можешь этот тип передать - если есть многоточие, то вест хвост параметров должен упихаться в него, или будет substitution failure.
Короче: в конце списка параметров пишешь тип-параметр с дефолтным значением, присваиваешь ему enable_if_t, в параметры к энаблифт пихаешь условие и делаешь другой шаблон, который должен быть использован, если это условие не выполнено - это один из вариантов использования.
>>1100364 Сколько сокетов нужно иметь в приложении для оптимальной работы, и какие должны быть у них роли? С одним сокетом приложение получает также и свои отправленные датаграммы, поэтому это не вариант.
>>1100365 Твоё предложение никакими недостатками не обладает, пока ты не описал задачу точнее. Не вижу никаких проблем, ты ещё и шагу не сделал. >>1100368 Для того, кто спрашивал.
>>1100363 >Язык допускает некоторые ошибки в шаблонах для того, чтобы увеличить сферу их применения. Сфера применения увеличилась настолько, что с помощью намеренного внесения этих ошибок можно влиять на код предсказуемым образом. Если в момент инстатциирования шаблона возникает ошибка, компилятор пропускает шаблон и переходит к следующему. Это называется SFINAE.
>>1100264 >Накатал порнятнку про то, что такое сделать нельзя, а тут ты. Пришлось стереть. Вот видишь. Ещё одна причина не предполагать, что мой собеседник не идиот.
>>1100371 Чем это отличается от выбора перегрузки функции? Никто же не говорит, что компилятор пытается скомпилировать foo(string) когда ей передают int, обламывается, после чего переходит к следующей перегрузке foo(int). Обычный паттерн матчинг
>>1100401 Тем, что выбор перегрузки хотя бы не содержит стрёмного синтаксиса. В перегрузках свои приколы с ICS, но в шаблонах этот "выбор" сделан с помощью граматического элемента, который не для этого нуэен вообще-то.
Анон, есть маленький вопрос по QT. Есть новая форма, в которую я передаю из основной формы данные через сигнал-слот. Объект новой формы объявлен в .h основной формы dataForm *mainData; У меня всё работает, если я соединяю сигнал-слот уже после реального создания формы, т.е код выполняющийся по клику на кнопке
mainData = new dataForm(); QObject::connect(this, SIGNAL(sendData(std::vector <mydata>)), mainData, SLOT(receiveData(std::vector <mydata>)));
вполне нормален и рабоч. Но он мне не нравится. Я хочу, чтобы сигнал-слот соединялись заранее, чтобы не соединять их каждый раз при клике на кнопку. Т.е. у меня в основной форме есть функция, которая вызывается в начале работы программы
>>1100527 И сразу вдогонку. Имеет ли смысл создавать отдельный класс и объект DataStore, в котором хранить большую часть данных для работы с ними? Или данные лучше хранить в основной форме?
>>1100539 Ну я просто подумал что проблема очевидна - объект объявлен, но ещё не существует. Если интересует точный текст то - "Вызвано исключение: нарушение доступа для чтения." "receiver-> было nullptr."
Уточню. Меня не интересует почему не работает - это мне понятно. Меня интересует - можно ли каким либо образом соединить сигнал существующего объекта со слотом ещё не существующего объекта (если класс уже существует и известен)
>>1100544 Тогда отвечаю. >Моё желание вообще имеет смысл? Нет, так как ты пытаешься отказаться от существования других объектов типа dataForm. Ты нарушаешь абстракцию. >Реализуемо ли оно? Да - сделай dataForm частью основной формы. Ещё можешь в конструкторе dataForm соединять слоты/сигналы, а информацию о владельце брать из parent(). http://doc.qt.io/qt-5/qobject.html
Только если ты не к владельцу подсоединяешься, то ты какой-то пиздец делаешь, лапшу накручиваешь, и в таком случае тебе совершенно точно нужно эту твою сраную форму встроить, а не обосабливать.
>>1100590 >функцию, которая принимает произвольный контейнер и печатает его размер Попробуй сунуть в >>1100576 std::map и сообщи нам о результатах. Потом попробуй в >>1100589
>>1100589 Деревенский простолюдин, неспособный постичь красоту шаблонных конструкций ебанул обычную шаблонную функцию и рад. Слишком просто, нам ведь не сделать, нам заебаться надо
>>1100603 хуль ты делаешь то блядь расслабься самый простой код - самый рабочий https://ideone.com/4ycTj2 Контейнеры - это не только шаблоны. >>1100609 Так, ладно я не буду спрашивать тебя о том, зачем тебе static const. http://coliru.stacked-crooked.com/a/6b10a97723bd2ca5 Обрати внимание на то, что результат ICons не будет иметь тип IntList. Содержимое идентично, а вот тип другой. Олсо, можно сделать так, чтобы и типы совпадали, но нужно заморочиться.
Компилятор есть. Но при возникновении исключений проц слетает на адрес указанный в векторе прерываний. Программа компилится при использовании try-catch, но в итоге они не оказывают никакого влияния. Что есть они, что нет, всегда уходим на вектор прерываний и даже не понятно, что за прерывание и в каком месте оно возникло.
На самой машине никакой оси. Компилятор gcc/g++ из тулзов riscv, собранные под линуксом. Из параметров компилятора точно помню, что стоит без оптимизации и 64-разрядная архитектура.
>>1100668 >ладно я не буду спрашивать тебя о том, зачем тебе static const А что не так со static const? Вместо него следует использовать constexpr? Я попробовал - не компилируется.
>>1100965 Кому ты пиздишь? Ты сообщения компилятора читаешь хоть иногда? http://coliru.stacked-crooked.com/a/5d2ba5fb29997899 >>1100943 Дело так, значит: исключения C++ обеспечиваются с помощью exception model (SJLJ, SEH, DWARF для x86): соглашения о том, как хранится информация о раскрутке стека (вызове деструкторов в обратном порядке). Самому G++ эти исключения не нужны, и вполне может быть так, что для RISC-V модель исключений ещё не определили, и компилятор тебя об этом никак не предупредит. Больше ничего сказать не могу, так как не в курсе, кроме того, что в исходниках этой твоей тулзы и исходниках поддержки других архитектур ты найдёшь ответы на любые вопросы. >>1100967 >double number, int stepen Пользоваться только одним языком не дано? Проверь свою программу по шагам для СТЕПЕН=2.
>>1101024 Никак. Ты не можешь иметь константу или тип на одном и том же месте, это невозможно. Ты можешь сделать шаблон с двумя параметрами - число и тип - и специализация будет иметь только параметр-число, например. Если ты не заметил, твоё определение специализации противоречит твоему определению шаблона. >template <> >struct Foo<size_t i> Что ты за хуйню написал? В фигруный скобки около Foo ты пишешь известные параметры.
Двач, сегодня меня унизили на собеседовании. Пришел на собес к знакомому (С/C++).
Просто пиздец! Я становлюсь каким то омежным чуханом-пидарасом когда у доски стоят и спрашивают, сразу все забываю, тупею нахуй. Поэтому лучше когда дают задание на дом практическое, когда уютно себе кодишь.
Пиздец я хуево себя чувствую. Пикрелейтед пример хуеты на которую я не смог правильно ответить, вспомнил только когда вышел с собеса и поехал домой.
Было 2 структуры и указатели на них, он взял указатель с одного типа структуры и присвоил ему адрес другой структуры и спросил будет ли выведено то что он запросил через де-референсинг указателя (т.е поля оригинальной структуры)
Я стоял как мудак и не смог ответить. Ну нахуй такую жизнь, ебись все конем, забиваю на программирование
>>1100943 >На самой машине никакой оси. >Компилятор gcc/g++ из тулзов riscv Для поддержки исключений нужны действия со стороны компилятора и нужен некоторый рантайм. Для bare metal окружения рантайма может не быть. Покажи ассемблерный листинг для функций, содержащих throw и try/catch.
>>1101108 Если вопрос о языке, а не о конкретной реализации, то ответ - такая операция не определена. http://eel.is/c++draft/basic.lval#11 В сях скорее всего то же самое, там тоже strict aliasing rule есть.
Господа. Подскажите утилиту для дебагина мультипоточных программ. Хочу видеть, сколько цпу жрёт каждый поток и т.д Видел утилиту, но никак не могу вспомнить название.
>>1101435 Запятая - это, с одной стороны, оператор оценки двух выражений и возврата значения второго, причём на месте запятой есть sequence point (в новом стандарте это по-другому назывется). А с другой стороны его можно переорпределять для классов, и это пиздец.
В бусте где-то есть красивая конструкция symbols<> logicalOperators = "AND", "OR", "NOT"; Что разворачивается в logicalOperators.operator =("AND").operator ,("OR").operator ,("NOT");
О, отлично, как лучше выстрелить в ногу дуплетом? Правильно, сочетать это с МАКРОСАМИ. #define MACRO(A) ( perform_heavy_work(A), std::cout<<"done", modify(A) )
>>1101532 Топ трал. >>1101533 Не понял. >while(cin >> str, str != "STOP") { / ... / } Должно же быть while(cin >> str && str != "STOP") { / ... / } В чём прикол?
>>1101563 >А в чем ты узрел траллинг? В том, что усложнение вопроса вызывает понимание. >Не должно, операция >> вовсе не бул возвращает. Операция >> возвращает истрим, у которого есть оператор бул(). Так что если ты прям на 100% уверен в том, что СТОП у тебя есть - ну ок, пожалуйста. http://coliru.stacked-crooked.com/a/665b52cac213ad5f
>3.1.2 Таблица замен – матрица из восьми строк и шестнадцати столбцов, в дальнейшем – Hij. Каждый элемент на пересечении строки i и столбца j занимает 4 бита.
Как можно определить элемент матрицы размером 4 бита? Просто использовать частично заполненный char?
Пацаны, замена локальной переменной внутри функции на статическую ускорит работу? long_array большой и имеет один и тот же размер, то есть resize обычно ничего не делает.
Вариант 1. void foo(vector<double>& long_array) { vector<double> temp(long_array.size()); ... }
>>1101834 Хз, зачем я спрашивал, проверить же недолго.
Если кому интересно, то при размере long_array 10-100 тысяч и частом вызове функции, второй вариант примерно на 15-20% быстрее. Неплохая оптимизация так-то.
>>1101721 vector<bool> - гарантирована специализация с плотной упаковкой. "Элемент" определи самостоятельно. Ещё есть bitset, но у него размер фиксированный.
>>1101108 чувак, несмотря на весь мой профессиональный скепсис ко вкатывальщикам -- человеческий совет: не принимай близко к сердцу мнения любых других людей
>>1101721 class Hij { char data[8]{}; const int pack(int i) { return (i % 2 ? 0 : 4); } public: Hij(std::initializer_list<int> il) { int i = 0; for (const auto& v : il) data[(i++) >> 1] |= v << pack(i); } int operator[](int i) { return (data[i >> 1] & (0x0F << pack(i)) ) >> pack(i); }; };
int main() { Hij hij{ 1,3,2,4,5,7,6,8,9,10,11,12,15,14,13,12 }; for(int i = 0; i < 16; i++) std::cout << hij << std::endl; }
Немного доработать, добавить прокси тип, ссылку на второе измерение и готово.
Сап, кто может помочь написать программу, раскладывающую число (с кол-вом знаком более 11) на простые множители. Хотя б идею подкиньте, понимаю что можно проверять числа от 2 до корня из числа, но как проверить делиться ли оно и получить остаток?
>>1100290 Если совсем нуб, то сходи.. учат они добротно, за скобками ничего не оставляют. Проблема личности в программировании,, что у каждого свое видение, как у дизайнеров, поэтому без собственного видения на кодинг не вкатиться. Т. К.. Стандартов уже столько что их можно всю жизнь изучать и ни разу не написать программу.
Сап. Хочу собрать проект, которого пока нет, clang'ом. Суть такова: мне нужно заинклудить cstddef (для size_t). При попытке собрать вываливается с ошибкой support for type '__float128' is not yet implemented. При добавлении флага -stdlib=libc++, как советуют в инете, начинает вываливаться с ошибкой fatal error: 'cstddef' file not found. Что делать?
Анон, помоги мне, я новичок в программировании. В общем задача звучит так: "В одномерном массиве из 12 элементов определить максимальный среди отрицательных и минимальный среди положительных элементов". Так вот, как сделать так, чтобы из чисел, например, {-1, -2, -3, -4} максимальный был -1 а не -4 Помогите плиз, не хочу быть отчисленным после первой сессии
>>1102841 1) пусть первый встреченный отрицательный элемент и есть искомый элемент, а первый встреченный положительный элемент и есть искомый элемент 2) с каждым новым элементом выполнить проверки: если он отрицательный и при этом он... и т.д.
Алсо, добавь пустые строки вокруг операторов условий и циклов, читать невозможно же.
>>1102841 > Так вот, как сделать так, чтобы из чисел, например, {-1, -2, -3, -4} максимальный был -1 а не -4 >Помогите плиз, не хочу быть отчисленным после первой сессии блядь не помогайте этому дауну
>>1102884 array - это массив в переводе с английского. Когда говорят "массив" в разговоре о С++ имеют ввиду либо вектор, либо аррай, а обычные массивы называют C-массивы. >>1103052 Мне кутэкректор по душе, можно убрать все панельки, места на экране съедает минимум, нативный кросплатформенный код, компилятор цепляет чуть ли не любой (особенно на линуксах).
Не вдцпляю вообще, ребят, помогите. Есть строка text[], например, там надо перед каждым опрежеленным символом вставить другую строку. Как это реализовать? Сижу щас на лабе, застрял на этом моменте конкретно.
>>1103723 >В плюсах есть какие-то приятные улучшения, кроме шаблонов и обработки ошибок? Лямбды ещё, люблю лямбды. Ты так говоришь "кроме шаблонов", как будто это мало (это если ты про STL). Ещё есть range for. Ну и самое главное - RAII. Можно писать код вообще без утечек памяти, используя несколько простых правил.
Кстати, вот чего мне хотелось бы, так это шаблонных функций, которые принимают контейнер, а не пару итераторов. Надоело уже писать бегины и энды там, где я весь контейнер передаю, выглядит тупо. >>1103785 >Есть строка text[] Это не строка. Строка - это string text. >Как это реализовать? Если тебя по ладоням бьют за STL и плюсы - писать с помощью memcpy в память, выделенную malloc-ом, лол. Препода тормоши, он деньги получает за это.
>>1103816 Как в 2017, только нету лямбд и констекспров. >>1103841 Не буду же я писать на каждую функцию STL перегрузку. >>1103845 Не использовать new, не использовать malloc/calloc, использовать только shared_ptr/unique_ptr и make_shared/make_unique
>>1103158 >Когда говорят "массив" в разговоре о С++ имеют ввиду либо вектор, либо аррай, а обычные массивы называют C-массивы. >>1103799 >text[] Это не строка. Строка - это string text. Как же я проигрываю с дегенератов в этом треде.
qt creator на винде в фоне жрёт процессорное время. Даже если ничего не открывать, ни одного файла - всё-равно в фоне выжирает одно ядро почти полностью.
Погуглил, говорят это оно индексирует какие-то файлы то ли справки, то ли ещё какого мусора и через некоторое время должно пройти. Где-то часов через семь-восемь это в самом деле заканчивается и процессор больше не нагружается. Только после перезапуска он заново начинает. Можно это как-то отключить? С моей стороны оно просто так жгёт процессор, а работа самой среды не изменяется вообще никак, ни в процессе, ни после завершения.
Анонас, подскажи, плиз. Пытаюсь использовать вот этот код https://github.com/alexeylysenko/CryptFileDevice в своей недопрограммке. Ему требуется openSSL. Ок, скачал openssl.v120.dyn-rt.static через Nuget, поставил. Но всё равно проект не собирается, пикрилейтед. MVS 2015. Как фиксить? inb4: Определи выражение константой
>>1104082 keyLength и ivLengtn – это не константные целочисленные переменные, ими нельзя инициализировать размерность статические массивов (по крайней мере не во всех компиляторах). Используй unsigned char key = new unsigned char[keyLength]
>>1103908 Название треда прочитал? Прочитай ещё раз. >>1103913 Повторяю для долбоёбов: это сипласплас-тред и в этом треде массивом называется НЕ ТОЛЬКО указатель на тип. Если у тебя массив - это только указатель на тип, то вали из треда. >>1103994 1) Напиши багрепорт. 2) После того, как написал багрепорт, удали все файлы справки, там в настройках есть список. >>1104082 Поздравляю, ты стал жертвой похуизма микрософта по отношению к стандарту языка. Работало в 2012 - перестало работать в 2015. Замени на оператор new и допиши в конце скопа delete.
>>1104099 Повторяю для дебилов: это сипласплас-тред и в этом треде массивом называется В ТОМ ЧИСЛЕ плейн массив. В отличии от того утверждения, где С-массив это не массив.
>>1104099 >Поздравляю, ты стал жертвой похуизма микрософта по отношению к стандарту языка. Поздравляю, это не С-тред, по стандарту у майкрософта все, VLA - не стандарт.
>>1104108 Это уже другое. Ты же качал OpenSSL, а либы под MSVS бывают, грубо говоря, 4-х видов: MT (статическая), MD (dll), MTd (статическая дебаг) и MDd (dll debug).
>>1104103 > В отличии от того утверждения, где С-массив это не массив. Покажи мне это утверждение. Пока что я вижу только обиду на то, что крестобоярин посмел считать array массивом. >>1104104 Я не писал, что VLA есть в стандарте. Но ладно, ты подебил, в студии всё по стандарту.
>>1104165 Мне неудобно ей пользоваться, у меня на ней иногда не компилируются простейшие программы со сторонними библиотеками, какой-то текстовый редактор с небольшими дополнениями занимает несколько гигабайт места, слишком сильно вшивается в систему, воспоминание о vs 2008 - код на 151 строчку компилировался 2.5 минут после каждой правки и ещё всякие такие мелкие неприятности. Субъективщина сплошная. Это примерно как сравнивать фотошоп и sai. Может быть в первом и больше возможностей, но вторым намного проще, приятнее и удобнее пользоваться в рамках того, что он умеет.
>>1104256 А вне твоего НИИ мир, которому поебать на +5% перформанса в арифметике (кроме других НИИ, лол), и узкие места можно поправить руками, а не супердорогущим пропиетарным закрытым компилятором, в который ещё и новые стандарты неспешно завозят.
Ещё вопрос по cmake и qt creator. Хрен с ней со справкой и загрузкой процессора.
Как сделать переносимый-портабл проект? Типа, папку с файлами перенёс куда-угодно и всё работает. А то он создаёт файл CMakeLists.txt.user с некоторыми настройками и прописывает там абсолютные пути к директориям. При переносе пишет Failed to activate protocol version: "CMAKE_HOME_DIRECTORY" is set but incompatible with configured source directory value. Там всего в нескольких местах подменить, конечно, и в общем-то можно костыль сделать для этого, но это как-то совсем некрасиво.
>>1104686 Удали этот файл, будет ок. Я использую Qmake, удаляю файл .pro.user, эффект тот же. Он генерируется Креактором во время конфигурации проекта.
>>1104701 Он его каждый раз создаёт же. Причём если написать относительные пути - всё-равно замещает на абсолютные. Может быть есть где какой флаг это отключающий.
К тому же, там некоторые настройки запуска по мелочи сбиваются. Проще заменить пути в файле, чем отыскивать эту фигню в настройках и менюшках потом.
>>1104731 Хуй знает тогда. Топорный вариант - найти в файлах проекта и исправить на относительные. Правильный вариант: открыть мануал Креактора и прочитать.
Ананасы, реквестирую вашей помощи, заебался сегодня. В общем, есть ли какой-нибудь способ (без использования sstream) скрестить boost::archive::binary_input и сырой массив данных? То есть, в 1.65 буст нихуя не умеет использовать boost::iostreams вместо стандартных, есть варианты, кроме использования std::sstream (он же deprecated :( )
>>1099142 (OP) Есть такая функция перекодировки: https://ideone.com/iepDlP Как она работает, если аргумент не найден в хэш-мапе? Метод find получает несуществующий символ и возвращает end(). Попытка обращения к end() - неопределенное поведение. Почему код все равно работает?
>>1105240 Мудила, там определения функций и конструктора достаточно посмотреть что бы понять как оно работает, это тебе QThread с наследованиям или переопределениями.
Аноны, подскажите пожалуйста, что я делаю не так. Суть: 2 класса (для одномерного и двумерного массива), в которых надо перегрузить операторы декрементации и инкрементации (должны уменьшать/увеличивать числа в массиве). Сделал все, как расписано в примерах на Хабре, искал примеры еще, но в итоге, после вызова оператора ++/-- имеющийся объект дропается, причем если вызов постфиксный - успевает вернуть старое значение, а после цикла с увеличением/уменьшением выпиливается. При попытке вывести - выводит пустую строку. Через дебаг во время вывода пишет, что чтение памяти невозможно.
Антоны, пишу крестики и нолики и почему-то нихрена не работает. Уже день голову ломаю, не могу понять в чем ошибка. Обоссыте, но если можете, то помогите. https://ideone.com/FBaBG9
>>1105367 Более знающие поправят, но ты создаешь внутри функции временный объект oldValuе и возвращаешь ссылку на него, а по выходу из функции память освобождается и возвращенная ссылка указывает на мусор.
>>1105367 в пизду иди со своими картинками блядь нахуй нам твоя лаба со всем дерьмом? Задай изолированный вопрос, на который можно ответить, не пытаясь сделать лабу за тебя >>1105375 >#include <conio.h> Обоссал. Тряси препода, он за это зарплату получает.
>>1105375 And: identifier not found Замени на && Во-вторых, ну ок, ты проверяешь, и если Y >0 продолжаешь гнать его в плюс. Надо же минус. Потом ты перевод строки после трех символов не выводишь. Но так то полный треш, это не починить.
>>1105404 >Задай изолированный вопрос, на который можно ответить, не пытаясь сделать лабу за тебя Извини, если сократить, то почему инкремент/декремент выпиливает объект, хотя должен просто его увеличить/уменьшить его?
>>1105396 oldValuе - копия через конструктор копирования, в постфиксных операторах же должно возвращаться старое значение. Выходит так, что перегрузка вроде работает, т.к. первая строка создает копию как и должна, но сам объект, для которого был вызван инкремент - удаляется, хотя просто должен был увеличиться.
Нужно посчитать кол-во слов в тексте, начинающихся на определённую букву. Сам текст находится в текстовом файле (1.txt). Всё работает, но какого-то хуя не считывается самое первое слово. В чём проблема?
>>1105423 Ответ: эти строчки кода ничего не "выпиливают" (лолштоблядь). Ошибка находится в другом месте. Если бы ты хотя бы код запостил, я бы ещё порылся. >>1105441 На кой ляд тебе char[64] вместо std::string? Олсо, зря ты на eof проверяешь - он возникакет только тогда, когда считано на один символ больше, чем есть в потоке. http://coliru.stacked-crooked.com/a/1f6b8cb5f2efd7d3 Вот так правильно. >но какого-то хуя не считывается самое первое слово. Слова-то, блядь, у тебя как записаны?
>>1105599 >Ответ: эти строчки кода ничего не "выпиливают" (лолштоблядь). Ошибка находится в другом месте. Если бы ты хотя бы код запостил, я бы ещё порылся.
Просто именно после перегруженных операторов объект "перестает существовать". Я пробовал делать инкрементацию просто как обычную функцию, и она работала, но при попытке сделать так же в операторе ситуация повторялась. http://coliru.stacked-crooked.com/a/6461ce653362870b
Котаны, чет туплю. Использую tesseract, на распознавание в него подаю изображение "Pixs" загруженное leptonica. >tesseract.SetImage(Pixs); leptonica принимает (FILE ) ( тобишь файл на диске) Этот файл за мгновение до этого я загружаю и сохраняю Curl-ом: >FILE fp; >fp = fopen(outfilename,"wb"); >curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); Есть способ выкинуть этап сохранения/загрузки с диска? Что-то типа: Curl-ом писать в "виртуальный файл" (FILE *), а потом этот виртуальный файл подсовывать leptonica. Прога под Windows если что. Есть вариант конечно создавать небольшой RAM диск и писать/читать оттуда, но это сильно бьет по переносимости проги.
>>1103723 Олсо, КОНЕЧНО ЖЕ, ссылки и рвалью-ссылки, благодаря которым стало более добно писать в функиональном стиле. >>1105618 ааааааазаааааааъхххааааъъъъъъазаззхзааааааааааа ёбаааа >Vector* copy = ++vec; Попробуй предположить, что делает эта строчка? Пару раз не угадаешь - расскажу.>>1105665 >Есть способ выкинуть этап сохранения/загрузки с диска? >leptonica принимает (FILE Нет. Как вариант - поищи что-нибудь в Бусте, мемори маппед файл какой-нибудь с ленивым сливом буфера записи.
>>1105737 Vec - указатель на объект, т.е. в copy я пытаюсь создать указатель на указатель, который я инкрементирую без разыменования, т.е. вместо того, чтобы увеличить значения по адресу, увеличиваю сам адрес?
>>1105754 Бинго! Ну а дальше сам, по шагам: продумай, что нделает каждый символ. Сразу говорю: для того, чтобы присвоить вектор вектору, тебе не хватает конструктора копирования (дефолтный есть, но при определении любых конструкторов он удаляется).
>>1105754 Точнее, ты не указатель на указатель создаёшь, ты только инкрементируешь указатель и говоришь что это указатель новый вектор. Если тебе прям до жопы нужно именно с указателями трахаться, то делается это вот так: http://coliru.stacked-crooked.com/a/722b1939961b68de Но опять же, тебе не хватает конструктора копирования как минимум, как бы ты не изворачивался.
Сделать указатель на указатель тебе не даст статическая типизация.
Есть план местности, разделённой на квадраты, заданный матрицей. Ячейка матрицы - высота этого квадрата над нулевым уровнем. Нужно найти кратчайший путь из (х0,у0) в (х1,у1). Длина перемещения из квадрата в квадрат = k, длина спуска/подъёма при переходе в соседний квадрат = модулю разности высот квадратов. Двигаться можно только между центрами квадратов и параллельно осям Ох, Оу.
Хочу ебануть алгоритм Дейкстры, но нужна матрица с весом рёбер графа. Как её получить из "плана местности" я не ебу. Хелп, аноны.
>>1105871 Ну приоритетную очередь я написал, а дальше stl-то зачем? Вся трабла тут > Хочу ебануть алгоритм Дейкстры, но нужна матрица с весом рёбер графа. Как её получить из "плана местности" я не ебу. Хелп, аноны.
>>1105869 Что такое матрица весов рёбер графа? Что такое вес ребра графа? Если ты не можешь ответить на эти вопросы - иди нахуй. Если ты можешь ответить на этив вопросы, то дальше ты и сам сможешь.
Привет аноны, такое дело очень стараюсь делать все задания в Программирование. Принципы и практика использования C++, сложно конечно но получается и вот напоролся на задания -чтобы сделать поток ввода стал явным параметром. Делаю все по гайду в 8.5.8, в параметры функций - Token_stream& ts a в main строку - Token_stream ts; Все работает и я был очень рад что избавился от глобального, да только с istream& этот способ не работает! конечно я не дебил и начал искать где только можно. Я сразу увидел что ничего нет и это шаблон класса и мне это ничего не сказало потому что я только вкатился. Так как это сделать ядрён батон? объясните пожалуйста ньюфагу
>>1106173 class Token_stream { public: Token_stream(); void foo2(istream& is); void foo1(Token_stream& ts); }; void Token_stream::foo2(istream& is) { } void foo1(Token_stream& ts) { } int main(){ Token_stream ts; foo1(ts);//работает istream is; foo(is);//не работает } в 8.5.8 на примере Token_stream это работает а по заданию требует istream, я хрен знает как это сделать
>>1106203 >не работает Ты ему зарплату что ли платишь, уёбок? Почему из вас, пидорасов, надо клешнями всю информацию вытягивать? Если я тебе покажу код и скажу "не работает", тебя это устроит?
Парни, норм тема взять макпук 12 дюймов? Задача портировать с винды пару легких десктопных приложений на крестах с qt, а потом просто носить его с собой - ну там открыть документ в люстре/индизе, ворд-эксель, браузер. С хакинтошем и виртуалками пердолиться не хочу. Потянет или надо прошку брать?
>>1106462 Ясен хуй, потянет. Я не знаю, какой там в макоси планировщик - быть может, там такая же жопа, как в винде, когда одна из программ начинает слишком много вычислять, и приоритет активного приложения не повышается. Если это не так, меня эти 1,2/3 ГГц не смущают никак - ну подождёшь ты немного в паре мест, ну и хуй с ним.
Прямо сейчас сижу с селероном x86 1,5 ГГц - вполне терпимо. Открыть пидиэфку и текстмейкер и несколько вкладок (штуки четыре) в браузере я точно могу. Хорошее видео не декодируется, максимум - какое-нибудь 102460030.
>>1106476 >1024х600х30 Проигрыватель плохой или шибко сложный кодек. Вот такое чудо проигрывает на старом the kmp 1920х1080 в mp4. Там можно в настройках видеодрайвера включить разрешение экрана вплоть до 2560х..., так что когда мышку к краю экрана подводишь - отображаемая область передвигается.
>>1106482 Едва нашёл флешку, которую тот ноутбук прочитал, лол, чтобы точно убедится. Там проблема с usb портами (только один из трёх работает) и аккумулятором (10+ лет из которых шесть лет я его ежедневно использовал) - ни один внешний хард не раскручивается, всем питания мало. У меня нет видео в таком разрешении, потому не долго думая я скачал что-то с ютуба. (Можешь напрямую с меня цепануть - http://95.27.236.250/45/ )
https://www.youtube.com/watch?v=MAUsbFti6fo 1280х720х30 (3.2Мб/с) - без каких-либо лагов, загрузка цп прыгает 40-60. 1280х720х60 (3.6Мб/с) - пару раз за минуту зафризился на полсекунды, загрузка цп прыгает около сотни. Вот тут я сейчас вообще офигел увидев такое плавное воспроизведение. Прям надо брать камеру и записывать, как эта штука из каменного века выдаёт такую плавную картинку. 1920х1080х60 (5.6Мб/с) - со скоростью вполовину меньше нормальной показывает, загрузка цп стабильная сотка. https://www.youtube.com/watch?v=Ij6AFF8lbOs 1920х1072х24 (3.1Мб/с) - без каких-либо лагов, прыгает около сотни. Возможно ещё хард подводит (он совсем громко трещит что-то), просто не успевает высокий битрейт считывать - его я тоже ни разу не менял и из-за баловства с магнитом на нём громадная царапина на 10ГБ, при обращении к которым система падает с бсодом.
Анон, можешь подтвердить что я правильно работаю с QThread? Цель - останавливать новый поток при помощи отправки данных из основного потока. Всё сделал правильно? Что-то добавить-убрать?
>>1106490 >Едва нашёл флешку, которую тот ноутбук прочитал, лол, чтобы точно убедится. Там проблема с usb портами (только один из трёх работает) и аккумулятором (10+ лет из которых шесть лет я его ежедневно использовал) - ни один внешний хард не раскручивается, всем питания мало. Вычислим по IP.
>>1099142 (OP) Вопрос по разработке через тестирование. Если есть класс в файлах .h и .cpp, в каких файлах писать для него тесты? Где вы размещаете свои тесты?
Хочу обмазать свой проект на Qt тестами GoogleMock. На этапе линковки получаю ошибку: обнаружено несоответствие для "RuntimeLibrary": значение "MTd_StaticDebug" не соответствует значению "MDd_DynamicDebug" в db.obj
ОС может отбирать память у приложения? Она шлет там типа сообщения какие-то, или еще как-то надо проверять не стал ли указатель нулем? Тот же вопрос про видеопамять, в связке с OpenGL.
Пишу проект расчета зарплаты. Приложение работает с базой SQLite. Где хранить процедуры общения с бд типа "получить базовую ставку работника" и "получить опыт работы в годах"? Дублировать код в каждом подклассе типа работника или группировать в классе запросов?
>>1106670 Я привожу, как преимущество, то, что я знаю, как это работает, и что слова "signal" и "slot" обозначает, и подразумеваю, что ты идиот, так как не умеешь абстрагироваться от деталей реализации, которые ты специально отрыл, хуй знает, зачем. >>1106742 Открой документацию к своей ОС и прочти сам.
>>1099142 (OP) В очередной раз пытаюсь вкатиться в Qt ради GUI. В этот раз поставил на вижак плагин, и столкнулся с той же проблемой, что и в прошлый раз - при компиляции в целевой папке есть только .exe файл, никаких Qt'шных либ там нет. Вопрос - как можно настроить компиляцию, чтобы я на выходе получал папку со всеми необходимыми бинарниками, вот прям чтобы взял и запустил на другом ПК? Или в опенсорсной версии Qt хуй мне на рыло с такими запросами и запускать только локально из IDE? В прошлый раз единственное решение, которое я нашел - добавлять ВСЕ Qt'шные либы в папку с .exe и запускать .exe, убирая либы по одной, чтобы узнать, какие нужны. Но это же блять не серьезно. Есть какие нибудь решения?
Посоны, раньше писал на нормальных языках, сейчас решил изучить С++, читаю книжки из шапки, вот в одной из книг смущает строка пикрелейтед - n < hexdigits.size(); Я так понимаю, каждую итерацию вызывается метод size()? Это на С++ нормально? Зачем каждый раз вызывать метод, если можно один раз его узнать?
>>1106904 Сейчас компиляторы умные и сами вынесут результат метода из цикла если в нем вызывались только константные методы, ну так то да такую хуйню писать это плохой тон.
>>1106904 > Зачем каждый раз вызывать метод, если можно один раз его узнать? Затем, чтобы код был читаем. Ты ещё спросил "зачем цин>> каждый раз вызывать" (вызов которого на порядок затратнее). Сайз - это метод, который целиком определён в хедере, так что компилятор будет инлайнить его, если ты не запретишь, так что от вызова метода объекта, сохранённого на стеке, вообще нихуя не остаётся - ни передачи указателя, ни джампа, нихуя, так как функция size() - это только обращение к переменной. Уберёшь флаг оптимизации - вызов появляется. https://godbolt.org/g/Co8q7N https://godbolt.org/g/JVCPNd Что там за нормальные языки у тебя были, лол?
Не лучше ли следовать принципу единой ответственности и выделить весь код, отвечающие за расчет зарплаты, в отдельный класс Salary? Для разных типов сотрудников зарплата рассчитывается по-разному, но формулы допускают обобщение.
Котяры помогите нубу. Есть допустим указатель int *a = new int[10]; Я могу получить адрес этого указателя: cout << &a; Но что за число я получаю когда ввожу cout << a? Без звездчоки. Там тоже какое-то число шестнадцатиричное, но куда оно указывает?
>>1106956 Сам же написал уже всё. a - указатель, как ты сам и написал. Он указывает на первый из твоих десяти int. &a - адрес указателя а, то есть оно указывает на а.
&a -> a -> int[10] Реально в памяти существуют только а - явная переменная типа int* и int[10] - выделенная при помощи new память.
>>1106953 Мне кажется, логичнее оставить в классе, только сделать функцию виртуальной, чтобы можно было для каждого дочернего класса вызывать свою версию getBaseRate();
>>1107051 Унаследуйся от класса и импортируй все методы в публичную область видимости с использованием using, или сделай объект доступа к методам касса через friend или #define private public лол
Есть B+ дерево, которое в общем выглядит как на пике. Вопрос, нужно ли писать конструкторы для InnerNode и LeafNode и прописывать в них new для выделения памяти под масссивы (тогда и соответствующий деструктор нужен) или можно так оставить? Просто оно и так компилируется, хотя я подозреваю, что если в DEGREE передавать переменную, то оно не должно так просто заработать. Как лучше всего выделять память по массивы в структурах?
>>1107038 Лень расписывать, ну короч считай так: объект-бог это всегда плохо, потому что у него много связей с остальными объедками, и если что-то поменяется, придется разгребать весь этот фарш, вместо четкой иерархии объектов. Второй момент это скрытое состояние, которое наверняка где-то неявно будет меняться при вызовах. А если хранить состояние в статических переменных, можно нарваться на то, что они могут инициализироваться в произвольном порядке.
>>1106946 Какими ещё свойствами? Ты обдолбался? >лишние скобочки рядом с константами штоблядь >>1107068 > (тогда и соответствующий деструктор нужен) shared_ptr >если в DEGREE передавать переменную, то оно не должно так просто заработать. Прочитай определение шаблона. >>1107129 Хочу пять одинаковых неймспессов в рантайме. Надо создать пять процессов?
>>1107154 >shared_ptr Почитал про него. Нормальная тема, спасибо. >Прочитай определение шаблона Да, уже успел глянуть. Знатно опозорился. Решил итого не трахаться с динамичсеской памятью, всё равно всего лишь курсач.
@ УСТРОИЛСЯ В НОВУЮ КОНТОРУ @ КУЧА ЛЕГАСИ КРУГОМ @ C++11 - НЕ, НЕ СЛЫШАЛИ @ СТИЛЬ НЕ ЕДИНООБРАЗНЫЙ, КУЧА ПЛАТФОРМЕННОГО КОДА ТОРЧИТ НАРУЖУ @ ВЕДУЩИЙ ПРОГРАММИСТ ГОВНОКОДЕР
>>1107450 хз, там особо не надо зачитываться, лучше с собой тетрадку иметь, чтобы представлять как это "в пространстве". Если бы без тетрадки сидел, ебанулся бы думать, как patricia дерево работает.А так с PDF читал.
>>1107441 @ СТАТИЧЕСКАЯ ТИПИЗАЦИЯ? У МЕНЯ ИЗЗА НЕЁ НЕ КОПМИЛИЯЕТ, ЗАЧЕМ ОНА? >>1107478 С точки зрения приципа работы - отличий от указателя нет. С точки зрения C++: передать указатель на временное значение нельзя, а передать временное значение по конст-ссылке или рвалью-ссылке можно. Сдвигать ссылку нельзя, а указатель можно. То есть, ссылки в C++ нужны для улучшения читаемости кода (меньше стрелок, звёзд и амперсандов), расширения сферы применения функций, соблюдения безопасности кода (но отхуячить ногу повисшей ссылкой ты всё равно сможешь, так что тут бабка надвое сказала. Пока перегрузку "оператор." не завезли, умных ссылок не будет, а без них и безопасности нормальной не будет). >>1107484 лиспоблядь закукарекала
>>1107488 например, чтобы не засирать память. Ну, ты в любом случае со временем поймёшь. И например есть такая весёлая тема, что ты делаешь указатель на переменную в функции, ретурнишь, а оно возвращает хуй, так как функция умерла
>>1107488 Конечно можно, только копирований будет дохуя (инбифо в моих задачах не будет) и производительность просядет. Чтобы функциональный код быстро работал (а код без указателей и ссылок - это чаще всего код в функциональном стиле), компиляторы и интерпретаторы функциональных языков используют кучу трюков, которые эквивалентны работе с указателями в плюсах, но разница всё равно есть. Даже в плюсах есть трюки для устранения лишнего копирования.
>>1107484 Представь себе, что ты рисуешь кнопку с картинкой, что быстрее при вызове нескольких функций, копировать всю 10мегабайтную картинку или передавать только один указатель на память?
Я студент, вчера писал лабу смысл задачи был такой: пользователь вводит массив чисел а дальше с ними происходят некие действия и затем выводится массив. Только массив для этого должен быть динамический. Я решил не спрашивать у пользователя какой массив он хочет, а решил увеличивать массив путём копирования во 2 удаления, 1 созданием, но уже увеличенным в объёме, копирования в 1 , удалением 2 что бы в следующий раз если пользователь захочет увеличить объём, то опять создатся 2 массив увеличинный и произойдёт всё что я описал выше. Но там возникла проблемма массивы не копировались друг в друга. Я решил написать программу дома и здесь тоже возникла проблема , но уже другая.Выдаёт вызвано исключение: нарушение доступа для записи. arr_one было 0x1118239. Вот я пришёл сюда за помощью. Подскажите пожалуйста что я не так сделал. Вот код: https://ideone.com/0Y8IU1
>>1107545 Дождись когда будете на лекциях проходить стандартную библиотеку C++ - STL. Там уже есть готовые динамические массивы vector. Расширение массива на один элемент решается в одну строчку:
// пустой массив целых чисел vector<int> vv; // сейчас размер 0 // добавить элемент vv.push_back(22); // сейчас размер 1
>>1107569 Плоха она тем, что происходит ОЧЕНЬ много бессмысленных выделений-освобождений памяти и операций копирования. А если по твоему коду - то меня очень напрягло то, что в одной функции у тебя ДВА раза объявляется переменная с одним и тем же именем int *arr_one. Если ты удалил область памяти, на которую указывал arr_one, то это не значит что сам указатель пропал.
>>1107545 Off by 1 ошибка. Ну прогони в голове у себя одну итерацию цикла. Индексы в массивах идут с нуля, выделаешь память ты индексом. new int[1] это ровно 1 инт
>>1107545 Ну и ты 2 раза копируешь зачем-то, можно же один раз копировать. 0. у тебя есть массив 1. выделяешь память под новый массив (с новым размером) 2. копируешь из старого массива в новый и освобождаешь память старого массива 3. заменяешь указатель на старый массив указателем на новый.
Кроме того, на практике это реализуется хитрее: когда структура данных растёт, но новый массив можно делать размером не размер_старого + 1, а размер_старого + 1/2 * размер_старого, например (увеличивать размер только когда в старом место кончилось). Это так реализовано везде и каждый раз не нужно выделять память и копировать (обе операции сравнительно медленны)
>>1107586 ну так я копирую во временное хранилеще. Что бы увеличить старое , сохранить в него а затем удалить временное хранилеще. Не знаю как тебе, но мне эта идея кажется очень логичной.
>>1108047 > Переходи на MSVS Я потому и скачал Кьют, что это параша ебаная. Создает все за тебя непонятно каким образом, чуть что не так сделал - сразу все наебнулось без возможности восстановления, а тут все пишется вручную, весь код твой родной, а не высратый, блядь.
>>1108058 > https://forum.qt.io/topic/66109/missing-kits Не понял. Мне нужно пути к проектам сделать без пробелов и спецсимволов? Это не помогло. К тому же, он написал что у него работает Qt Widget, а у меня на пике именно он. Что тогда?
>>1108034 Собственно, даже если при скачивании дистрибутива с креактором и запуска креактора из того бистрибутива такая проблема, то нужно сделать следующее: - сделать то, что написано над пустым списком - написать багрепорт >>1108075 >Мне нужно пути к проектам сделать без пробелов и спецсимволов? И пути к файлам КуТэ тоже.
>>1108082 > - сделать то, что написано над пустым списком Сделал уже давно. С начала там был желтый треугольник с восклицательным знаком, потом я нащелкал что его нет. Ничего не изменилось. > - написать багрепорт Какой багрепорт? Я же говорю, что качал разные версии, и древние, и современные, все одно и тоже. > И пути к файлам КуТэ тоже. Да вроде там все без пробелов. D:\Programs\Qt. Пиздец какой-то, короче. Какие альтернативы для Qt? Такие, чтобы код был мой, а не высираемый автоматически.
>>1108083 Не знаю о чем ты, я кинул ссыль на тред, там английским по белому написано: In a nutshell, a "kit" is a combination of one compiler + one version of Qt that are compatible. Note that a "kit" is a concept specific to Qt Creator.
>>1108059 >Я потому и скачал Кьют, что это параша ебаная. Создает все за тебя непонятно каким образом, чуть что не так сделал - сразу все наебнулось без возможности восстановления, а тут все пишется вручную, весь код твой родной, а не высратый, блядь. >
Ты настолько необучаемый, что не можешь создать пустой проект?
>>1108087 >Какой багрепорт? В компанию Qt, блядь. Не должно быть так, что ты скачал дистрибутив, поставил, запустил, и не можешь программу собрать, это баг. Я только одно могу предположить: ты скачал дистрибутив для MinGW. >>1108089 А ты попробуй сам создать пустой проект, придурок, когда от тебя требуют выбрать кит и отключают кнопку "далее".
>>1108131 >Я только одно могу предположить: ты скачал дистрибутив для MinGW. Но даже в этом случае у тебя будет хотя бы кит для мингв в списке, если ты его не удалил.
>>1108448 Какие именно переменные-то? Зачем? pragma pack для структур + свой менеджер памяти ничего не выравнивающий, только по перформансу ты обосрёшься.
При создании проекта появляется вот такая хуйня. Сбрасывал настройки через /resetuserdata - нихуя не дало. До этого пытался поставить библиотеку OpenCV. Что я сделал не так?
>>1108458 Ты походу даже стандартные пути заголовков сбил, вася. Совету изучить CMake и делать проект для спермостудии через него (куда проще и не будешь привязываться к одной платформе). Всё равно его используют все, и тебе так или иначе придётся.
>>1108131 > В компанию Qt, блядь. Не должно быть так, что ты скачал дистрибутив, поставил, запустил, и не можешь программу собрать, это баг. Я же говорю, я качал разные версии, ты хочешь сказать это именно на моей пеке оно? > Я только одно могу предположить: ты скачал дистрибутив для MinGW. Да я блядж много чего качал, и с разными компонентами(с начала дефолтная папка tools, потом еще выбирал дополнительно верхние папки). А с чего вы вообще взяли, что я туда компилятор из студии присобачить хочу? Моя цель - наоборот от нее отгородиться. Я когда древнюю версию Qt скачивал, даже отдельно компилятор mingw туда скачал.
>>1108876 Открой таблицу символов ASCII. Тип char в Си это просто интерпретация численного кода в букву или символ в более общем случае. Поэтому 'a' непросто не равно 'A', а никогда не равно. Потому что 'а' имеет код 97, в то время как 'A' имеет код 65. Твой вопрос сводится к вопросу, пацаны а 65 равно 97 ?
Касательно 'a' < 'b', тоже самое. Ты можешь пойти дальше и задать вопрос, а почему, допустим "a" < "aa", ответ: лексикографическое сравнение. Сравнение происходит в соответствии с цифровой комбинацией символов и понятно, что условное 97 будет меньше чем комбинация двух а.
Присоединяюсь к вопросу, как происходит сравнение ?
если что то вида :
char x1 = 'a'; char x2 = 'A';
if(x1 = x2) конечно выдаст true
Что происходит: ты присваиваешь х1 значение х2, потом х2 отправляется в оператор if , где преобраз. к типу bool, если х2 не равно 0, то ответ будет true.
if (x1 == x2) то все будет в порядке, выдаст false как и должно быть.
Стоит почитать/ освежить в памяти главу про условные операторы. Посмотри, что понравится в книгах из шапки. С++ и Си не те языки, которые можно выучить шароебясь по форумам и задавая вопросы.
>>1108848 Спутал тебя с кем-то из треда. >>1108872 >Всегда ли 'a' == 'A' Никогда. Потому что два разных символа, блядь. Если ты смог сохранить два символа в кодировке, коотрую компилятор поддерживает, они не могут юыть равны. >и всегда ли 'a' < 'b'? Скорее всего ты не найдёшь ни одной платформы, на которой это было бы не так, но C++ такое соответствие не задаёт. >>1109010 >Что он гарантирует — что '0', '1', ..., '9' идут подря Ссылку дашь?
Поясните дауну, в чем разница между обычными объектами, и new объектами? Человеческим языком. Все говорят, что это типа "выделение памяти". Блядь, а обычная переменная это не выделение памяти?
>>1109229 Обычный объект или обычные переменные на неком стеке размещаются. Во-первых, размер стека ограничен, и он не сильно шибко большой, по умолчанию. Во-вторых, они там сами занимают и освобождают память. А через new ты можешь выделять сколько угодно памяти и по своей воле по мере необходимости в произвольном порядке её освобождать.
А вот чего realloc не завезли - понять не могу. Он же быстрее работает. Если кусок выделенной памяти был больше запрошенной, то он не будет перевыделять память вообще. А через new-delete придётся в любом случае выделять временный кусок и копировать какой-то мусор. И потому приходится делать костыли, что размер вектора удваивается при добавлении элементов, чтоб менеджер памяти не мучить, так что программе для работы требуется ощутимо больше памяти, чем ей реально необходимо.
Занялся изучением C и вразу же возникла проблема. При выполнении программы вывод отстаёт ровно на один цикл. Я просто не понимаю в чём проблема. Разхясните для дауна пожалуйста
[code]#include <stdio.h> #include <stdlib.h>
int main() { int A = 0, Num = 312, i = 0; srand(58); Num = 0 + rand() %1000; printf("enter num\r\n"); scanf("%d\n",&A);
for (;;) {
if (A > Num) { printf("Your number is bigger then %d\r\n", Num); } if (A < Num){ printf("Your number is lesser then %d\r\n", Num); } if (A == Num){ printf("You win!"); return 0; } }
>>1109310 Угу. Но если самому писать самый тупой массив, то через new-delete он будет тормознее, так как он всегда в любом случае дублирует массив и производит копирование. Realloc же где-то внутри сохраняет размер выделенного куска, и без нужны не копирует.
Не знаю как там в подробностях работает выделение памяти, кучи и прочее но с дивана выглядит так, что можно конечно это сделать за пределами менеджера памяти вручную, так что new-delete код будет работать по тому же принципу, но в таком случае размер выделенного куска хранится как на уровне менеджера, так и на уровне программы. А если же такая функция есть в самом менеджере (что было бы весьма логично, так как у него и так есть доступ к размерам выделенных кусков), то вот всего этого можно было бы избежать без лишних функций обратной связи возвращающих размер выделенных кусков, лишних переменных хранящих эти размеры или ещё чего-либо в этом духе.
>>1109315 Кому ты пиздишь? Где там отставание? https://ideone.com/lGWN1d На входе там три числа, результат в точности соответствует вводу. >>1109321 Хуиту несёшь. Посыл не понял. > так что new-delete код будет работать по тому же принципу, но в таком случае размер выделенного куска хранится как на уровне менеджера, так и на уровне программы new-delete никак не помогает тебе избежать хранения рамера выделенной памяти в менеджере, так как delete не принимает на вход размер массива. Так что если ты захочешь сделать интрузивный конструктор - в котором будет эксклюзивно хранится размер полученной памяти - то тебе придётся делать это без new/delete, и в итоге ты получишь зонный аллокатор, так как более экономного способа учёта памяти нет (оверхед - по 1 биту на каждую единицу памяти), тогда ты будешь хранить размеры памяти в объектах, а таблицы выделения в менеджере (если ты хочешь хоть какой-то абстракции менеджера от конструктора). Любые другие варианты обязательно повлекут за собой указатели/индексы либо в сторону объектов, либо в сторону менеджера.
Отсутствие аналога реаллока для new/delete вызвано тем, что тогда придётся иметь шестой конструктор - конструктор для изменения адреса объекта. Его просто не придумали во времена первого стандарта, так что живём без него и без ресайза. И НЕТ, это не связано с тем, что new/delete не хранят размеры, они их хранят.
>>1109331 Вектор может использовать malloc/realloc только для trivially-copyable-типов. Указатели на объекты в общем случае могут где-то храниться, и если в случае с копированием в массив большего размера этим занимается мув-конструктор, то для изменения адреса объекта конструктора просто нет, языком не предусмотрено. >>1109332 Матом ругается?
>>1109333 >new-delete никак не помогает тебе избежать хранения рамера выделенной памяти в менеджере Вот потому их и хейчу помаленьку, что они там всё хранят, а толку никакого. Забей, никакого посыла, просто ворчу. Мол от менеджера памяти требуется лишь работа с памятью, а эти автоматические конструкторы new-delete не нужны.
>>1109333 >И НЕТ, это не связано с тем, что new/delete не хранят размеры, они их хранят. Но информацию о том, где располагается переменная с указателем, не хранят.
>>1109339 Да ладно, в С++ Смысла особого в realloc нет. Можешь попробовать написать аналог вектора использующего realloc/malloc/free вместо new/delete - не забудь только поделиться результатами
>>1109341 Какая ещё переменная с указателем, блядь? >>1109355 С таким же успехом можно сказать, что реаллока для не trivially-copyable-типов нет. Убери свой вектор обратно в штаны, долбоёб.
Точнее, не про шестой конструктор, а про шестой метод в дополнение к пяти (конструктор, - копирования, - перемещения, деструктор и ещё что-то пятое, забыл).
>>1109370 Если ты про методы ,которые компилятор генерирует по умолчанию, если они требуются, то их 7.
1. Конструктор по умолчанию. 2. Дестр по умолчанию. 3. Конструктор копирования 4. Операция присваивания. 5. операция взятия адреса (this) 6. Конструктор переноса. 7. операция присваивания с переносом
Анон, а как лучше проверять время на соответствие?
Есть программа, которая каждую секунду сверяет текущее время с заданым интервалом и если текущее время входит в интервал, то выполняется работа. Но возникли проблемы. Время задаётся в формате (HH:MM) для начальной точки и так же для конечной и соответственно сначала получаются интервалы или от beginTime->HH до endTime->HH или от beginTime->HH до 0 и от 0 до endTime->HH. Т.е. может быть время от 07:42 до 12:22 или от 12:27 до 02:26 следующего дня Затем проводится та же проверка на минуты. Затем проводится проверка currentTime->HH на соответствие интервалу. Затем проводится проверка currentTime->MM на соответствие интервалу. Всё это превращается в безумную лестницу из if...else ветвлений, что делает код абсолютно нечитаемым.
Есть ли какой-то более адекватный вариант сравнения времени?
>>1109567 >>1109519 >>1109522 Большое спасибо. У меня получилось как-то так. Сначала проверяю больше ли начальное время конечного. Если начальное время больше, то тогда работа производится всегда вне периода начало-конец. Если начальное время меньше, то работа производится внутри периода начало-конец.
>>1109635 Сутки не учитывают ситуацию вида Сейчас 12:00. Процесс начинается в 16:00 а заканчивается в 13:00. С сутками процесс сработает завтра, но не сработает сегодня. Да такой сценарий маловероятен, но, как говорится, а хули?
>>1109649 >С сутками процесс сработает завтра, но не сработает сегодня. 1) У тебя процесс должен в прошлом остановиться, штоле? 2) То, что ты не хочешь написать свой код правильно, не означает то, что это невозможно. Ссылку на документацию я уже дал тебе. 2) Нахуя тебе from_time_t, если ты можешь получить то же самое с помощью ::now и прочих функций? 3) А ещё ты про auto забыл.
>>1109681 >1) У тебя процесс должен в прошлом остановиться, штоле? В настоящем же. Вот есть период времени от 15:00 до 09:00 когда нужно работать. Если прибавить сутки к конечному времени, то работа будет производиться с 15:00 этого дня до 09:00 следующего дня. Но если мы сейчас находимся в точке времени 08:00, то эта логика не сработает и работа не начнётся, хотя 08:00 входит в интервал от 15:00 до 09:00 но сегодняшнего дня. >2) Нахуя тебе from_time_t, если ты можешь получить то же самое с помощью ::now и прочих функций? Инерция мышления - раньше же я пытался через <time.h> решить этот вопрос. >3) А ещё ты про auto забыл. Ага. Подправил вобщем.
>>1109705 >то эта логика не сработает Логика есть только одна, и ты не можешь в неё. Тебе не нужно каждую секунду вычислять интервалы заново, ты можешь делать это только в конце интервала.
А ещё я не могу понять, как твои макароны работают. time_t - это абсолютное время, а не суточное, так что ты уже где-то что-то вычисляешь, просто мне не показываешь. Ебись сам, короч. :3
>>1109715 >Логика есть только одна, и ты не можешь в неё. Первый пик специально для тебя. >Тебе не нужно каждую секунду вычислять интервалы заново, ты можешь делать это только в конце интервала. А если перевод системных часов?
>А ещё я не могу понять, как твои макароны работают. time_t - это абсолютное время, а не суточное, так что ты уже где-то что-то вычисляешь, просто мне не показываешь. А-то. На втором пике показано откуда всё. Я понимаю как сконструировать time_point на базе time_t с заданными параметрами. Но как сконструировать правильный time_point на базе имеющихся std::string?
>>1109720 Теперь более-менее понятно. Тогда сделать меньше сравнений не получится. Про смену времени - ты прав.
Ну и ещё код вида if(cond ){ return true;} это интересно само по себе. Писать надо return cond вместо этого. >>1109721 В коде из >>1109705-то? Я на условия только сецчас посмотрел, они у тебя там ебанутые какие-то, присмотрись.
>>1109752 >проверяет четность целочисленной переменной через сравнение остатка от деления Ты не просто умственно отсталый, ты дегенерат – пиздуй на JS писать отсюда
>>1109785 Миллион раз было сказано - математика нахуй не сдалась если ты не программист 3Д графики и не какой-нибудь ЧСВшный мудак с ЗП в 80к из яндекса.
>>1109860 Return поправил. А что ты имеешь в виду под >условия только сецчас посмотрел, они у тебя там ебанутые какие-то, присмотрись ? Условия мне кажутся понятными if (Начало > конца) { Проверка на нахождение текущего момента до или после обозначенного периода } else { Проверка на нахождение текущего момента внутри обозначенного периода }
>>1109869 Я уж не знаю, что полезнее: разжевать всё это для тебя сейчас, или сделать так, чтобы ты сам напоролся.
Два времени суток делят сутки на три интервала. Возьми под одному значению из каждого интервала и сделай таблицу труе-фалс с ожидаемыми значениями. Потом возьми код своих ифов и тоже сделай таблицу.
Сравни эти ждве таблицы, и ты увидишь, что ты родил пиздец.
>>1109878 >Сравни эти ждве таблицы, и ты увидишь, что ты родил пиздец. Сначала я подумал что ты меня троллируешь, но потом я понял, что ты видимо не учитываешь условие if (begintp > endtp) которое производит проверку на то какой из *tp стоит первым И соответственно, если endtp по временной шкале после begintp, то мы начинаем работу в первой точке - begintp и заканчиваем во второй точке - endtp. А если endtp по временной шкале стоит до begintp, то мы начинаем работу в любой момент до первой точки - endtp и после второй точки - begintp. Можно конечно переписать код пикрилейтед, и это наверное будет правильно. Но разве это ошибка?
>>1109924 Ну я, к сожалению, тоже не телепат возможно ты имеешь в виду что нужно учитывать двое суток? Не нужно, при смене суток begintp и endtp тоже соответственно смещаются и код работает.
Анон, помоги с программой: В массиве В, содержащем 16 элементов, определить среднее геометрическое отрицательных элементов, расположенных между минимальным и максимальным элементами данного массива. учусь на экономе, не понимаю нахуя нам программирование, никогда не изучал его, но допуск к зачету нужен.
>>1110749 ну вообще занимательно? или лучше выбрать другую сферу и другой язык? На самом деле язык вообще похуй, просто сферу ищу наиболее нормальную, вообще хз есть 4 года а на что их пустить не знаю.
>>1110812 Сейчас работаю в конторе около 100 рыл, контора занимается разработкой программного обеспечения для промышленной автоматизации. Ебать тут легаси... Еб твою мать, но кроме этого моя жопа особенно горит от того, что нет общего стиля кода и каждый петух топчет, как хочет. Просто глаза покрываются кровью когда я смотрю на хэдер-онли класс в 5000 строк или "гармоничное" сочетание CamelCase с all_lowers_with_underscores. Или охуенный подход замешинвания private, public и protected в одну кучу. Легаси - это пиздец. Хотя и платят 70к в моем мухосранске, но, блять, удовольствия работать с этим дерьмом никакого, увы...
>>1110812 1110749-анон на связи. Я бы не рекомендовал. Вкатывайся в питон, веб, и прочую хуету. Денег плюс-минус столько же, зато возможностей и вакансий больше. С++ надо действительно любить, и без страданий в нем никуда. Как никак - самый сложный мейнстримовый язык из существующих
>>1111052 ну я и думал в веб, потому что epam в городе только, но бля, там же и так дохера народу, куда мне то ещё лезть, там любая обезьяна в веб лезет, или не так? а плюсы какие то родные стали, вот когда делать нечего, на них алгоритмы смотрю, это точно пригодится)
Ответы на все вопросы:
- http://en.cppreference.com/w/
- http://www.cplusplus.com/reference/
Прошлый:
- https://2ch.hk/pr/res/1085579.html