微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在昨天的一个编程面试中,我不得不写的一个程序最终都是这样的:
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,它们便会更便宜.最不受欢迎的编译器.

原文地址:https://www.jb51.cc/c/114296.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐