簡體   English   中英

收益優化

[英]Return Value Optimization

考慮以下兩個相同功能的實現

Object foo()
{
    Object ret;
    ret.a.set(...);
    ret.b.set(...);
    return ret;
}

Object foo()
{
    A a;
    a.set(...);

    B b;
    b.set(...);

    return Object(a, b);
}

假設在構造之后必須調用A :: set和B :: set。 此外,假設Object,A和B都具有移動構造函數,這些構造函數不會復制大量數據。 最后,假設編譯器同時執行RVO和NRVO。

就對象構造而言,以下哪一項更有效?

如果此實現使用3個子對象(A,B,C),則后者似乎更有效,因為對新創建的對象的成員值調用將更少。 不過,我認為這真的沒有什么不同。 我只會選擇您認為最易讀的一個。

假設-由於您沒有提供太多的上下文-成員a和b類似於矢量,並且set函數用元素“填充”該矢量類似的對象...並假定Object的兩參數構造函數復制從參數構造成員a和b ...並假設您的編譯器能夠執行NRVO而不只是RVO(目前非常常見)...第一個函數應該更高效,因為您不知道必須以這種方式復制a和b。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM