在C ++中使用typedef中的三个元素意味着什么?

时间:2017-01-14 11:13:03

标签: c++

我从c ++入门知道我们可以通过以下方式使用typedef:

typedef int mytype;
typedef int *mytype;

但是,下面的代码也编译了,似乎创建了一个新类型“rt”,我很好奇rt的类型是什么,这种typedef的常见用途是什么?

class A{
public:
    int c;
};
typedef int A::* rt;

2 个答案:

答案 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}}的成员变量。