簡體   English   中英

為什么成員函數需要'&'(例如在std :: bind中)?

[英]Why does a member function needs '&' (e.g. in std::bind)?

當我從C ++ 11- standard開始使用std::bind ,我發現編譯器允許以下內容:

class Foo
{
public:
  void F();
  int G(int, int);
};

void Foo::F()
{
  auto f = bind(&Foo::G, this, _1, _2);
  cout << f(1,2) << endl;
}

int Foo::G(int a, int b)
{
  cout << a << ',' << b << endl;
  return 666;
}

但是如果我在bind消除了Foo::G前面的'&',我會得到一些編譯器錯誤(使用MinGW 4.7)。

為什么Foo::G無效作為指向成員函數的指針,盡管H&H都適用於“通常”函數?

LG ntor

&需要獲取成員函數的地址,一些編譯器將允許您省略相同但非標准並且有時令人困惑。

你可以在這里閱讀有關成員函數指針的內容: http//www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

我認為其中一個原因可能是一致性。 回想一下,在課堂上,你可以說

MyClassOrOneOfItsBases::memberFunction();

它編譯得很好,因為限定名稱命名成員函數,而不是形成指向成員的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM