gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:10:27 26 4
gpt4 key购买 nike

在我昨天的编程面试中,我必须编写的一个程序最终有这样的东西:

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),所以我刚刚提到返回 vector 不会导致流行编译器上的复制(最后一行有一个 return 语句,并且在我编写的代码中没有控制路径可以返回另一个对象)。

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

据我所知,编译器执行 RVO 的能力与返回对象的类型完全无关,除了不可复制的对象,编译器将(应该?)拒绝代码,即使生成的代码无需调用复制构造函数即可编译。

那么,面试官是对的吗?复杂的返回类型是否会阻止编译器应用 RVO?

最佳答案

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

我看到使用指针的唯一原因是,如果编译器未能通过 RVO,则复制指针的成本更低。。不太可能与最流行的编译器。

关于c++ - C++ 中复杂用户定义类型的 RVO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com