这两个字段/方法有什么区别?

时间:2013-04-20 11:08:54

标签: c++ class field

我开始使用C ++中的类,我发现了两个不同的字段声明:

type ClassName::*var;

type *ClassName::var;

他们之间有什么区别?

编辑:还有一个问题可以像这样声明方法:

type *ClassName::method_one(...);
type ClassName::*method_two(...);

有什么区别?

2 个答案:

答案 0 :(得分:1)

他们是不同的。第一个声明了 指向type 类型的成员变量的指针。

第二个是类var的成员ClassName 静态定义。

第三个(即使不完整)是 成员函数的定义,它返回type*

第四个是声明指向成员函数的 指针,该成员返回type*


type

答案 1 :(得分:0)

一个是指向成员的指针,另一个是指向成员。

如果您正在使用静态初始化之类的声明:

class SomeClass {
public:
    static int *member, *othermember;
};

int SomeClass::*member = 0;
int *SomeClass::othermember = 0;

虽然编译得很好,但如果你实际上使用 member,你会收到一个链接器错误(而不是othermember,因为你正在定义一个指针 - -member;不是成员 - 那是指针。

使用您的函数定义:

class SomeOtherClass {
public:
    static int *function();
};

int *SomeOtherClass::function() { return 0; } // This will work
int SomeOtherClass::*function() { return 0; } // This won't work

同样,声明在语义上有所不同。只有第一个函数正确定义了返回指针的成员函数。