c++中的双指针和常量

double pointer and const in c++

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

我在opencv中使用了一个名为"calcHist"的函数。它的声明是:

void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=false )

我写了一个代码片段:

Mat img = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat* arrays = &img;
int narrays = 1;
int channels[] = { 0 };
InputArray mask = noArray();
Mat hist;
int dims = 1;
int histSize[] = { 256 };   
float hranges[] = { 0.0, 255.0 };
float *ranges[] = { hranges };
calcHist(arrays, narrays, channels, mask, hist, dims, histSize, ranges);

然后得到一个错误:IntelliSense:没有重载函数"calcHist"的实例与参数列表匹配
但是如果我将"const"前缀为"float*ranges[]={ranges};"就像const float *ranges[] = { hranges };一样,没关系。

那么,为什么这个"const"是必要的,而histSize之前的"const"不是。

T*隐式转换为const T*。相应地,这意味着T**隐式地转换为T*const*T*const*不是const T**,因此此转换无法让您进行函数调用。