对void*指针的常量引用

Pub*_*bby 1 c++ static pointers const reference

我想别名一个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;
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会抱怨:

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

Cas*_*Cow 9

你想要做的是,即设置一个const void*并指向void*看起来它应该是合法且无害的,但它不是,并且它有正当理由是非法的.请记住,引用只是它引用的内容的别名.

说我们可以这样做:

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

现在假设我有这个:

const char *x = "Hello world";

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

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

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

所以现在我可以这样做:

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

这当然应该是非法的,因为我试图修改x是const.

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

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