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

bea*_*ver 3 opencv const reference mat

在以下功能

foo(const Mat& img)
Run Code Online (Sandbox Code Playgroud)

img可以在函数中更改它,而无需编译器发出警告。为什么?这是否意味着const Mat参考没有任何意义?

Bul*_*ull 5

这是因为Mat包含指向实际图像数据的指针。const仅适用于Mat对象本身(例如,行,cols等属性),不适用于指针所引用的数据。注意:即使该功能是

foo(Mat img)
Run Code Online (Sandbox Code Playgroud)

您仍然可以更改图像数据。

将Mat作为const引用传递有许多优点。它告诉程序员一些有关如何使用foo()以及如何修改foo()的知识。此外,它还会阻止您执行以下操作:

void foo(const cv::Mat& img)
{
    img.create(5, 6, CV_8UC3);
}
Run Code Online (Sandbox Code Playgroud)

这将得到一个编译器错误。