请验证我对指向成员的指针的理解是否正确。这是一个示例类:
class T
{
public:
int *p;
int arr[10];
};
对于“标准”指针,以下选项很常见:
int a = 1;
int *p1 = &a;
int *p2 = p1 (other notation: int *p2 = &*p1);
//The pointer p2 points to the same memory location as p1.
上述对成员指针的操作是不可能的:
int T::*pM = &(*T::p); // error
指向成员的指针包含内存中的偏移量,即从类的开始开始特定成员放置多远的信息,因此在这个阶段我们不知道类内的指针指向的位置。类似地,指向作为数组元素的成员的指针是不可能的,因为数组元素的地址是未知的:
int T::*pM = &T::arr[5]; //error
但以下操作是正确的:
int* T::*pM = &T::p; //a pointer to a pointer
//the same operation for "standard" pointers:
int **p3 = &p2;
int (T::*pM)[10] = &T::arr; //a pointer to an array