4

プログラム:

#include <iostream>

void foo(void (*bar)()){ bar(); };

void foo(int a = 5)
{
    std::cout << a << std::endl;
}

int main()
{ 
    foo(foo); //Error
}

デモ

foo(5)私は最終的に呼び出されることを期待していました。対照的に、次のプログラムは問題なく動作します。

#include <iostream>

void foo(void (*bar)()){ bar(); };

void foo()
{
    std::cout << 5 << std::endl;
}

int main()
{ 
    foo(foo); //OK
}

デモ

その違いを説明していただけますか?

4

1 に答える 1

2

最初の例では、foo にはデフォルトの引数がありますが、その型は void (bar*)(int) です。デフォルトの引数があると、引数の値を明示的に指定せずに foo を呼び出すことができますが、int 引数はまだあります。単純に、その値は (コンパイル中に) 自動的に入力されます。

于 2015-01-17T07:33:30.410 に答える