在以下功能中
foo(const Mat& img)
可以在函数中更改 img
,甚至编译器也不会发出警告。为什么?这是否意味着const Mat
引用没有任何意义?
答案 0 :(得分:4)
这是因为Mat包含指向实际图像数据的指针。 const仅适用于Mat对象本身(例如行,列等属性),而不适用于指针引用的数据。 注意:即使功能是
foo(Mat img)
您仍然可以更改图像数据。
将Mat作为const引用传递有许多优点。 它告诉程序员一些关于如何使用foo()以及如何修改foo()的东西。 此外,它会阻止您执行以下操作:
void foo(const cv::Mat& img)
{
img.create(5, 6, CV_8UC3);
}
这将导致编译器错误。