【问题标题】:C++ typedef with strange scope resolution operator具有奇怪范围解析运算符的 C++ typedef
【发布时间】:2015-11-15 17:49:09
【问题描述】:

我不得不移植一些 C++ 代码,发现这个奇怪的 typedef:

typedef uint32_t SomeClassName::* ptr;

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

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

【问题讨论】:

  • 这可能是指向成员的指针吗?我对语法不是很熟悉,很混乱

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


【解决方案1】:

这是一个指向成员的指针。具体来说,ptr 类型的变量可以指向SomeClassName 的任何uint32_t 数据成员。可以这样使用:

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

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 2017-09-14
    • 2018-04-19
    • 2012-04-20
    • 2015-04-02
    • 2011-07-28
    • 2015-12-18
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多