gpt4 book ai didi

c++11 - 有没有办法检查是否应用了 RVO?

转载 作者:行者123 更新时间:2023-12-04 12:05:51 26 4
gpt4 key购买 nike

我有整个故事,关于我发现我从函数返回的无序映射实际上不是 RVO 的令人沮丧的旅程,尽管我确信它在更早的时候是无关紧要的。

有没有办法检查 RVO 是否在任何给定函数中发生?或者像一个做什么和不做什么的列表来获得我想要的结果?

最佳答案

是的。为类的生命周期方法创建钩子(Hook):

#include <iostream>

struct A{
A()
{ std::cout<<"Ctor\n"; }
A(const A& o)
{ std::cout<<"CCtor\n"; }
A(A&& o)
{ std::cout<<"MCtor\n"; }
~A()
{ std::cout<<"Dtor\n"; }
private:
int vl_;
};

A getA(){
A a;
return a;
}

int main(){
A b = getA();
return 0;
}

现在使用 RVO,b 与 a 是同一个对象在 getA所以你只会看到
Ctor
Dtor

您可以抑制 RVO,例如,通过添加一个额外的返回点:
 return a;
return A{a};

或移动:
return std::move(a);

然后你会看到:
Ctor
Mctor
Dtor
Dtor

关于c++11 - 有没有办法检查是否应用了 RVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35736568/

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