2012-04-28 87 views
0

我是C++的新手,我想了解下面的示例之间的区别。为什么我们不能使用&(* a),但可以使用typedef来实现它?

我们不能创造功能

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

注意,'pint&a'是'int *&a',而不是'int&* a'。 – Griwes 2012-04-28 11:55:32

+1

我接受过培训,可以读取“内外”的C声明......以变量名开头,然后向外读。由此,int&* a读取指向int的指针。尝试int *&a? – mjfgates 2012-04-28 11:57:35

+0

@mjfgates,谢谢,现在我明白我的错误在哪里:) – 2012-04-28 11:59:18

回答

10

pint& a相当于int*& a而不是int&* a。您不能在C++中使用指针引用类型,但可以使用引用指针类型。

+0

谢谢,现在我明白了 – 2012-04-28 12:02:28

2

这是参考和指针的顺序。在你的第一个例子是

int &*a 

这是一个指针,这是不允许的参考。在第二个它是

int *&a 

这是一个指针允许的引用。

相关问题