为什么我们不能使用&(* a)但可以使用typedef来实现它?

时间:2012-04-28 11:52:17

标签: c++

我是C ++的新手,我想了解以下示例之间的区别。

我们无法创建功能

void someFunc(int &*a){
    int *b=new int; //just for example
    a=b;
}

但使用typedef

typedef int* pint;

void someFunc(pint &a){
    int *b=new int; //just for example
    a=b;
}

一切都很好。

这只是一个编译技巧,还是这种行为更复杂的原因?

2 个答案:

答案 0 :(得分:10)

pint& a相当于int*& a,而不是int&* a。你不能在C ++中有一个指向引用的类型,但你可以有一个引用指针类型。

答案 1 :(得分:2)

这是引用和指针的顺序。在你的第一个例子中,它是

int &*a

哪个是指向不允许的引用的指针。在第二个中它是

int *&a

这是对允许的指针的引用。