如何在 class 中使用和访问指向成员值 s_ptm 的静态指针?
How to use and access static pointer-to-member value s_ptm inside class?
我们可以在class中声明和使用实例级指向成员的指针 value/func。
并使用 obj.*(obj.ptm)
或 ptr->*(ptr->ptm)
模式访问。
但是如果将它们声明为静态类型级别s_ptmvalue/func,如何初始化和access/use它们?
class C
{
public:
static int s_i;
static int C::* s_ptm; //declare static ptm value OK here
};
问:如何初始化和访问s_ptm?
指向静态成员的指针只是普通指针。您不能将指向静态成员的指针分配给指向成员的指针。好消息是:你不需要它。指向成员的指针使您能够指向一个成员,然后给定一个实例,您可以通过该指针访问其成员。对于静态成员,这是不需要的,因为所有实例共享同一个静态成员。
要初始化 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
。当同一类型的多个成员或在通用上下文中时,指向成员的指针很有用。
我们可以在class中声明和使用实例级指向成员的指针 value/func。
并使用 obj.*(obj.ptm)
或 ptr->*(ptr->ptm)
模式访问。
但是如果将它们声明为静态类型级别s_ptmvalue/func,如何初始化和access/use它们?
class C
{
public:
static int s_i;
static int C::* s_ptm; //declare static ptm value OK here
};
问:如何初始化和访问s_ptm?
指向静态成员的指针只是普通指针。您不能将指向静态成员的指针分配给指向成员的指针。好消息是:你不需要它。指向成员的指针使您能够指向一个成员,然后给定一个实例,您可以通过该指针访问其成员。对于静态成员,这是不需要的,因为所有实例共享同一个静态成员。
要初始化 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
。当同一类型的多个成员或在通用上下文中时,指向成员的指针很有用。