首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递履历::通过引用还是返回?

传递履历::通过引用还是返回?
EN

Stack Overflow用户
提问于 2017-03-30 08:08:42
回答 1查看 3.2K关注 0票数 4

我想知道这个函数的哪个版本更有效:

代码语言:javascript
复制
void myimread (cv::Mat &mat, const std::string &imgname){
  mat = imread(imgname);
}

代码语言:javascript
复制
cv::Mat myimread (const std::string &imgname){
  return imread(imgname);
}

据我所知,cv::Mat是一个聪明的指针,结合cv::Mat应该实现的移动语义(如果我没有错的话),第二个版本应该不会比第一个版本更昂贵。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 08:15:50

如果应用复制省略,第二种情况将更有效。

对于第一种情况,其用法如下:

代码语言:javascript
复制
cv::Mat mat;            // default constructed
myimread(mat, imgname); // copy assigned by imread(imgname) inside myimread

关于第二个案件:

代码语言:javascript
复制
cv::Mat mat = myimread(imgname); // mat is constructed by imread(imgname) directly; copy/move operation is omitted

在C++17中,当返回语句的操作数为prvalue,且函数的返回类型与该prvalue的类型相同时,将保证复制省略。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43112010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档