指向const成员变量的指针

时间:2010-12-28 05:29:15

标签: c++

我想知道指向常量成员变量的指针的语法是什么。

我知道指向非const成员函数的指针和指向const成员函数的指针是明显不同的类型,即以下是两种不同的类型:

typedef void (Foo::*Bar)(void);
typedef void (Foo::*ConstBar)(void) const;

我想知道是否可以说非指向const和const成员变量的指针,即以下两种不同的类型,如果是这样,后者的语法是什么:

typedef int (Foo::*var);
typedef int (Foo::*constVar) const; // Not the correct syntax.

感谢。

2 个答案:

答案 0 :(得分:6)

指向成员的指针类型需要与成员的类型匹配:

typedef       int (Foo::*var);  // pointer to a data member of type 'int'
typedef const int (Foo::*cvar); // pointer to a data member of type 'const int'

成员函数的const限定是其类型的一部分,就像返回类型是其类型的一部分一样。

答案 1 :(得分:4)

只是为了让它变得更有趣:

typedef const int (Foo::*(Foo::*ConstBar)(void) const);

ConstBar是指向const-member函数的指针,该函数不带参数并返回指向int类型的const-member的指针。

如何记住问题语法的一般提示:您只需按照定义类成员的方式编写

void name(void) const; // const function
const int name; // const member

然后将name替换为(Foo::*name),结果为:

void (Foo::*name)(void) const; // pointer to const function
const int (Foo::*name); // pointer to const member