Подтвердить что ты не робот

Ссылка на функцию-член?

Недавно я узнал, что в С++ существует концепция ссылочной функции:). Таким образом, существуют разные типы указателей на функцию и указатель-член-функция. Возникает вопрос. Существует ли концепция "ссылка-член-функция"?

Я попытался скомпилировать следующий код, но GCC 3.4.6 дает ошибку.

#include <iostream>

using namespace std;

class A {
public:
  virtual void Af() const {
    cout << "A::Af()" << endl;
  }
};

int main() {
  typedef void (A::& MemFnc)() const;
  MemFnc mf = &A::Af;

  A a;
  (a.*mf)();

  return 0;
}
4b9b3361

Ответ 1

Нет такой вещи, которая называется ссылкой на элемент в С++.

Спецификация языка явно указывает в примечании (§8.3.3/3 - 2003), что

Указатель на член не должен указывать на статический член класса (9.4), элемент со ссылочным типом или "cv void". [Примечание: см. Также 5.3 и 5.5. Тип "указатель на член" отличается от типа "указатель", то есть указатель на член объявляется только указателем на синтаксис объявления участника и никогда не является синтаксисом декларатора указателя. В С++ нет типа "ссылка на член".

Ответ 2

Нет ссылки на функцию-член.

Ответ 3

Нет, ссылки на функции-члены не возможны.

В некотором смысле результат разыменования указателя на функцию-член может быть одним, но единственное, что вы можете сделать с этим результатом, - вызвать на нем оператор вызова функции, за 5.5[expr.mptr.oper]/6. Больше ничего не разрешено.