Разрешено ли указывать параметр в постфиксном операторе ++? - PullRequest
26 голосов
/ 23 мая 2011

Я не использую этот код в любой производственной среде, он только для моего понимания.Является ли этот код действительным (т.е. я могу определить свой постфиксный оператор следующим образом?):

class A
{
public:
    A& operator++(int n)
    {
        std::cout<<"N is:"<<n<<"\n";
        return *this;
    }
};


int main()
{   
    A a;
    a++;
    a.operator ++(10);
}

На VS2008 я получаю вывод:

N равно 0

для первого звонка и

N равно 10

для второго звонка

Ответы [ 3 ]

20 голосов
/ 23 мая 2011

Это поведение является законным и хорошо определено в 13.5.7:

Явный вызов оператора ++, как и в выражениях, подобных a.operator ++ (2), не имеет специальных свойств: аргумент для оператора ++ равен 2.

11 голосов
/ 23 мая 2011

a++ эквивалентно a.operator++(0);. Ваш код действителен

13,5 / 7

Когда постфиксный инкремент вызывается в результате использования оператора ++, int аргумент будет иметь значение ноль.

8 голосов
/ 23 мая 2011

Да, это действительно int как параметр, это всего лишь параметр применения политики, позволяющий различать префиксные и постфиксные операторы.Переданный параметр будет получен в качестве аргумента, который представляет собой поведение, которое вы видите, и это точно определенное поведение.

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