簡體   English   中英

C++ 中復雜用戶定義類型的 RVO

[英]RVO for complex user-defined types in C++

在我昨天的編程面試中,我必須編寫的一個程序最終有這樣的東西:

struct Blob
{
    // basic field containing image blob statistics.
};

std::vector<Blob> find_blobs (const Image& ...)
{
    std::vector<Blob> blobs;
    // ...
    return blobs;
}

我熟悉返回值優化(RVO),所以我剛才提到返回向量不會導致流行編譯器的復制(最后一行有一個 return 語句,沒有控制路徑可以返回另一個 object 在我寫的代碼)。

然而,面試官告訴我,由於Blob可能是一個復雜的用戶定義類型(UDT),編譯器可能無法執行RVO。 他進一步補充說,返回std::vector<Blob*>會增加編譯器執行復制省略的機會。

據我所知,編譯器執行 RVO 的能力與返回的 object 的類型完全無關,除了不可復制的對象,編譯器將(應該?)拒絕代碼,即使結果代碼可以在不調用復制構造函數的情況下進行編譯。

那么,面試官是對的嗎? 復雜的返回類型是否會阻止編譯器應用 RVO?

不,使用的類型不應影響優化。

我看到使用指針的唯一原因是如果編譯器未能通過 RVO,則復制它們的成本更低。 不太可能與最流行的編譯器。

暫無
暫無

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

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