[英]Can a compiler be instructed to elide away the copy of variant_t being returned in C++?
我希望在數據庫訪問代碼中編寫一個方法:
variant_t GetQueryRows (...)
我想稱之為:
const variant_t result = GetQueryRows (...)
盡管我可以做到,但對profile_t的復制在我的探查器結果中顯示出很高的水平。 因此,我需要確保variant_t不被復制。 在variant_t中沒有移動構造函數或移動分配,並且我無法修改variant_t的源以添加一個。
除了通過out參數返回“結果”這一顯而易見的事情,我還能在Visual Studio 2012中使用C ++做任何事情嗎?
您無法做任何保證。 如果可能的話,編譯器通常會通過返回值優化來消除此副本,但有一些警告。
在GetQueryRows
,應該僅從函數的一點返回一個命名變量;該變量僅從函數的一點返回。 多次返回,或可能返回一個值或另一個值的返回值,會中斷返回值優化。 您不能拋出任何異常。
如果要保證行為,則使用輸出參數是唯一可靠的方法。
如果這樣構造GetQueryRows
則很可能發生通過返回值優化進行復制省略的情況:
const variant_t GetQueryRows() {
variant_t result; // Exactly one declaration of return value
... // arbitrary code
return result; // Exactly one return statement.
}
參考: http : //msdn.microsoft.com/zh-cn/library/ms364057(v=vs.80).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.