我想知道这个函数的哪个版本更有效:
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应该实现的移动语义(如果我没有错的话),第二个版本应该不会比第一个版本更昂贵。
发布于 2017-03-30 08:15:50
如果应用复制省略,第二种情况将更有效。
对于第一种情况,其用法如下:
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中,当返回语句的操作数为prvalue,且函数的返回类型与该prvalue的类型相同时,将保证复制省略。
https://stackoverflow.com/questions/43112010
复制相似问题