1

関数がその戻り値の型によってオーバーロードされていないのはなぜですか。そのようなオーバーロードをサポートする言語はないはずです。許可されている場合に何が起こっていたのか、または戻り値の型によるそのような関数のオーバーロードを許可していない理由を知りたいです。

int func();
bool func();
int main()
{
     int iret = func();
     bool bret = func();
}

この疑問をいつも頭の中に浮かび上がらせます。満足のいく答えを期待しています。

4

1 に答える 1

2

のような関数

double function fn1()
{

int a = 2;
return a;

}

上記の例では、返されるときに a が暗黙的に double に変換されます。

int function fn1()
{

double a = 2;
return a;

}

上記の例では、 a は返されるときに暗黙的に int に変換されます。

この fn の fn 呼び出しはint a = fn1(); orのようになりますdouble a = fn1();

どちらの場合でも、両方の定義により、どちらを呼び出すかが曖昧になる可能性があります。返された値が格納されているintかどうかdoubleは、呼び出される fn を決定する際に違いはありません。関数は最初に解決されてから実行され、次に戻り値が割り当てられます。

両方が戻り値の型を持っていない場合、戻り値の型で呼び出すfn1();か、fn1()intdouble

于 2013-04-01T13:01:23.577 に答える