C++:使用带有非常量参数的函数的复制构造函数

C++ : copy constructor that uses a function with non-const parameters

我需要像这样为我的 class Immagine 创建一个复制构造函数:

Immagine::Immagine(Immagine& i)
{
  ...
}

很明显,当我尝试调用它时,我有类似的东西: error: invalid initialization of non-const reference of type ‘Immagine&’ from an rvalue of type ‘Immagine’ 因为我会将其声明为:

Immagine::Immagine(const Immagine& i)
{
  ...
}

但我做不到,因为要初始化一个 Immagine 成员对象,我使用了一个函数

Immagine::Immagine(const Immagine& i)
{
  dlib::array2d<dlib::rgb_pixel>& r=i.v; //v is a member of type dlib::array2d<dlib::rgb_pixel>
  dlib::assign_image(this->dlib_immagine,r);
}

function dlib::assign_image(dst,src) 是一个包函数并将 src 复制到 dst 但在 src 参数处没有 const 声明,所以如果我声明i as const 我得到一个错误...我该如何解决这个问题?

假设你无法将 dlib::assign_image() 更改为 const Immagine,并且你确定它实际上不会更改任何内容,那么我将使用 const_cast 来从 i.

中删除常量

一般情况下,如果您有其他选择,最好不要使用 const_cast,但 IMO const_cast 最好在调用不正确但您的代码正确的遗留代码时使用。