C++:使用具有非const参数的函数的复制构造函数

vol*_*ssa 0 c++ constructor const copy-constructor

我需要为我的类创建一个复制构造函数,Immagine如下所示:

Immagine::Immagine(Immagine& i)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

Immagine::Immagine(const Immagine& i)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

但我无法做到这一点,因为,为了对一个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);
}
Run Code Online (Sandbox Code Playgroud)

功能dlib::assign_image(dst,src)是封装功能,并复制srcdst,但没有被声明constsrc参数,所以如果我声明i作为const我得到一个错误......我该如何解决这个问题?

And*_*ndy 5

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

一般情况下,const_cast如果您有其他选项,最好不要使用,但const_cast最好在调用遗留代码时使用IMO ,但代码不是.