对void *指针的常量引用

时间:2011-02-06 03:42:28

标签: c++ pointers static reference const

我想将一个void *变量别名,所以我可以将它与另一个名称一起使用。这意味着我可以将指针(p)设置为某个东西,并且别名变量(pp)也可以设置为相同的地址。

例如:

class foo {
  private:
    static void* p; //I just happen to need this for static variable
    static const void*& pp;
};

//in cpp:
const void*& foo::pp = foo::p;
海湾合作委员会抱怨:

  

错误:初始化无效   “const void *&”类型的引用从   表达式'void *'

2 个答案:

答案 0 :(得分:9)

你想做什么,即设置一个const void *&指向无效*似乎它应该是合法且无害的,但它不是,并且它有正当理由是非法的。请记住,引用只是它引用的内容的别名。

假设我们可以这样做:

const void* & foo::pp = foo::p; //非法,因为我们会看到它导致的内容

现在假设我有这个:

const char *x = "Hello world";

由于foo :: pp是指向const的指针,因此可以将其指向x:

foo::pp = x; //合法,因为我可以将const void *指向const memory

但是p现在也指向x,因为pp是对p的引用。

所以现在我可以这样做:

memset( foo::p, 8, 'X' );

当然我应该修改x是const,这当然应该是非法的。

这就是为什么你不想做的事情。

void * const& foo::pp = p;将被允许

答案 1 :(得分:1)

const void *&被解释为对const void指针的引用,而我认为你想要的是对void指针的const引用。试试这个:

void * const &foo::pp = foo::p;