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

时间:2016-05-18 19:20:27

标签: c++ constructor const copy-constructor

我需要为我的班级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);
}

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

1 个答案:

答案 0 :(得分:5)

假设您无法更改dlib::assign_image()以获取const Immagine,并且您确定它实际上不会更改任何内容,那么我会使用const_cast删除来自i的常量。

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