我想知道这个功能的哪个版本效率更高:
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
应该实现的移动语义(再次,如果我没有错),第二个版本应该不会更贵比第一个。
答案 0 :(得分:1)
如果copy elision被应用,第二种情况会更有效。
对于第一种情况,用法是:
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的类型相同时,保证了copy elision。