关于C++的指针引用

今天和牛人同事cml讨论指针引用(其实是他告诉我的),像下面代码:


void p = NULL;
int
pi = NULL;
pi = (int )p;

这个我想大家都知道,再来:

void p = NULL;
int pi = NULL;
(void
&)pi = p;

哈哈,其实和上面是一样的,为什么呢?我开始也没反应过来,后来cml说(void )pi后是一个临时变量,所以要再引用一下才能改变实际的值。就像swap(int &i, int &j)这样,但上面的例子还是建议写成右值版本而不是左值版本。

这样的话,之前所说的一个myfree3版本可以这么写,当然要C++哦,因为C里是没有引用这个概念的:

myfree3(int
&p)
{
free(p);
}

也是行得通的,得益于引用这个东东。

0%