当我们在一个类中定义一个操作符函数时,我们也在类中定义它,那么该函数不是类的一部分。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(外一类)
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返回更快然后返回值? – codekiddy
不是毫无意义,而是错误的。通过引用返回本地或临时是未定义的行为。 –