Int Аргумент в operator ++

class myClass
{
    public:

    void operator++()
    {
        // ++myInstance.
    }

    void operator++(int)
    {
        // myInstance++.
    }
}

Помимо того, что компилятор отличает myInstance++ и ++myInstance, является необязательным аргументом int в operator++ фактически для чего-либо? Если да, то что это такое?

Ответы

Ответ 1

Как сказал @Konrad, аргумент int не используется ни для чего, кроме distingush между формами pre-increment и post-increment.

Обратите внимание, что ваши операторы должны вернуть значение. Pre-increment должен возвращать ссылку, а post-increment должен возвращать значение. К остроумию:

class myClass
{

public:

myClass& operator++()
{
    // ++myInstance. 
    return * this;   
}
myClass operator++(int)
{
    // myInstance++.
    myClass orig = *this;
    ++(*this);  // do the actual increment
    return orig;
}
};

EDIT:

Как говорит г-н Бушуев, ниже, нет абсолютного требования, чтобы operator++ возвращалось непустым. Однако в большинстве случаев (я не могу думать об исключении) вам нужно. Особенно, если вы хотите присвоить результаты оператора другому значению, например:

myClass a;
myClass x = a++;

EDIT2:

Кроме того, с версией postimcrement вы вернете объект до того, как он будет увеличен. Обычно это делается с использованием локального временного. См. Выше.

Ответ 2

- необязательный аргумент int в operator ++ фактически для чего-либо?

Нет. Единственная цель - провести различие между двумя перегрузками. Довольно неутешительно, я знаю.; -)