通过引用传递 cv::Mat 或返回它
Passing cv::Mat by reference or return it?
我想知道这个函数的哪个版本更有效:
void myimread (cv::Mat &mat, const std::string &imgname){
mat = imread(imgname);
}
或
cv::Mat myimread (const std::string &imgname){
return imread(imgname);
}
据我所知,cv::Mat
有点像一个聪明的指针,结合cv::Mat
应该实现的移动语义(同样,如果我没错的话(,第二个版本应该不会比第一个版本贵。
如果应用了复制省略,则第2种情况会更有效。
对于第一种情况,用法是:
cv::Mat mat; // default constructed
myimread(mat, imgname); // copy assigned by imread(imgname) inside myimread
对于第二种情况:
cv::Mat mat = myimread(imgname); // mat is constructed by imread(imgname) directly; copy/move operation is omitted
从 C++17 开始,当 return 语句的操作数是 prvalue 并且函数的返回类型与该 prvalue 的类型相同时,可以保证复制省略。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- Difference in displaying cv2 Mat
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- 如何发送 Mat H=findHomography 返回 Matlab
- 如何将 cv::mat 对象从 python 模块传递到 c++ 函数并返回返回的 cv::mat 类型为对象?
- 通过引用传递 cv::Mat 或返回它
- C++ cv::Mat 返回向量的<rectangle>线程异步
- 将 Opencv Mat 返回到节点.js v8
- 为什么CV :: MAT的向量总是返回第一个图像
- 迭代 CalcHist 返回的 Mat
- 如何从C++中的矩阵 (Mat) 返回特定值的索引
- Linux下的OpenCV:无法获取Mat size (cv:: size),只返回MSize
- OpenCV Mat 方法"at" Linux 中返回奇怪的字符
- OpenCV Mat在函数返回和使用copyTo
- Cv::Mat CvType在返回时发生更改