Int Аргумент в операторе ++ - PullRequest
       19

Int Аргумент в операторе ++

16 голосов
/ 11 января 2011
class myClass
{
    public:

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

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

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

Ответы [ 2 ]

18 голосов
/ 11 января 2011

Как сказал @Konrad, аргумент int не используется ни для чего, кроме как для расхождения между формами до увеличения и после увеличения.

Обратите внимание, однако, что ваши операторы должны возвращать значение.Преинкремент должен возвращать ссылку, а постинкремент должен возвращать побочное значение.То есть:

class myClass
{

public:

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

РЕДАКТИРОВАТЬ:

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

myClass a;
myClass x = a++;

EDIT2:

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

12 голосов
/ 11 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...