为啥我不能通过返回类型重载函数? [复制]

Posted

技术标签:

【中文标题】为啥我不能通过返回类型重载函数? [复制]【英文标题】:Why can't I overload a function by its return type? [duplicate]为什么我不能通过返回类型重载函数? [复制] 【发布时间】:2013-03-22 13:10:49 【问题描述】:

为什么函数不能不被它的返回类型重载,不应该有支持这种重载的语言。我想知道如果它允许会发生什么,或者为什么它不允许通过其返回类型重载此类函数的原因。

int func();
bool func();
int main()

     int iret = func();
     bool bret = func();

我的脑海中总是会出现这个问题。希望得到满意的答复。

【问题讨论】:

***.com/questions/442026/… 【参考方案1】:

类似的函数

double function fn1()


int a = 2;
return a;


在上面例如a 将在返回时隐式转换为 double。

int function fn1()


double a = 2;
return a;


在上面例如a 将在返回时隐式转换为 int。

对该 fn 的 fn 调用类似于 int a = fn1();double a = fn1();

在任何一种情况下,这两个定义都可能导致关于调用哪个定义的歧义。 返回值存储在 intdouble 中这一事实在确定要调用的 fn 时没有区别。函数先解析后执行,再赋值返回值。

如果两者都没有返回类型,则调用将只是 fn1(); 使其模棱两可,无论是使用返回类型 int 还是 double 调用 fn1()

【讨论】:

以上是关于为啥我不能通过返回类型重载函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c++中重载输出操作符,为啥要返回引用

C++里面,为啥重载前++时不返回引用就不能连用?

c ++错误 - 函数不能重载[重复]

为啥重载的scala函数需要返回类型?

c++中为啥赋值运算符重载返回类型是引用

为啥 TypeScript 中没有重载的构造函数实现?