【发布时间】:2019-04-01 11:10:35
【问题描述】:
以此为例:
float operator+(int a, float b)
{
Return b + (float)a;
}
void main()
{
int a = 10;
float b = 2.5f;
float c;
c = a + b; //works as intended
c = b + a; //results in type mismatch error
}
所以我的问题: 有没有办法在不定义第二个函数的情况下双向接受参数?
【问题讨论】:
-
改用 C++ 模板。或将
int a更改为float a。 -
你为什么要大写
Return?不,您需要定义第二个,因为该语言不假设您的运算符。此外,您可能不想为 int 和 float 重载该运算符,这可能会使您的代码难以阅读,因为您不希望在添加两个数字时调用自定义函数。 -
你需要两个运算符,它不能以“双向”方式工作。
-
根据经验,您不应该乱用不属于您的类型。从这个意义上说,您的示例不是一个好的示例,因为解决此特定问题的方法是首先不为
int和float实现您自己的operator+,然后+将按预期工作: P -
在标准 C++ 中不可能重载
operator+(),除非至少有一个操作数是类类型。标准不允许接受两个基本类型参数的operator+()的所有重载(例如float operator+(int a, float b))。如果您的编译器允许这样做,则它是一个非标准扩展。也就是说,获得“双向”运算符的唯一方法是提供两个重载。