将双精度类型**转换为const双精度类型**

Converting a double ** to a const double**

本文关键字:双精度 类型 const 转换      更新时间:2023-10-16

如何将双精度类型**转换为const双精度类型**

我正在使用ROOT和反卷积函数。当运行时,我收到一个错误:

不能初始化'const Double_t **'类型的形参(也称为'constdouble **'),左值类型为'Double_t **'(也称为'double **')

我这样定义参数:

Double_t ** resp = new Double_t * [ybins];
for (int f = 0; f < xbins ; f = f+1){ 
    for (int i = 0; i <  ybins; i = i+1){
            resp[f][i] = hinr->GetBinContent(i+1,f+1);
           } 
     }

注意:"duplicate"问题的答案解释了为什么隐式强制转换不起作用,但它没有回答这个问题,"我如何做我需要做的事情?"答案是:

使用c风格的强制转换或c++风格的const_cast。c++的const_cast是首选,因为它使你的意图更清晰。

#include <iostream>
int main(int argc, char * argv[])
{
  double a = 3.14159;
  double * b = & a;
  double **c = & b;
  const double ** d = (const double **) c;
  std::cout <<  **d << std::endl;
  // const_cast is the preferred approach.    
  const double ** e = const_cast<const double **> (c);
  std::cout <<  **e << std::endl;

  return 0;
}