클래스 내부에 연산자 함수를 정의하면 클래스 내부에 연산자 함수를 정의한 다음 해당 함수가 클래스에 속하지 않습니다.C++ 클래스, 친구 연산자와 외부 연산자의 차이점
그러나 그 기능이 클래스 외부에 있고 클래스 내에서 친구로 선언했지만 정의하지 않은 경우에도 동일한 작업이 수행됩니다. 한 클래스의 내부이고
두 동일한 오퍼레이터 정의가이 코드를 있다고 여기는 클래스 ouside 다른 :버전 1
class MyClass
{
// version 1 inside a class
friend MyClass&& operator +(MyClass& a, MyClass& b)
{
return move(MyClass(a.x + b.x, a.y + b.y));
}
int x,y;
public:
MyClass() {}
MyClass(int,int){}
};
int main()
{
MyClass a, b, c;
c = a + b;
cin.ignore();
return 0;
}
버전 2 (a 클래스의 내부) (수업 외)
class MyClass
{
friend MyClass&& operator +(MyClass& a, MyClass& b);
int x,y;
public:
MyClass() {}
MyClass(int,int){}
};
MyClass&& operator +(MyClass& a, MyClass& b)
{
return move(MyClass(a.x + b.x, a.y + b.y));
}
int main()
{
MyClass a, b, c;
c = a + b;
cin.ignore();
return 0;
}
무엇이 다른가요? 그 두 접근법?
rvalue 참조로 이동하고 반환하는 것은 의미가 없습니다. –
는 RValue에 의해 반환되지 않고 값으로 반환됩니다. – codekiddy
의미가 없지만 잘못되었습니다. 참조로 로컬 또는 임시를 리턴하는 것은 정의되지 않은 동작입니다. –