Задать вопрос
  • Почему возникают такие ошибки?

    @MarkusD Куратор тега C++
    Brew, П3.8 регламента работы сервиса.
    К сожалению текст на твоих изображениях неразборчив и замылен. Его неприятно читать, поэтому желания отвечать на вопрос не появляется.
    Я рекомендую тебе заменить все изображения с текстом ошибок на листинг ошибок из лога сборки, оформленный тегом <code>.
  • Как определить тип функции для шаблона?

    @MarkusD Куратор тега C++
    yatanai , хороший совет: не писать вопросы в три ночи. Вряд ли на такой вопрос быстро ответят, вряд ли ты находишься в достаточно трезвом уме чтобы изложить суть вопроса в понятной форме, вряд ли тебе не придется вносить уточнения утром.

    Так и тут. Где конкретно находится этот int n? Я пока только одно место вижу и оно не в шаблоне, поэтому я пока тебя не понимаю.

    class property : public C, а если у C этих property 50+ штук? Реальный пример, для одного из типов у меня порядка 60 свойств определено.

    Тебе не нравится использование decltype(C::n) в шаблоне?
  • Как сделать значения по умолчанию в классе C++?

    @MarkusD Куратор тега C++
    MaratPetrov96
    Здравствуйте!

    П3.4 регламента работы сервиса: Вопрос и его описание не должны содержать приветствий и прочих «лирических отступлений»..

    Опишите конструктор объекта по умолчанию (без аргументов), проинициализировав все данные

    Этот пункт требует от тебя использовать секцию инициализации полей в конструкторе по умолчанию. Но ты написал аргументы по умолчанию для конструктора с параметрами.

    char* m = "Renault", тут "Renault" имеет тип const char[N], который свести можно только к const char*. Представленная строка не пройдет трансляцию т.к. тип справа невозможно привести к типу слева.
    char* marka; относится сюда же. Это поле должно иметь тип const char*.

    Car(); и Car(char* m = "Renault" ...) вводят неоднозначность для случая Car example;. Эту неоднозначность нужно убрать и я рекомендую выполнить задание так, как оно написано: т.е. ввести значения по умолчанию в секции инициализации полей конструктора по умолчанию, а от аргументов по умолчанию для конструктора с параметрами отказаться.
  • Почему MinGW не видит winapi функцию?

    Марат Нагаев, ключевая часть фразы - это: "вроде бы".
    expected identifier before string constant

    Это сообщение говорит о том, что в коде на этой строке или выше, все-таки, у тебя ошибка.
  • Почему при вызове деструктора не меняется переменная?

    @MarkusD Куратор тега C++
    liver2009, у тебя в коде тип a реализует схему владения памятью. Владение у тебя, согласно деструктору типа a и счетчику ссылок, реализовано совместное.
    Но для поддержки схемы совместного владения ты не реализовал ни одного конструктора или оператора для копирования и перемещения ресурса, которым твой тип владеет. Такими конструкторами будут конструктор копирования и конструктор перемещения. А операторами - оператор копирования и оператор перемещения.

    В целом, твоей задачей является просто последовать правилу 3/5/0, т.е. правилу пяти чтобы у тебя память ресурса не утекла. Еще для правильного подсчета ссылок тебе надо что-то сделать со своим счетчиком, пока что у тебя значение delete_counter для каждой инстанции a является уникальным, а должно быть уникальным для каждого уникального значения bObj. Да и в целом, счетчик сейчас работает неправильно. Он должен гарантировать удаление уникального bObj только один раз за все совместное владение.

    Пока что, в твоем коде у тебя получается что в один момент времени, точно после отработки оператора копирования по умолчанию, у тебя и *aobj1, и локальный временный a(2), владеют одной памятью. Сразу после этого локальный временный a(2) эту самую память удаляет в своем деструкторе, а *aobj1 начинает ссылаться на мусор.
    К моменту delete aobj1; ты получаешь UB, т.к. деструктор для памяти по указателю aobj1->bObj вызывается уже второй раз.
  • Почему при вызове деструктора не меняется переменная?

    @MarkusD Куратор тега C++
    Василий Дёмин, да, легко, это приводит к UB.
    Просто, подобно автору вопроса, пишем в два разных места один адрес объекта, а потом не задавая вопросов дважды удаляем этот объект из двух этих разных мест.
    Итог: деструктор вызван два раза, второй раз - для неправильного адреса, по которому уже нет объекта.
  • Почему при вызове деструктора не меняется переменная?

    @MarkusD Куратор тега C++
    res2001, можно поправлю? :)
    в этот объект побайтно копируется содержимое временного объекта

    Начиная с C++11 конструкторы и операторы копирования по умолчанию не побайтово копируют память, а используют конструкторы или операторы копирования типов полей.
    Поэтому конструктор и оператор копирования по умолчанию, для возможности быть определенным неявно, требует свойства копируемости от всех полей типа.
  • Почему простой цикл на c++ выполняется медленнее, чем на golang?

    @MarkusD Куратор тега C++
    rPman, как бы long long c = 0; не является кодом C++. Типа по умолчанию в C++ нет.
    Да и в целом, это код C, а не C++. Но собираешь ты его через g++, подтверждая лишний раз нестандартность подхода к стандарту C++ в GCC.
    GCC очень во многих примерах кода сильно отстает от MSCL и clang. Я бы рекомендовал использовать clang для проверок в этом вопросе.

    Так... я все-таки обратил внимание на то, что приведенный в вопросе код ровно такой же. Это значит, вопросы по поводу соблюдения стандарта стоит задавать автору. А я, в итоге, не на того человека сослался со своим комментарием.
  • Какой язык программирования выбрать чтобы стать игровым разработчиком?

    Дима Щербаков , за один год в геймдев? Давай немного приоткрою текущую ситуацию. Я надеюсь, ты живешь где-нибудь за пределами СНГ.
    На текущий момент на территории СНГ закрылись даже такие компании, как Wargaming, Plarium и Sperasoft. О более мелких компаниях можно не говорить, они гроздьями сыпятся с дерева игрового рынка.
    Буквально тысячи разработчиков игр получают вольные и идут искать дальше свою работу мечты. Кто-то уезжает, кто-то идет в другие области разработки П.О. Но рынок соискателей внутри геймдева сейчас перенасыщен дешевеющими высококвалифицированными кадрами.
    И эта ситуация не месяц еще продлится. Через год усердного обучения ты сможешь, как максимум, только напоминать начинающего разработчика. А конкурировать тебе придется с такими людьми, как я.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Adamos
    Мне решение с map-классом представляется более гибким

    На самом деле можно и так. Решения действительно одноранговые.
    У меня есть реализация и такого подхода тоже. В такой мапе я храню как прямо значения, так и ссылки на них или даже произвольные пары указателей на методы чтения и записи значения. Все это добро равнозначно читается и пишется как через строки, так и через выраженный тип хранящегося значения.

    то есть вы, как и rPman, предлагаете сваять генератор

    Конфигурацию чтения такой структуры можно как через генератор выразить, так и на препроцессоре, привязав работу препроцессора к списку полей структуры. Это тоже можно сделать одним только препроцессором.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Adamos, я бы предложил использовать "мост" для записи строки в произвольное поле по его указателю. Я бы составил ассоциативную таблицу таких мостов, сопоставив имя поля в json мосту соответствующего поля в структуре.
    Мосты в таблице можно хранить по интерфейсу, метод которого всегда может принимать строку. Сам мост, конечно, реализовать на шаблоне.
    Схема очень простая и реализуется средствами одного только STL. В результате получится так, что мы отдадим в функцию только экземпляр структуры и исходный json, а функция далее по таблице все сама заполняет.
    Многократно создавал такие конструкции, составляя таблицу разбора на базе кортежа.

    Сейчас я уже специально решил перейти на язык более высокого уровня для объяснения своего решения. В другое время, в другом месте я бы выдал еще один характерный для себя ответ со 100% решением вопроса.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Matvey_Mt, предлагаю сослаться на пункт регламента чтобы не быть голословным. :)
    Например, П5.1 - Любые оскорбительные формулировки запрещены. За тобой уже третье нарушение в одном вопросе.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Matvey_Mt, встречный вопрос - это проверка твоего уровня знаний.
    Как минимум, сейчас ты узнал что указатель на поле класса - это реальность. Теперь ты можешь хотя бы пойти почитать документацию на эту тему и подумать о том, зачем я передал тебе эту информацию.
    На твой вопрос крайне легко ответить. Я этого не делаю просто потому что, фактически, твой вопрос нарушает П2.1 регламента. "Всем привет" и тому подобная лирика - туда же. Это - нарушение П3.4 регламента. А я не хочу спонсировать нарушения регламента.
    Этим я не хочу как-то задеть или оскорбить тебя. Просто я хочу чтобы ты подумал о том, что мог бы решить свой вопрос очень быстро простым чтением документации. А если пришел с вопросом, то соблюдай правила.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Matvey_Mt , как записать тип указателя на поле класса?
  • Какая разница на практике между clang и gcc?

    @MarkusD Куратор тега C++
    calculator212,
    Я не совсем понял этот момент, можете пожалуйста пояснить?

    Поясняю: [1], [2], [3], [4].
    GCC еще позволяет в C++ код вида unsigned i;, что тоже неоднократно отражалось в здешних вопросах. И таких вольностей у GCC много, всего не упомнишь.
    clang тоже умеет транслировать код на C и тоже умеет линковать код на C с кодом на C++. И MSCL это все тоже умеет.
    Проблема GCC именно в том, что он позволяет лишнее из кода C в коде C++. Такое поведение GCC расхолаживает пользователей и приводит к проблемам при смене транслятора.

    Я так понял, что под linux/windows предпочтительнее тоже использовать clang

    Под Windows предпочтительнее использовать MSCL, Студию и MSBuild. Под Linux предпочтительнее использовать, все-таки, GCC, т.к. это его дом родной. Под Mac и прочие - предпочтительно использовать clang.
  • Как обстоят дела с модулями C++20 и Inline оптимизацией?

    @MarkusD Куратор тега C++
    Мирон,
    То есть похоже, что Dolarun прав.

    И в чем же конкретно он прав?

    Вырванное из контекста " inline это translation unit bound semantical flag" может означать все что угодно, даже погоду на Марсе.
    Теперь фразе требуется вернуть контекст и внести конкретику. Результатом этого процесса будет строго однозначное понимание термина.
  • Как обстоят дела с модулями C++20 и Inline оптимизацией?

    @MarkusD Куратор тега C++
    Dolarun, он это делает практически со всеми функциями, для которых может посчитать алгоритмическую пользу от встраивания. Более того, в собранном тобой коде могут присутствовать как выделенные тела твоих не-inline функций, так и результаты их встраивания.
    За этот процесс отвечают настройки встраивания сгенерированного кода в твоем трансляторе.

    Ключевое слово inline[?] определяет спецификатор, которым помечаются сущности со слабым внешним связыванием. Связывание внешнее, поэтому для таких сущностей обязательным является требование ODR. В это же самое время связывание обозначено как слабое, это означает что проверка на соответствие ODR для таких сущностей проходит не в момент чтения определения сущности из объектного файла, а в момент встраивания этой сущности.
    И проверка эта выполняется таким образом, что проходят ее только полные дубликаты первого определения сущности. Если очередное определение такой сущности отличается от самого первого считанного определения, такое определение проваливает ODR и трансляция завершается с ошибкой. Само же связывание всегда производится только с самым первым определением сущности.
    Т.е. к процессу встраивания спецификатор inline имеет далеко опосредованное отношение.

    И вот давай теперь подумаем о том, какую роль модули играют в процессе линковки исходного кода и как модули могут поменять поведение слабого внешнего связывания?
  • Как обстоят дела с модулями C++20 и Inline оптимизацией?

    @MarkusD Куратор тега C++
    Dolarun , а давай разберемся, о какой именно работе ты пишешь, которую за тебя сейчас должен делать транслятор?
  • Как инди разработчику защитить права на игру?

    KotomeNami,
    Если бы всё было так просто - их просто скопировали бы на старте

    Их копировали на старте, выкладывали в альтернативные сторы. И продолжают это делать. И с Clash of Clans такое было, и с Angry Birds такое было, и с Cut the rope такое было. И с майнкрафтом, и со Starbound. Это есть всегда.
    Всегда копируют и всегда распространяют.

    Вопрос не в этом. Вопрос не в том, что копируют. Вопрос не в том, а нарушают ли эти копирователи чьи-то авторские права. Вопрос только в том, а может ли твоя игра удержать игрока достаточно долго чтобы окупиться?

    Издавая игру, ее стоит отпускать. Дальше мир будет творить с ней страшное. Играть не так, понимать не так, ковыряться в ее потрохах или вообще клеймить тебя позором. Голосует игрок за твою игру всегда только одним местом - своим кошельком. Если покупают - то и хорошо.