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

溫馨提示×

溫馨提示×

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

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

C++中為什么不要使用可變參數

發布時間:2021-11-25 15:52:53 來源:億速云 閱讀:245 作者:iii 欄目:大數據

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

F.55 不要使用可變參數

Reason(原因)

從va_arg中讀出內容的處理假設實際傳遞的數據類型是正確的。傳遞可變參數的處理假設數據會按照正確的類型被讀取。由于通常這兩種假設都不能在語言中強制達成安全,只能依靠編程規范以保證其正確。因此說都是脆弱的。

Example(示例)

int sum(...) {    // ...    while (/*...*/)        result += va_arg(list, int); // BAD, assumes it will be passed ints    // ...}
sum(3, 2); // oksum(3.14159, 2.71828); // BAD, undefined
template<class ...Args>auto sum(Args... args) { // GOOD, and much more flexible    return (... + args); // note: C++17 "fold expression"}
sum(3, 2); // ok: 5sum(3.14159, 2.71828); // ok: ~5.85987

譯者注:代碼中使用了兩種現代C++的新特性,一個是C++11中引入的可變參數模板(variadic template),另一個是C++17引入的折疊表達式(fold expression)。

Alternatives(備選方案)

  • overloading

    重載

  • variadic templates

    可變參數列表

  • variant arguments

    variant(C++17引入的變體數據,譯者注)類型參數。

  • initializer_list (homogeneous)

    初始化列表(同類數據的情況)(C++11引入)

  • Note(注意)

定義一個...參數在無法決定實際參數類型時一種有用的技術,尤其是定義可以接受任何東西的函數以便在重載版本中禁止“任何其他的東西”或者在模板元程序中表示包羅萬象的容器。

Enforcement(實施建議)

  • Issue a diagnostic for using va_list, va_start, or va_arg.

    發起對使用va_list,va_start或者va_arg的檢查。

  • Issue a diagnostic for passing an argument to a vararg parameter of a function that does not offer an overload for a more specific type in the position of the vararg. To fix: Use a different function, or [[suppress(types)]].

    發起針對以下情況的檢查:向函數的可變參數可變參數傳遞單獨的實參,而且不存在在可變參數位置定義了特定數據類型參數的重載函數。

    修改建議:使用不同的函數或者[[抑制((類型準則群組))]]

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

向AI問一下細節

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

c++
AI

广汉市| 阜新市| 沿河| 东乌珠穆沁旗| 巴林右旗| 云阳县| 略阳县| 喀喇| 顺平县| 丰城市| 蓬莱市| 邵东县| 大英县| 湖南省| 阜新市| 云霄县| 定西市| 宝应县| 马公市| 永兴县| 贵港市| 新竹市| 玛沁县| 白山市| 新丰县| 横峰县| 沈丘县| 菏泽市| 澜沧| 三原县| 昭苏县| 科技| 双柏县| 牡丹江市| 河东区| 根河市| 通道| 郑州市| 环江| 贵定县| 乐陵市|