带有指向成员函数的指针的地址运算符
Address operator with pointer to member function
我们知道,要创建一个指向函数的"公共"指针,我们可以执行以下操作:
void fun();
void (*ptr)() = fun;
函数的名称也是函数开始的地址。所以我不需要使用地址运算符,就像这样:
void (*ptr)() = &fun;
现在对于指向成员函数的指针,相反,我必须使用地址运算符。例如,对于带有指向成员函数 ptr 和函数 fun() 的指针的类 A,我必须编写:
void(A::*ptr)() = &A::fun;
为什么会有这种差异?
根据C++标准:
4.3 函数到指针的转换
函数类型
T
的左值可以转换为 prvalue 类型 "指向T
的指针"。结果是指向函数的指针。此转换从不适用于非静态成员函数,因为 引用非静态成员函数的左值不能 获得。
我认为差异是因为A::fun
是类A
的非静态成员。我的意思是,如果你的fun()
是A
的静态成员,那么它就像普通函数一样。试试吧。
这是因为现在该函数是在类内部定义的。 指向成员函数的指针保存函数在类布局中的位置的"相对地址",因此您必须以这种方式访问它。
在静态的情况下,它没有这个指针,它的行为就像一个全局函数,因此,你可以像普通的函数指针一样访问它。
相关文章:
- CUDA:统一内存和指针地址的更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 向指针地址添加 20 个字节偏移量
- 如何理解智能指针的底层指针地址?
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 返回数组中值的指针地址
- C++向指针地址添加 4 个字节
- 指针地址的内存偶尔更改了函数前和后返回
- 如何根据指针地址获取指针内容
- C++ 将指针地址传递给函数
- 直接从指针/地址访问数组的元素
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何保存指针地址,以便另一个指针可以继续处理它
- 间接寻址运算符如何返回带有运算符重载的指针地址
- 使用已删除的指针地址.据我所知,
- 如何保护类外用户可以修改的指针地址?C++
- 多个调用构造函数将更改C 中的成员指针地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- Visual Studio C 2K15-在指针地址上获取错误
- 指针地址和参考混乱