加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的复杂用户定义类型的RVO

发布时间:2020-12-16 05:35:49 所属栏目:百科 来源:网络整理
导读:在昨天的一个编程面试中,我不得不写的一个程序最终都是这样的: struct Blob{ // basic field containing image blob statistics.};std::vectorBlob find_blobs (const Image ...){ std::vectorBlob blobs; // ... return blobs;} 我熟悉return value optimi
在昨天的一个编程面试中,我不得不写的一个程序最终都是这样的:
struct Blob
{
    // basic field containing image blob statistics.
};

std::vector<Blob> find_blobs (const Image& ...)
{
    std::vector<Blob> blobs;
    // ...
    return blobs;
}

我熟悉return value optimization(RVO),所以我刚才提到返回向量不会在流行的编译器上造成一个副本(有一个返回语句作为最后一行,没有控制路径可以在代码中返回另一个对象写).

不过面试官告诉我,由于Blob可能是一个复杂的用户定义类型(UDT),编译器可能无法执行RVO.他进一步补充说,返回一个std :: vector< Blob *>将增加编译器执行复制检测的机会.

据我所知,编译器执行RVO的能力与返回的对象类型完全无关,除非是可复制的对象,否则编译器将(拒绝)拒绝代码,即使生成的代码可以编译,而无需调用复制构造函数.

那么面试官是对的吗?一个复杂的返回类型可以阻止编译器应用RVO吗?

解决方法

不,使用的类型不应影响优化.

我看到使用指针的唯一原因是,如果编译器失败了RVO,它们便会更便宜.最不受欢迎的编译器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读