WedX - журнал о программировании и компьютерных науках

Как компилятор различает перегрузку оператора префикса и постфикса (инкремент и декремент) с фиктивным параметром в С++

Мы знаем, что компилятор различает перегрузку префиксных и постфиксных операторов (инкремент и декремент) в С++ с фиктивным параметром.

давайте рассмотрим следующие примеры перегрузки оператора инкремента.

class Chocolate
{
    private: int countChocolate;

    public: Chocolate()
    {
        countChocolate = 0;
    }

    public: Chocolate& operator++()
    {
        ++countChocolate;

        return *this;
    }

    public: Chocolate operator++(int)
    {
        Chocolate temp(countChocolate);

        ++(*this); 

        return temp;
    }

};

int main(int argc, char const *argv[])
{
    Chocolate kitkat;

    ++kitkat; // this will call the prefix

    kitkat++; // this will call the postfix

    return 0;
}

Теперь мой вопрос заключается в том, как компилятор различает их с помощью фиктивного параметра.

как процедура дифференцирования происходит в компиляторе

потому что я не передаю какой-либо параметр ни в одном подходе, то как и почему он различает оба оператора

потому что в моем понимании

++kitkat и kitkat++ будут переведены на

киткат.оператор++();

so,

как это работает в компиляторе

может ли кто-нибудь рассказать мне это подробно

Мне просто интересно.

c++
09.01.2019

  • @melpomene, но все ответы там не объясняют, как происходит процедура, они просто говорят, что нам нужен фиктивный оператор для различения префикса и постфикса, я уже это знаю, мой вопрос в том, как эта процедура дифференциации происходит в компиляторе 09.01.2019
  • Я не понимаю вопроса. Вы спрашиваете, как работает компилятор C++? 09.01.2019
  • да, в этой конкретной проблеме 09.01.2019
  • Какая проблема? Я не понимаю, что именно непонятно. 09.01.2019
  • @melpomene на самом деле я пытаюсь понять, как и почему компилятор различает префикс и постфикс ++, потому что я ни в коем случае не передаю никаких параметров, таких как kitkat++7, потому что он использует фиктивный параметр, поэтому я предполагаю, что у меня есть передать что-то хотя бы по другой причине 09.01.2019
  • То, что ВЫ не передаете значение параметра, не означает, что КОМПИЛЕР этого не делает. Компилятор знает положение ++ относительно имени переменной, поэтому ++kitkat будет вызываться компилятором как kitkat.operator++(), тогда как kitkat++ будет вызываться как kitkat.operator++(0) (или любое другое значение, которое хочет использовать компилятор, фактическое значение не имеет значения). 09.01.2019
  • @RemyLebeau спасибо, чувак, это ответ, который я ищу 09.01.2019
  • И это не в предыдущих вопросах 10.01.2019

Новые материалы

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

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]