我正在阅读C++Primer第5版,在那里我遇到了以下语句:
因此,与普通函数指针不同,指向成员的指针不是可调用对象;这些指针不支持函数调用运算符。
所以我的问题是:突出显示的部分根据标准正确吗?
我目前的理解和直觉是,在功能上,它们的行为方式相同,因此指向成员函数的指针也应该是一个可调用对象(正如其名称所示(。
请注意,我并不是在问这本书中成员函数指针不支持函数调用运算符的说法是否正确。因为我已经知道声明的这一部分是正确的。我要问的是,根据标准,指向成员函数的指针是否是可调用对象
我要问的是,根据标准,指向成员函数的指针是否是可调用对象。
是的,根据标准,指向成员函数的指针是可调用的对象。
来自函数定义#4:
可调用对象是一种可调用类型的对象。
来自函数定义#3:
可调用类型是函数对象类型([function.objects](或指向成员的指针。
因此,引用语句中突出显示的部分表示";指向成员的指针不是可调用对象"是不正确的。
所以我的问题是,上面引用的语句(特别是突出显示的部分(是否根据标准正确?
令我惊讶的是,标准实际上在[func.def]/3 中说
- 以下定义适用于本条款:
- 可调用类型是函数对象类型([function.objects](或指向成员的指针
- 可调用对象是一种可调用类型的对象
- 调用包装器类型是一种保存可调用对象并支持转发到该对象的调用操作的类型
- 调用包装器是一个调用包装器类型的对象
- 目标对象是由调用包装器持有的可调用对象
因此,事实上,指向成员函数的指针是根据标准的可调用对象。。。在描述哪些类型可以是CCD_ 1中定义的函数对象的目标的上下文中。
对于";可调用对象";与本书所暗示的更普遍的意义相对应的标准。
摘要:
可调用对象的唯一标准定义是定义
<functional>
中函数对象的有效目标类型。指向成员函数的指针是一个有效的目标,只要实例指针被绑定或传递给函数调用,它就可以调用
标准不直接支持将可调用对象定义为提供函数调用运算符的对象。
这个定义可以说更有用,因为它告诉我如何使用对象。