c++右值和指针的指针何时应该使用它
C++ rvalue and pointer of pointer when should I use it?
请考虑以下两行代码
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 **
不同,这是而不是双重间接性。
它大致是一个可以绑定到临时值的引用。("普通"引用不能)。
右值引用简介
相关文章:
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 何时应在构造函数参数中使用 const C++?
- 为什么或何时应在调用之前将可调用函数参数强制转换为右值?
- 点云库 (PCL) - 声明点云时何时应使用 ::P tr 的经验法则?
- 何时应使用 C++ 固定宽度整数类型,它们如何影响性能?
- 记录器何时应刷新
- 何时应使用 [[maybe_unused]]
- 何时应在现代C++中使用(非标头)源文件
- 何时应使用模板化参数与构造参数
- 关键部分或静音是否真的是成员变量,或者何时应成为成员变量
- 何时应存储指向函数的引用或指针?
- 何时应在Qt中将子对象声明为其父类的成员变量
- 何时应找到附加到模型的边界框的最小值和最大值
- 何时应删除默认的移动构造函数时令人困惑的事情
- 何时应使用make_heap与优先级队列
- 何时应通过常量引用传递运算符重载函数的参数
- 何时应防止隐式销毁?它是如何工作的
- 何时应使用std::atomic_compare_exchange_strong
- 何时应在非成员函数之前编写关键字 'static'?
- 什么是"is-implemented-in-terms-of"关系,何时应使用它?