我知道我可以通过生成代码轻松地回答这个问题并查看它是否编译.但由于我找不到类似的问题,我认为这是值得分享的知识.假设我正在为MyClass重载+运算符.我可以多次超载吗?不同类型的不同过载.像这样:
class MyClass{
...
inline const MyClass operator+(const MyClass &addend) const {
cout<<"Adding MyClass+MyClass"<<endl;
...//Code for adding MyClass with MyClass
}
inline const MyClass operator+(const int &addend) const {
cout<<"Adding MyClass+int"<<endl;
...//Code for adding MyClass with int
}
...
};
int main(){
MyClass c1;
MyClass c2;
MyClass c3 = c1 + c2;
MyClass c4 = c1 + 5;
}
/*Output should be:
Adding MyClass+MyClass
Adding MyClass+in*/
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是我正在构建一个我希望尽可能优化的类.性能是我最关心的问题.因此,在操作员+重载功能内部铸造和使用开关盒不是一种选择.我注意到,我把内插的重载都做了.让我们假设编译器确实内联我的重载,然后在编译时预先确定哪个代码将运行,并且我将调用保存到一个函数(通过内联)+一个复杂的开关案例场景(实际上,将会有+运算符的5+重载,但我仍然能够使用基本算术运算符轻松编写读取代码.那么,我会得到理想的行为吗?