当前位置: 首页 > 知识库问答 >
问题:

std::非静态成员函数的add\u指针实现

林华皓
2023-03-14

这个问题是关于实施d::add问题的后续_pointer

在std::add\u指针下

有以下参考:

否则(如果T是cv或ref限定函数类型),则提供成员类型DEF type,即类型T。

基于阅读非静态成员函数:const-、vole-和ref限定的成员函数,我的理解是a对于具有给定cv和/或ref限定的非静态成员函数,

a)函数的cv限定也适用于this指针,在函数的范围内

b) 函数的限定不适用于函数范围内的指针

有鉴于此,对于具有cv或ref限定的非静态成员函数,为什么添加指针不能提供成员类型定义

共有2个答案

羊新翰
2023-03-14

无法形成非静态成员函数类型。这样的事情是不存在的。

struct T {
   int func() const;
};

func没有类型。你永远不能将其单独用作表达式。

using mf = int (T::*)() const; 
mf myfunc = &T::func;

mf是指向成员函数类型的指针。它不是函数类型;指向非静态成员(包括成员函数)的指针是数据,而不是函数。

成员函数的cv或ref限定不确定函数类型(不存在),而是确定隐式“this”参数的类型。

您引用的段落仅适用于非成员函数或静态成员函数。

穆丁雨
2023-03-14

根据【dcl.ptr】/4:

[

您想象的cv限定函数类型的指针实际上不存在。因此,std::add\u指针无法生成这样的类型:)

 类似资料:
  • FAQs in section [33]: [33.1] “成员函数指针”类型不同于“函数指针”吗? [33.2] 如何将一个成员函数指针传递到信号处理函数,X事件回调函数,系统调用来启动一个线程/任务等? [33.3] 为什么我总是收到编译错误(类型不匹配)当我尝试用一个成员函数作为中断服务例程? when I try to use a member function as an interru

  • 在类中,static 除了可以声明 静态成员变量,还可以声明静态成员函数。普通成员函数可以访问所有成员(包括成员变量和成员函数),静态成员函数只能访问静态成员。 编译器在编译一个普通成员函数时,会隐式地增加一个形参 this,并把当前对象的地址赋值给 this,所以普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。而静态成员函数可以通过类来直接调用,编译器不会为它增加形参 th

  • 这是我上一篇文章的后续文章 参考非静态成员函数 在下面 const-、vole-和ref限定的成员函数 非静态成员函数可以在没有ref限定符的情况下声明,...在重载解析期间,X类的非静态cv限定成员函数被处理如下: 无ref限定符:隐式对象参数具有对cv限定X的类型左值引用,并且还允许绑定右值隐式对象参数 为了进一步探索这一点,我试用了上面链接中提供的源代码,如下所示: 我已经在每个基于引用限定

  • 本文向大家介绍C ++中的静态成员函数,包括了C ++中的静态成员函数的使用技巧和注意事项,需要的朋友参考一下 在上一篇文章中,我们讨论了C ++中的静态数据成员,并讨论了可以通过成员函数访问静态数据成员,但是该函数应该是静态成员函数 静态成员函数是一种特殊的成员函数,仅用于访问静态数据成员,其他任何常规数据成员均无法通过静态成员函数访问。就像静态数据成员一样,静态成员函数也是类函数。它不与任何类

  • 本文向大家介绍C++中静态成员函数与静态成员变量(static ),包括了C++中静态成员函数与静态成员变量(static )的使用技巧和注意事项,需要的朋友参考一下 C++中静态成员函数与静态成员变量(static ) 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习C语言的stati

  • > < li> 有什么不同吗? “保存/转移”功能的最佳方式是什么?