我应该使用C ++ rvalue和指针指针吗?

时间:2015-08-07 15:25:00

标签: c++ pointers reference

请考虑这两行代码

void doStuff(int ** i)
void doStuff2( int && i) 

在第一个中我假设它是一个指针指针而第二个是一个rvalue, 我遇到了this question,它解释了右值,但我应该何时使用第一个,何时应该使用第二个?

你能告诉我这个吗?

1 个答案:

答案 0 :(得分:2)

int ** i 是指向指针的指针。

通常,请谨慎使用,因为这可能有不同的含义,你有更好的方法在C ++中表达它。

它可能是指向包含指向单个int的指针的单个变量的指针:

int value = 0;
int * pValue = &value;
int ** ppValue = &pValue;

但是,每个也可能是指向数组第一个元素的指针:

int valuesA[1000], valuesB[100], valuesC[10];
int * pValues[] = { valuesA, valuesB, valuesC };
   // these are actually pointers to the first element of the array
int ** ppValues = pValues;

仅使用 以及如何访问元素的清晰文档,如何知道元素大小,以及谁负责释放(如果有),指针有效期等等。

通常情况下,如果你有这样一个数组/矩阵,你当然应该把它包装在一个安全的使用界面后面,或者全部替换它,例如使用vector<vector<int>>

即使对于单int用例,通常也有更好的选择。例如。一个允许修改指针的函数签名,对指针的引用会更合适:

bool SelectValue(int *& p) { ... }

int&amp;&amp; 是右值参考

int **不同,这是双重间接。

它大致是一个也可以绑定到临时值的引用。 (&#34;正常&#34;参考不能)。

A Brief Introduction to Rvalue References