我从c ++入门知道我们可以通过以下方式使用typedef:
typedef int mytype;
typedef int *mytype;
但是,下面的代码也编译了,似乎创建了一个新类型“rt”,我很好奇rt的类型是什么,这种typedef的常见用途是什么?
class A{
public:
int c;
};
typedef int A::* rt;
答案 0 :(得分:4)
它不是"三个元素typedef",它是指向成员变量typedef的指针。您可以找到有关指向成员变量here的指针的更多信息。
在您的确切情况下,它允许您实例化类型" rt"的变量。这将指向int
类的A
类型的精确成员,然后使用它来访问A
个实例上的此成员。
#include <iostream>
class A{
public:
int c;
};
typedef int A::* rt;
int main() {
A instance;
rt member; // This is a pointer to A member.
member = &A::c; // This pointer will point on c member of A class
instance.c = 0;
instance.*member += 2; // As member point on c, this code access to the c member.
std::cout << instance.c << std::endl; // This will now output "2".
}
答案 1 :(得分:2)
它指向成员变量的指针。
您可以使用以下语法对其进行定义:int A::* pointer;
,并将其初始化为$A::c
,并将其读取为instance.*pointer
。
A instance;
int A::* pointer = &A::c;
instance.*pointer = 10;
实际上,它是从类开头的偏移量,允许您保持指向int
的指针,该A
是类{{1}}的成员变量。