Я изучаю перегрузку оператора на C++. Исходный суффикс ++ обладает тем свойством, что он имеет более низкий приоритет, чем оператор присваивания. Так, например, int i=0, j=0; i=j++; cout<<i<<j
выведет 01. Но это свойство кажется потерянным, когда я перегружаю постфикс ++.Прерывание/суффикс перегрузки оператора C++
#include<iostream>
using namespace std;
class V
{
public:
int vec[2];
V(int a0, int a1)
{
vec[0]=a0;vec[1]=a1;
}
V operator++(int dummy)
{
for(int i=0; i<2; i++)
{
++vec[i];
}
V v(vec[0],vec[1]);
return v;
}
V operator=(V other)
{
vec[0]=other.vec[0];
vec[1]=other.vec[1];
return *this;
}
void print()
{
cout << "(" << vec[0] << ", " << vec[1] << ")" << endl;
}
};
int main(void)
{
V v1(0,0), v2(1,1);
v1.print();
v1=v2++;
v1.print();
}
выходы (0,0) (2,2) в то время как я ожидал (0,0) (1,1).
Можете ли вы помочь мне понять, почему это так, и любая возможность восстановления первоначальной собственности?
«Исходный суффикс ++ обладает тем свойством, что он имеет более низкий приоритет, чем оператор присваивания». Если вы не являетесь одним из людей, которые говорят, что более низкий приоритет связывается сильнее, чем более высокий приоритет, это неправильно. Приоритет пост-инкремента выше, чем присвоение, но пост-инкремент возвращает значение без приращения. –
спасибо за очищение моего недоразумения, я протестировал проблему, используя int i = 0, j = 0; я = (J ++); соиЬ << I << J; и он выводит 01. Таким образом, речь идет не о приоритете, а о механизме возврата. – focusHard