c++ - 这两个领域/方法有什么区别?

标签 c++ class field

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

type ClassName::*var;

type *ClassName::var;

它们有什么区别?

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

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

有什么区别?

最佳答案

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

第二个是 ClassName 类的成员 var静态定义,类型为 type*

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

第四个是声明一个指向返回type的成员函数的指针。


class A {
public :
   int i;
   static int *j;
   int* f();
   int g() { std::cout << "g" << std::endl; }
};

int* A::j;                // First one
int* A::f() { }           // Third one

int main() {
    A a;

    int A::*i_ptr;        // Second one
    i_ptr = &A::i;    
    a.*i_ptr = 2;         // Modifying a.i

    int (A::*mem_fn) ();  // Fourth one
    mem_fn = &A::g;
    (a.*mem_fn)();        // calling a.g()
}

关于c++ - 这两个领域/方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16119625/

相关文章:

c++ - 任何方法都可以使子字符串的解析和匹配比默认解析和匹配更快

java - 有没有更简单的方法来定义对象中的对象?

c++ - 类(class)传承与友元项目

MySQL数据库-优化相同的多个字段

c++ - 这个模数我做错了什么?

c++ - 重新声明静态 constexpr 数据成员?

c++ - GetProcessAffinityMask 返回空进程关联

javascript - 如何为同一个类定义的元素添加不同的样式?

jquery - 屏蔽输入插件删除了默认值

regex - Grok - 解析可选字段