我想将一个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 *'
答案 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;