为什么我们不能使用&(* a),但可以使用typedef来实现它?
问题描述:
我是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;
}
一切正常。
这只是一个编译器技巧,还是这种行为的原因更复杂?
答
pint& a
相当于int*& a
而不是int&* a
。您不能在C++中使用指针引用类型,但可以使用引用指针类型。
+0
谢谢,现在我明白了 – 2012-04-28 12:02:28
答
这是参考和指针的顺序。在你的第一个例子是
int &*a
这是一个指针,这是不允许的参考。在第二个它是
int *&a
这是一个指针允许的引用。
注意,'pint&a'是'int *&a',而不是'int&* a'。 – Griwes 2012-04-28 11:55:32
我接受过培训,可以读取“内外”的C声明......以变量名开头,然后向外读。由此,int&* a读取指向int的指针。尝试int *&a? – mjfgates 2012-04-28 11:57:35
@mjfgates,谢谢,现在我明白我的错误在哪里:) – 2012-04-28 11:59:18