我知道我们调用一个重载函数,编译器试图匹配确切的原型,然后进行类型提升。但当我们返回类型时,编译器并没有进行精确匹配并抛出错误。我不知道背后的逻辑。亲爱的朋友们,你能在这里帮我吗?提前感谢所有
C++重载的规则已经非常复杂了。试图考虑返回值的使用方式会使它们变得更加复杂。如果你试图写一些连贯的规则来涵盖这一点,你可以看到它们是如何变得复杂的。
当然,int n = foo();
非常简单。但是bar(foo())
是相当复杂的。或者考虑bar() + foo()
,其中调用哪个bar
决定了调用什么operator+
,从而可以支持foo
的哪些返回类型。
该标准必须精确地指定编译器需要如何以及何时预测适当的返回类型。否则,代码可能会在一个编译器上编译,而不会在另一个编译器中编译,从而设置痛苦的陷阱。