1

もう一度、ポインター ロジックに引っかかりました。次のコードでは、関数 typedef tOutFunction を使用しています。この関数ポインタと set メソッドにグローバル変数を定義します。

なぜ

SetOutFunction(OutFunction);

SetOutFunction(&OutFunction);

両方とも動作しますか?この場所で自動変換はどのように機能しますか。それとも、そのうちの1つが間違っていて、偶然に機能しますか?

#include <iostream>

typedef int (*tOutFunction)(const char*);

int OutFunction(const char* out)
{
  std::cout << "OutFunction:" << out << "\n";
  return 10;
}

tOutFunction out__ = 0;

void SetOutFunction(tOutFunction outFunc)
{
  out__ = outFunc;
}

int main()
{
  SetOutFunction(OutFunction);
  std::cout << out__("Without Ref") << "\n";

  SetOutFunction(&OutFunction);
  std::cout << out__("With Ref") << "\n";

  return 0;
}

ここでも試してみました: http://codepad.org/yfxj2QAo

4

0 に答える 0