“& SomeStruct :: member”在C ++中的含义是什么?“SomeStruct”是一个结构,“成员”是它的成员?

时间:2011-07-17 01:32:59

标签: c++ types

SomeStruct定义为:

struct SomeStruct {
    int member;
};

这意味着什么?

  1. &SomeStruct::member
  2. int SomeStruct::*
  3. 我遇到这个,试图输出它的类型信息,但仍然无法弄清楚其含义。以下是一个工作示例:

    #include <iostream>
    #include <typeinfo>
    using namespace std;
    struct SomeStruct {
        int member;
    };
    
    
    int main(int argc, const char *argv[])
    {
      cout << typeid(&SomeStruct::member).name() << endl;
      cout << typeid(int SomeStruct::*).name() << endl;
      return 0;
    }
    

    在我的MBP上由i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)编译,输出为:

    M10SomeStructi
    M10SomeStructi
    

2 个答案:

答案 0 :(得分:4)

int SomeStruct::*被称为“指向成员的指针”,在本例中是指向SomeStruct成员的指针。这是 NOT 严格地指向成员函数的指针(尽管这是此语法的最常见用法)。

&SomeStruct::member是对member SomeStruct成员的引用。

请参阅this related question

如果您想了解有关该主题的更完整信息,请here's a decent article on the topic

而且,C++ FAQ lite中有关该主题的强制性部分。

答案 1 :(得分:3)

这是指向成员函数/数据成员的指针的语法。

int SomeStruct::*是指针的类型(指向int的{​​{1}}数据成员的指针。

SomeStruct产生一个上述类型的指针。