请考虑这两行代码
void doStuff(int ** i)
void doStuff2( int && i)
在第一个中我假设它是一个指针指针而第二个是一个rvalue, 我遇到了this question,它解释了右值,但我应该何时使用第一个,何时应该使用第二个?
你能告诉我这个吗?答案 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;参考不能)。