And*_*ron 10 c++ return-value-optimization
在昨天的编程采访中,我必须写的一个程序最终得到了这样的结论:
struct Blob
{
// basic field containing image blob statistics.
};
std::vector<Blob> find_blobs (const Image& ...)
{
std::vector<Blob> blobs;
// ...
return blobs;
}
Run Code Online (Sandbox Code Playgroud)
我熟悉返回值优化(RVO),所以我刚才提到返回向量不会导致流行编译器上的副本(有一个返回语句作为最后一行,并且没有控制路径可以返回另一个对象)我写的代码).
但是,面试官告诉我,由于Blob可能是一个复杂的用户定义类型(UDT),编译器可能无法执行RVO.他进一步补充说,返回a std::vector<Blob*>将增加编译器执行复制省略的机会.
据我所知,编译器执行RVO的能力与返回的对象类型完全无关,除非是非可复制对象,编译器将(应该?)拒绝代码,即使生成的代码也是如此无需调用复制构造函数即可编译.
那么,面试官是对的吗?复杂的返回类型是否会阻止编译器应用RVO?