将图像*[3]传递到常量图像*[3]无法使用const_cast<图像*[3]>,替代方案?



我有一个函数,它接收一个指向不会被修改的图像的指针数组,定义为:

void processImg( const Image *myImgs[NUM_IMAGES] );

我想传入一个非const类型。我预计需要这样做,但这是非法的(VS2010说不允许):

Image *imgsToProcess[NUM_IMAGES];
// ...fill in imgsToProcess
processImg( const_cast<Image*[NUM_IMAGES]>(imgsToProcess) );

我也试过:

processImg( const_cast<Image*[]>(imgsToProcess) ); //'const_cast' : cannot convert from 'Image *[3]' to 'Image *[]'
processImg( const_cast<Image**>(imgsToProcess) ); //'processImg' : cannot convert parameter 1 from 'Image **' to 'const Image *[]'

因此,我更改了函数和数组的定义,并执行了以下操作:

void processImg( const Image **myImgs, int numImages );
...
Image **imgsToProcess;
// ...fill in imgsToProcess
processImg( const_cast<Image**>(imgsToProcess), NUM_IMAGES );

令我惊讶的是,我仍然收到这个错误消息:

'processImg' : cannot convert parameter 1 from 'Image **' to 'const Image **'

我做错了什么?有没有可能用const Image *myImgs[NUM_IMAGES]的第一个定义来实现这一点?

您想要:

    processImg(const_cast<const Image **>(imgsToProcess));

问题本质上是您的const_cast没有转换为const

您可能期望const_cast将对象强制转换为传递给它的类型的const版本。但const_cast不是这样工作的
相反,您需要指定对象应强制转换到的确切类型

所以如果你想要

Image **

铸造到

const Image **

将其写入

const_cast<const Image**>(imgsToProcess);

最新更新