一些零散的C++语法思考

来源:互联网 发布:蔡英文 知乎 编辑:程序博客网 时间:2024/04/28 04:47


1.关于声明形式为CLASS::*MEMBER的用法。

看下面例子:

#include<iostream>

using namespace std;
class A{
public:
        A(int c):b(c){}
        int b;
};
void fun(A a,int A::*b){
        cout<<a.*b<<endl;
}
int main(){
        A a(2);
        fun(a,&A::b);

        return 0;

}

运行结果是2。


假如在程序中有一个声明形式为A::*b的语句,该怎么理解:

应该是理解成A中成员b的一个指针。A中有一个int b成员,但是该成员并不是指针类型的,为了特指A中b的一个指针类型,所以应该用int A::*b的声明形式,这样子声明之后,在给该声明传值时,应该写成&A::b,并且为了能够引用该值,还应该传一个参数A a,如上面程序所示。

为什么在声明时不直接写成int *A::b,很显然,这样子表示A中有一个int*类型的b,显然是错误的,所以,为了表示类中某个成员的指针,一般声明成CLASS::*MEMBER的形式。

0 0