我开始使用C ++中的类,我发现了两个不同的字段声明:
type ClassName::*var;
和
type *ClassName::var;
他们之间有什么区别?
编辑:还有一个问题可以像这样声明方法:
type *ClassName::method_one(...);
type ClassName::*method_two(...);
有什么区别?
答案 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
同样,声明在语义上有所不同。只有第一个函数正确定义了返回指针的成员函数。