为什么我们看不到类似C语言的允许在返回类型中具有多态的callable?我可以看到额外的类型推断将是一个障碍,但是我们有
plenty of languages具有完整的类型推理系统(适用于不同级别的“工作”).
编辑:通过返回类型多态性我的意思是仅在返回类型中重载函数签名.例如,C和Java只允许在形式参数的类型中重载,而不是返回类型.
解决方法
如果通过“返回类型多态”,您的意思是基于返回值类型重载,我不知道其他语言,但对于C这里的答案(几乎来自马的嘴):
函数返回类型不会在重载分辨率中起作用,因为Stroustrup(我假设来自其他C架构师的输入)要求重载分辨率为“上下文独立”.请参见“C编程语言第三版”中的7.4.1 – “重载和返回类型”.
The reason is to keep resolution for
an individual operator or function
call context-independent.
他们希望它仅仅基于如何调用重载,而不是如何使用结果(如果使用的话).实际上,在不使用结果的情况下调用许多函数,或者将结果用作较大表达式的一部分.我确定的一个因素是,当他们决定这一点时,如果返回类型是分辨率的一部分,那么将会有很多调用重载的函数需要用复杂的规则来解决,或者必须让编译器抛出调用不明确的错误.
而且,主知道,C重载分辨率足够复杂,因为它是…