2

コードがある場合:

int f(int a) { return a; }
double f(double g) { return g; }

int main()
{
    int which = f(1.0f);
}

fのどのオーバーロードが呼び出され、その理由は?

4

2 に答える 2

8

戻り値の型はオーバーロードの目的ではまったく考慮されないため、double バージョンが得られます。

于 2008-12-02T17:44:56.673 に答える
3

このようになっている理由を理解するには、次の呼び出しを検討してください。

int bar = f(g(h(foo)));

過負荷の解決には引数のみが含まれるため、h、g、最後にfを個別に推測できます。戻り値が関係している場合は、それらを同時に推測する必要があります。それぞれに10個のオーバーロードがある場合、最初のケースでは30個の可能なオーバーロードをチェックし、2番目のケースでは1000個の可能な組み合わせをチェックしています。そして、そのようなネストされたコードがまれだと思う場合は、検討してください

std::cout << "int i = " << i << std::endl;
于 2008-12-03T14:14:21.030 に答える