C++에서 연산자 오버로딩을 배우고 있습니다. 원래 접미어 ++는 대입 연산자보다 우선 순위가 낮다는 속성을가집니다. 예를 들어 int i=0, j=0; i=j++; cout<<i<<j
은 01을 출력합니다. 그러나이 속성은 postfix ++에 과부하가 걸렸을 때 손실 된 것으로 보입니다.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) (1,1)이 예상되는 동안 (0,0) (2,2)을 출력합니다.
이유가 이와 같은 이유와 원래 속성 복원 가능성을 이해하는 데 도움이 될 수 있습니까?
"원래 접미어 ++에는 대입 연산자보다 우선 순위가 낮다는 속성이 있습니다." 낮은 우선 순위가 더 높은 우선 순위보다 강력하게 바인딩된다고 말하는 사람들이 아니라면 틀린 말입니다. 사후 증가의 우선 순위는 할당의 우선 순위보다 높지만 사후 증가는 증가하지 않은 값을 반환합니다. –
오해를 해결해 주셔서 감사합니다. int i = 0, j = 0; i = (j ++); cout << i << j; 01을 출력합니다. 우선 순위가 아니라 반환 메커니즘입니다. – focusHard