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,它们便会更便宜.最不受欢迎的编译器.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...