具有奇怪范围分辨率运算符的C ++ typedef

时间:2015-11-15 17:49:09

标签: c++ visual-c++ scope standards typedef

我必须移植一些C ++代码并找到这个奇怪的typedef:

typedef uint32_t SomeClassName::* ptr;

目标编译器是MSVC ++。据我了解,这只是为名为uint32_t*的{​​{1}}创建了一个别名。 ptr的部分没有任何用处,应该被兼容的C ++编译器视为错误。我是对还是错?

另外,在SO上发现了Unusual scope resolution operator问题,可能会回答这个问题,但我不确定。

1 个答案:

答案 0 :(得分:2)

这是指向成员的指针。具体而言,ptr类型的变量可以指向uint32_t的任何SomeClassName数据成员。它可以像这样使用:

struct Foo {
    int a;
    int b;
    float c;
};

Foo foo;
int Foo::* ptr;

ptr = &Foo::a;
foo.*ptr = 10; //Set foo.a to 10

ptr = &Foo::b;
foo.*ptr = 15; //Set foo.b to 15

//ptr = &Foo::c; //Won't compile