C++ 为什么可以';编译器是否为该函数引用找到了正确的重载?

C++ 为什么可以';编译器是否为该函数引用找到了正确的重载?,c++,C++,为什么它不选择正确的重载?我得到了错误: main.cpp:4:7:错误:新声明“int f()” main.cpp:3:6:错误:混淆旧声明“void f()” 不能按返回类型重载;仅通过参数。不能通过返回类型重载,因为: int main() { f(); // call to void f f(); // call to int returning one f(); // call to void return 0; } 都是模棱两可的 float f()

为什么它不选择正确的重载?我得到了错误:

main.cpp:4:7:错误:新声明“int f()”

main.cpp:3:6:错误:混淆旧声明“void f()”


不能按返回类型重载;仅通过参数。

不能通过返回类型重载,因为:

int main() {
   f();  // call to void f
   f();  // call to int returning one
   f();  // call to void
   return 0;
}
都是模棱两可的

float f() { return 0.0f; }
char  f() { return 'a';  }
int   i = f();

也不明确。

< P>根据C++标准,132.1

float f() { return 0.0f; }
char  f() { return 'a';  }
int   i = f();
如果两个同名函数声明在同一范围内且具有等效的参数声明,则它们引用同一个函数

这意味着只考虑名称和参数类型;返回类型不正确


这是有意义的,因为您可以使用返回值调用函数,而忽略其返回值。如果语言设计人员允许对返回类型重载,编译器将无法在某些合法上下文中解析这些重载。

您无法对返回类型重载。“这是法律”