簡體   English   中英

信任回報價值優化

[英]Trusting the Return Value Optimization

你如何使用返回值優化
是否有任何我可以信任現代編譯器來使用優化的情況,或者我應該總是以安全的方式返回某種類型的指針/使用引用作為參數?

是否有任何已知的情況不能進行返回值優化?對我來說,返回值優化對於編譯器來說相當容易。

每當啟用編譯器優化時(在大多數編譯器中,即使禁用了優化),也會發生RVO。 NRVO稍微不那么常見,但大多數編譯器也會執行此優化,至少在啟用優化時。

你說得對,優化相當容易的編譯器執行,這是為什么編譯器幾乎總是這樣做。 “無法制作”的唯一情況是優化不適用的情況:RVO僅在您返回未命名的臨時時適用。 如果要返回一個命名的局部變量,則應用NRVO,雖然編譯器實現起來稍微復雜一些,但它是可行的,現代編譯器沒有問題。

為了最大限度地發生它,你可以返回一個直接在return語句中構造的對象[任何人都能記住這個成語的名字 - 我已經忘記了它]:

Foo f() {
    ....
    return Foo( ... );
}

但與所有優化一樣,編譯器總是可以選擇不執行此操作。 在一天結束時,如果你需要返回一個值,那么你就無法信任編譯器 - 指針和引用不會削減它。

暫無
暫無

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

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