我想知道指向常量成员变量的指针的语法是什么。
我知道指向非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.
感谢。
答案 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