为什么我应该在以下代码中的类型名称(*&
)之后使用T*&
?不是a
指向指针的指针吗?如果是,那么为什么我不应该使用**
?
template <class T> void CreateArray(T*& a, int n)
{
a = new double[n];
}
int main()
{
double* a;
CreateArray<double>(a,3);
return 0;
}
答案 0 :(得分:5)
不是指向指针的指针吗?
不,它是对指针的引用。
那我为什么不用**呢?
你可以这样做,但它使得在调用方和函数内的使用更复杂一些。但是,你可以用任何一种方式编写一个具有相同整体效果的函数。
答案 1 :(得分:2)
T*&
是对指针的引用,现在虽然幕后引用可以实现为指针,但它与T**
不同。你绝对可以使用T **
来完成同样的事情,但它不会是惯用的C ++而且它不会那么简单,使用引用可以让你不用担心如何通过引用传递。