如何在类内部使用和访问静态指针到成员值s_ptm?
How to use and access static pointer-to-member value s_ptm inside class?
我们可以在类中声明和使用实例级指向成员值/func的指针。 并使用obj.*(obj.ptm)
或ptr->*(ptr->ptm)
模式进行访问。
但是,如果将它们声明为静态类型级s_ptm值/func,如何初始化和访问/使用它们?
class C
{
public:
static int s_i;
static int C::* s_ptm; //declare static ptm value OK here
};
问:如何初始化和访问s_ptm?
coliru.stacked-crooked.com/a/44fa362afb8462ef
指向静态成员的指针只是普通指针。不能将指向静态成员的指针分配给指向成员的指针。好消息是:你不需要它。指向成员的指针使您能够指向成员,然后给定一个实例,您可以通过该指针访问其成员。对于静态成员,不需要这样做,因为所有实例共享同一个静态成员。
要初始化s_ptm
,您首先需要一个int
成员:
struct C {
static int s_i;
static int C::* s_ptm; //declare static ptm value OK here
int c;
};
int C::* C::s_ptm = &C::c; // OK
//int C::* C::s_ptm = &C::s_i; // NOPE !
int* p = &C::s_i; // OK
但是,只有一个int
成员,指向类型int
成员的指针就没有那么有用了。您可以通过名称访问它,而不是通过指针访问C::c
。当存在多个相同类型的成员或在泛型上下文中时,指向成员的指针非常有用。
相关文章:
- 从成员指针到整个结构/类的强制转换
- OOP 中的单成员指针
- 使用结构成员指针在C++中填充结构
- 聚合初始化,将成员指针设置为同一结构成员
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 共享 C++ 的数据成员指针
- 如何声明指向成员内容的成员指针m_pmd/m_pmf并访问它们?
- 从类C++外部调用指向成员方法的成员指针
- 结构成员指针是否自动初始化为零?
- 如何删除类内类类型的类成员指针
- 是否打印指向已定义 int 的成员指针
- 指向常量的成员指针
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 无法删除在destructor中的成员指针的课程
- 删除对象而不调用成员指针的析构函数
- 当派生类的基类具有成员指针时,对其进行深层复制