c++右值和指针的指针何时应该使用它

C++ rvalue and pointer of pointer when should I use it?

本文关键字:指针 何时应 c++      更新时间:2023-10-16

请考虑以下两行代码

void doStuff(int ** i)
void doStuff2( int && i) 
第一个中的

我假设它是指针的指针,第二个是右值,我遇到了这个问题,它解释了右值但什么时候应该用第一个,什么时候应该用第二个?

你能给我解释一下吗?

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,,是右值引用

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

它大致是一个可以绑定到临时值的引用。("普通"引用不能)。

右值引用简介