按返回类型和参数重载

Viz*_*ouk 2 c++

是有效的

int func();
float func(int x);
Run Code Online (Sandbox Code Playgroud)

我知道只有返回类型没有模板才能重载,但这是否有效?

Fre*_*Foo 6

是的.重载规则是参数需要具有不同的类型和/或数量; 当满足时,各种过载的返回类型可以不同.给定实际参数,编译器可以确定要调用的重载.

只有通过返回类型重载是无效的,因为编译器无法根据返回值做出选择; 假设你有过载int f()float f(),和你做

(void)f();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,没有人知道f你打算打电话给谁.(除非对标准中指定的类型有任意偏好,但没有,并且很难找到合理的类型.)