参考会员功能?

MKo*_*MKo 17 c++ function-pointers

我最近发现在C++中有一个引用功能概念:).因此,存在指向函数的指针和指向成员函数的不同类型.问题出现了.是否有"参考成员功能"概念?

我尝试编译以下代码,但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;
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 21

在C++中没有这样的称为成员的引用.

语言规范在一份说明(§8.3.3/ 3 - 2003)中明确指出,

指向成员的指针不应指向类(9.4)的静态成员,具有引用类型的成员或"cv void".[注意:另请参见5.3和5.5."指向成员的指针"类型与"指针"类型不同,也就是说,指向成员的指针仅由指向成员声明符语法的指针声明,而不是由指针声明符语法声明.C++中没有"reference-to-member"类型.

  • 我的观点是当你说"语言规范明确说"时,它有点不诚实,因为规范没有明确说"没有"引用成员"类型",它只是省略提供一个. (6认同)
  • @SteveJessop:我并没有反对有用的引用(如果不是确定的话),只是"语言规范明确说"的前缀,没有任何限制,我觉得有误导性.信息性说明不是语言规范本身的一部分,只是对解释的帮助. (3认同)
  • 从技术上讲,你在**大胆**中突出显示的是非规范性的,因为它只是一个注释. (2认同)
  • @Charles:但是笔记被描述为"信息性".因此,他们必须是真实的,否则他们将不会提供信息,他们将是错误的信息;-)只有在那里有精细的分发或不一致的语言使用,你需要使用笔记是主要段落的附属的事实标准.他们仍然是标准的一部分,所以他们所说的标准说.它只是说它具有信息性,而不是规范性.标准明确*表示*this,但我认为它没有明确地定义*它,只是隐式定义它. (2认同)