3

在以下函数中

foo(const Mat& img)

img编译器甚至可以在没有警告的情况下在函数中更改。为什么?这是否意味着const Mat参考没有任何意义?

4

1 回答 1

5

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

foo(Mat img)

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

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

void foo(const cv::Mat& img)
{
    img.create(5, 6, CV_8UC3);
}

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

于 2013-05-27T11:58:07.437 回答