C++ C++;R值和指针的指针我应该在什么时候使用它? 请考虑这2行代码 void doStuff(int ** i) void doStuff2( int && i)

C++ C++;R值和指针的指针我应该在什么时候使用它? 请考虑这2行代码 void doStuff(int ** i) void doStuff2( int && i),c++,pointers,reference,C++,Pointers,Reference,在第一个中,我假设它是指针的指针,第二个是右值, 我偶然发现,它解释了右值,但我什么时候应该使用第一个,什么时候应该使用第二个 你能给我澄清一下吗?int**i是指向指针的指针。 一般来说,使用这个方法,因为这可能有不同的含义,并且你有更好的方式来表达C++。p> 它可能是指向单个变量的指针,包含指向单个int的指针: int value = 0; int * pValue = &value; int ** ppValue = &pValue; 但是,每个也可以是指向数组第一个

在第一个中,我假设它是指针的指针,第二个是右值, 我偶然发现,它解释了右值,但我什么时候应该使用第一个,什么时候应该使用第二个


你能给我澄清一下吗?

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

一般来说,使用这个方法,因为这可能有不同的含义,并且你有更好的方式来表达C++。p> 它可能是指向单个变量的指针,包含指向单个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;
仅在明确说明如何访问元素、如何知道元素大小、谁负责释放(如果有)、指针的有效期等的情况下使用

通常,如果您有这样一个数组/矩阵,您当然应该将其包装在一个安全使用的界面后面,或者将其全部替换,例如,使用
向量

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

bool SelectValue(int *& p) { ... }
int&&是右值引用

int**
不同,这不是双重间接寻址

它大致上是一个也可以绑定到临时值的引用。 (“正常”引用不能)


&&
不是引用的引用,而是右值引用。第二个不是“引用的引用”(不是这样的东西),它是右值引用。它的用法需要一篇完整的论文。指针的指针是一个在C++中很难使用的东西,因为引用、智能指针和容器的流行。我发现它在遍历老式的单链表时非常有用。比较右值引用和指针到指针是没有意义的。它们是完全不同的东西。@ RiaHaJaMaor - IMO,你不应该在C++中真正使用<代码> *>代码,除非你处理的是一个旧的C API,如<代码>和< /COD>——这主要是在移动语义的上下文中使用的。