Подтвердить что ты не робот

Разрешено ли указывать параметр в postfix operator ++?

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

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

для второго вызова

4b9b3361

Ответ 1

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

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

Ответ 2

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

13.5/7

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

Ответ 3

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