91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++為什么不要返回右值引用

發布時間:2021-11-24 11:38:09 來源:億速云 閱讀:535 作者:iii 欄目:大數據

本篇內容主要講解“C++為什么不要返回右值引用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++為什么不要返回右值引用”吧!

Reason(原因)

返回右值引用是在要求返回一個已經銷毀的臨時對象的引用。&&對于臨時對象來說具有吸引力。

Example(示例)

返回的右值引用在所有表達式的最后一個返回時退出了有效范圍。

auto&& x = max(0, 1);   // OK, so farfoo(x);                 // Undefined behavior

這種用法是bug的常見原因。經常被錯誤地報告為編譯器錯誤。函數的實現者應該避免給使用者布置這樣的陷阱。

The lifetime safety profile will (when completely implemented) catch such problems.

生命周期安全規則群組會(在完全實現的情況下)捕捉這樣的問題。

Example(示例)

當引用的對象是向下(向內)傳遞給調用者時返回右值引用時會工作得很好。這種情況下可以保證臨時變量的生命周期會長于函數調用(參見F.18和F.19)。然而,當將這個引用向上(向外)傳遞給更大的調用者空間時是有問題的。對于傳遞輸入參數(通過原始引用或者完美的fowrard處理)而且需要返回值的透過型函數,使用簡單的auto類型返回類型推斷(不是auto&&)。

Assume that F returns by value:

假設F是通過值返回的:

template<class F>auto&& wrapper(F f){    log_call(typeid(f)); // or whatever instrumentation    return f();          // BAD: returns a reference to a temporary}

Better(較好):

template<class F>auto wrapper(F f){    log_call(typeid(f)); // or whatever instrumentation    return f();          // OK}
Exception(例外)

std::move和std::forward也會返回&&,但是按照慣例它們只是用于臨時變量被銷毀之前,它的引用在同一表達式內傳遞的情況。

Enforcement(實施建議)

Flag any use of && as a return type, except in std::move and std::forward.

標記使用&&做返回值類型的用法,除了std::move和std::forward。

到此,相信大家對“C++為什么不要返回右值引用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

台山市| 巴塘县| 华亭县| 新疆| 张家界市| 霸州市| 哈巴河县| 陆河县| 福清市| 临城县| 清河县| 正宁县| 南阳市| 陆川县| 曲周县| 莱西市| 渝中区| 怀宁县| 开平市| 定安县| 白沙| 新民市| 永吉县| 绩溪县| 岑溪市| 东源县| 信阳市| 亳州市| 彭泽县| 曲阳县| 达日县| 修文县| 大洼县| 麟游县| 金寨县| 西吉县| 比如县| 桦甸市| 元阳县| 海安县| 信阳市|