gpt4 book ai didi

同一运算符的 C++ 多个运算符重载

转载 作者:可可西里 更新时间:2023-11-01 16:27:59 26 4
gpt4 key购买 nike

我知道我可以通过生成代码并查看它是否编译来轻松地自己回答这个问题。但由于找不到类似的问题,我认为这是值得分享的知识。假设我正在为 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*/

我想这样做的原因是我正在构建一个我希望尽可能优化的类。性能是我在这里最关心的问题。因此,在运算符 + 重载函数中强制转换和使用 switch case 不是一种选择。如果您会注意到,我将两个重载都内联了。让我们暂时假设编译器确实内联了我的重载,然后在编译时预先确定了哪些代码将运行,我将调用保存到一个函数(通过内联)+ 一个复杂的 switch case 场景(实际上,会有+ 运算符的 5+ 个重载),但我仍然能够使用基本算术运算符编写易于阅读的代码。那么,我会得到想要的行为吗?

最佳答案

是的。


这些运算符函数只是具有特殊名称的普通函数 operator@ .没有不能重载的限制。事实上,<< iostream 使用的运算符是具有多个重载的运算符。

关于同一运算符的 C++ 多个运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3123699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com