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
最好在调用不正确但您的代码正确的遗留代码时使用。
我需要像这样为我的 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
最好在调用不正确但您的代码正确的遗留代码时使用。