为什么静态const引用类成员变量?

时间:2013-09-05 12:32:33

标签: c++ pointers reference

我对C ++中类成员的静态引用有疑问。很容易创建一个静态const成员,它是同一个类的非静态成员上的指针;像这样:

class A {
public:
    int x;
private:
    static int A::* const ptr_on_x;
};

int A::* const ptr_on_x = &A::x;

现在,我无法弄清楚为什么我不能写那样的东西,即创建一个静态const成员,它是同一类的非静态成员的引用:

//won't compile
class B {
public:
    int x;
private:
    static int B::& const ptr_on_x;
};

int B::& const ptr_on_x = B::x;

从SO中关于指针和引用之间差异的各种帖子中,我找不到任何线索。相反,我甚至读过“引用是一种别名”。那我该怎么做?

那么可以在同一个类中定义一些变量别名吗?我承认,通过一个简单的类,它似乎没有用;这是一个关于语言本身的问题。

另外,我不太了解C ++ 0x,C ++ 0x也为此提供了解决方案吗?

修改 MarcinŁoś的评论给了我另一个想法。你可以使用函数引用,那么我可以创建一个类成员,它是类方法的引用吗?

2 个答案:

答案 0 :(得分:3)

仅仅因为没有像成员引用这样的类型,只有指向成员的指针。

  

从SO中关于指针和引用之间差异的各种帖子中,我找不到任何线索。

指向成员的指针与指针(与其略有误导性的)名称有关,与指针一样,它指的是其他东西。从来没有人认为是一个令人信服的理由来添加一个看起来更像是参考的类似类型。

  

那么可以在同一个类中定义一些变量别名吗?

不,没有明智的方法可以做到这一点。

  

另外,我不太了解C ++ 0x,C ++ 0x也为此提供了解决方案吗?

没有

答案 1 :(得分:1)

我认为主要的困惑是指针只是一个偏移指针(它知道成员相对于结构的位置),而不是绝对指针,而引用总是绝对的,因此你不能这样做