OpenCV中的const Mat引用有意义吗?

OpenCV中的const Mat引用有意义吗?,opencv,reference,constants,mat,Opencv,Reference,Constants,Mat,在下面的函数中 foo(const Mat& img) img可以在函数中进行更改,而无需编译器发出警告。为什么?这是否意味着常量Mat引用没有任何意义?这是因为Mat包含指向实际图像数据的指针。常量仅适用于Mat对象本身(例如,行、列等属性),而不适用于指针引用的数据。 注意:即使函数是 foo(Mat img) 您仍然可以更改图像数据 将Mat作为常量引用传递有许多优点。 它告诉程序员如何使用foo()和如何修改foo()。 此外,它还会阻止你做以下事情: void foo(co

在下面的函数中

foo(const Mat& img)

img
可以在函数中进行更改,而无需编译器发出警告。为什么?这是否意味着
常量Mat
引用没有任何意义?

这是因为Mat包含指向实际图像数据的指针。常量仅适用于Mat对象本身(例如,行、列等属性),而不适用于指针引用的数据。 注意:即使函数是

foo(Mat img)
您仍然可以更改图像数据

将Mat作为常量引用传递有许多优点。 它告诉程序员如何使用foo()和如何修改foo()。 此外,它还会阻止你做以下事情:

void foo(const cv::Mat& img)
{
    img.create(5, 6, CV_8UC3);
}
这将导致编译器错误