C++ 使用+=&引用;什么时候+&引用;在类函数中是否重载?
如果您这样做会发生什么:C++ 使用+=&引用;什么时候+&引用;在类函数中是否重载?,c++,function,class,overloading,operator-keyword,C++,Function,Class,Overloading,Operator Keyword,如果您这样做会发生什么:x+=y…当x和y属于同一类时。它在这种情况下仍然有效还是必须是x+y?如果要支持+=,则需要重载运算符+=。仅仅重载+和/或=是不够的 但他确实支持这一点。基本上,您提供了一组非常小的操作符的重载,并使用这些操作符填充了漏洞 为了使+=适用于用户定义的类型,必须重载它。这与该类型的运算符+是否已重载无关。没有基于其他算术运算符1自动生成算术运算符 注意,通常的策略是将操作符+作为非成员重载,即操作符+=。比如说, const function operator+(con
x+=y代码>…当x和y属于同一类时。它在这种情况下仍然有效还是必须是x+y代码>?如果要支持+=
,则需要重载运算符+=
。仅仅重载+
和/或=
是不够的
但他确实支持这一点。基本上,您提供了一组非常小的操作符的重载,并使用这些操作符填充了漏洞 为了使+=
适用于用户定义的类型,必须重载它。这与该类型的运算符+
是否已重载无关。没有基于其他算术运算符1自动生成算术运算符
注意,通常的策略是将操作符+
作为非成员重载,即操作符+=
。比如说,
const function operator+(const function *) const;
注意:后一个运算符通常表示为一个或两个线性运算符(例如,请参见SO自己的。但这会抑制返回值优化,从而获得很少的收益。我在这里选择了一个更详细的实现,以避免该陷阱,同时不会导致任何清晰度损失
1解决这个“问题”的尝试是失败的,而坏掉的将不起作用,并以错误告终。如果你想让+=
起作用,你也需要重载这个操作符,仅仅重载+
是不够的。它们是不同的,而且不相关(就编译器而言)
尽管如此,如果您重载其中一个,可能也值得重载另一个以保持一致性
顺便说一句,下面是关于运算符重载的一个很好的解释:
除非您为类重载+=
,否则不会发生任何事情。此外,您的+
运算符可能无法工作,因为它需要RHS上的指针。不幸的是,运算符wiki中的运算符+=
实现是次优的。我可能稍后会更改它。
struct Foo
{
int i;
Foo& operator += (const Foo& rhs)
{
i += rhs.i;
return *this;
}
};
Foo operator+(const Foo& lhs, const Foo& rhs)
{
Foo result = lhs;
result += rhs;
return result;
}