3
在下面的函数OpenCV中的const Mat引用是否有意义?
foo(const Mat& img)
img
可以在功能改变,甚至没有编译器警告。为什么?这是否意味着const Mat
参考没有任何意义?
在下面的函数OpenCV中的const Mat引用是否有意义?
foo(const Mat& img)
img
可以在功能改变,甚至没有编译器警告。为什么?这是否意味着const Mat
参考没有任何意义?
这是因为Mat包含一个指向实际图像数据的指针。 const仅适用于Mat对象本身(例如,像rows,cols这样的属性),而不适用于指针引用的数据。 注意:即使功能是
foo(Mat img)
你仍然可以改变图像数据。
将Mat作为常量引用传递有许多优点。它告诉程序员一些关于如何使用foo()以及如何修改foo()的内容。 此外,它阻止你做喜欢的东西:
void foo(const cv::Mat& img)
{
img.create(5, 6, CV_8UC3);
}
这将得到一个编译错误。