关于指向非静态类成员的指针的说明
Clarification on pointer to non-static class member
当我需要一个指向类成员的指针时,我做如下操作
struct MyStruct
{
int foo();
};
int (MyStruct::*p)() = &MyStruct::foo;
我的问题是为什么我需要使用&操作符获取地址,如果它是静态函数,则可以忽略该地址。另外,我听说指向成员的指针不是真正的指针,有人能澄清一下吗?
如果它是静态函数,它就像普通的非成员函数指针一样工作:函数名本身可以隐式地转换为函数指针。
如果它是一个非静态成员函数,它就不再是非成员函数了:
- 隐藏
this
参数; - 在多重继承场景中,将指针转换为其中一个基类可能会产生指向不同地址的指针。这意味着,如果成员函数是继承的,
this
指针可能需要在调用之前进行调整。这已经使得使用指针来存储指向成员函数的指针变得不可能。
Raymond Chen写了一篇有趣的文章,有更多的细节和例子。
为什么我需要使用&接线员要取其中可能的地址如果是静态函数则忽略
你是对的,在指针指向成员函数语法的情况下,理想情况下可以省略&
。我认为,&
语法是有可能是由于历史惯例。
我听说指向成员的指针并不是真正的指针,有人知道吗澄清了吗?
这是不对的。唯一的区别是它们是指向成员函数的指针。由于class
非静态成员包含一个隐式 this
指针作为实参,因此它们具有特殊的签名。此外,它们不能与具有相同签名的普通函数指针相互转换。
在代码示例中,理论上p
指向:
int MyStruct::foo (MyStruct* const);
相关文章:
- 当使用通配符和null指针调用函数时,对输出的说明
- 关于C++中具有多重继承"this"指针的说明
- 指针数组说明
- 有关通过引用传递指针的说明
- 说明通过指针访问非静态类成员函数
- 了解 ARM 程序集说明和 C/C++ 指针
- 该指针操纵功能的说明
- 请求对数组中指针行为的说明
- 模板化函数指针说明
- C /参考操作员和指针中的插座连接()函数说明
- 函数指针说明
- C++指针分配说明
- C++03 12.4/12对通过指针显式调用基类析构函数有何说明
- 函数指针的说明
- 有关 c++ 中指针的说明
- 指针分配说明
- 关于指向非静态类成员的指针的说明
- 对指向函数转换的指针的说明
- 无法'this'指针从'const Line'转换为'Line &'说明?
- 关于智能指针运算符*和运算符>重载的说明