指向成员函数的指针不是可调用对象

Are pointer to member functions not callable object

我正在阅读 C++ Primer 第 5 版,我看到了以下语句:

As a result, unlike ordinary function pointers, a pointer to a member is not a callable object; these pointers do not support the function-call operator.

所以我的问题是:高亮部分是否符合标准?

我目前的理解和直觉是它们在功能上的行为方式相同,因此指向成员函数的指针也应该是可调用对象(顾名思义)。

请注意,我不是在问书上说成员函数指针不支持函数调用运算符是否正确。因为我已经知道那部分陈述是正确的。 我想问的是指向成员函数的指针是否是标准的可调用对象

What i am asking is that whether pointer to member function are callable object according to the standard.

是的,根据标准,指向成员函数的指针是可调用对象。

来自func.def#4

A callable object is an object of a callable type.

并且来自 func.def#3

A callable type is a function object type ([function.objects]) or a pointer to member.

因此,根据标准,引用语句 “指向成员的指针不是可调用对象” 的突出显示部分是不正确的。

As a result, unlike ordinary function pointers, a pointer to member is not a callable object; these pointers do not support the function-call operator.

So my question is, if the above quoted statement(the highlighted part in particular) correct according to the standard?

令我惊讶的是,标准实际上在 [func.def]/3

中说
  1. The following definitions apply to this Clause:
  2. ...
  3. A callable type is a function object type ([function.objects]) or a pointer to member.
  4. A callable object is an object of a callable type.
  5. A call wrapper type is a type that holds a callable object and supports a call operation that forwards to that object.
  6. A call wrapper is an object of a call wrapper type.
  7. A target object is the callable object held by a call wrapper.

所以实际上指向成员函数的指针根据标准的可调用对象......在描述哪些类型可以是定义的函数对象的目标的上下文中在 <functional>.

标准中没有“可调用对象”的替代定义与本书所暗示的更普遍的含义相对应。


总结:

  1. 可调用对象的唯一标准定义是在 <functional>.

    中定义函数对象的有效目标类型时

    指向成员函数的指针是一个有效的目标,只要实例指针被绑定或传递给函数调用,它就是可调用的

  2. 标准不直接支持将可调用对象定义为提供函数调用运算符的习惯定义。

    这个定义可以说更有用,因为它告诉我如何使用该对象。