在C#中,重载任何运算符的方法(函数)必须为static
和public
。
我看到将它设置为static
是一件好事,每个对象都不需要它自己的版本。
但是在C++中,不必是static
。为什么C#强制执行此操作,而C++不强制执行此操作?
两种设计的优缺点是什么?
最佳答案
为什么C++不强制将运算符重载强制为“静态”?
如果将重载的运算符函数设为静态,则将无法访问this
。人们将需要访问重载函数内部的this
,因为通常该函数会更改this
的状态。
如果不需要访问该函数内部的static
,则可以使该函数重载为this
,这实际上意味着您没有在操纵调用该操作符功能的对象的状态。因此这是可行的,但不是通常或本质上所希望的。
将全局重载的运算符函数设为静态将把运算符函数的范围限制为同一文件。
鉴于以上两种情况,编译器不会将重载的运算符功能强制为静态,因为对其进行强制执行将不会带来任何实际的好处或便利,而如果不对其进行强制执行则会提供更多的便利。
为什么C#将运算符重载强制为“静态”?
This解释得比我好得多。
有什么优点和缺点?
好吧,第一个问题的答案确实说明了何时可以使重载的运算符函数静态化并说明了优点/缺点。