成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++中為什么盡量不增加函數(shù)的參數(shù)個數(shù)

本篇內(nèi)容主要講解“C++中為什么盡量不增加函數(shù)的參數(shù)個數(shù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++中為什么盡量不增加函數(shù)的參數(shù)個數(shù)”吧!

為白銀等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及白銀網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、做網(wǎng)站、白銀網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

Reason(原因)

參數(shù)過多會增加混淆的可能性。和其他方式相比,傳遞很多參數(shù)的代價通常也很高。

Discussion(討論)

函數(shù)參數(shù)過多通常有兩個原因:

  1. 抽象缺失。這里缺少一個抽象,因此組合數(shù)據(jù)被分開傳遞而不是作為包含不變量的單獨的對象。這不是擴展參數(shù)列表的問題,而是由于組合值不被強制不變量保護而引發(fā)錯誤的問題。

  2. 違反了“一個函數(shù),一個職責”原則。函數(shù)試圖做一件以上的事情,應該被重構。

  3. Example(示例)

標注庫merge()就處在我們可以舒服地處理的上限:

template<class InputIterator1, class InputIterator2, class OutputIterator, class Compare>OutputIterator merge(InputIterator1 first1, InputIterator1 last1,                     InputIterator2 first2, InputIterator2 last2,                     OutputIterator result, Compare comp);

注意這是因為前面提到的第一個問題:抽象缺失。STL傳遞了迭代器對(沒有包裝的組合值)而不是range(抽象)。

譯者注:range是C++14引入的新特性。譯者注:range是C++14引入的新特性。

這里一共有四個模板參數(shù)和六個函數(shù)參數(shù)。為了簡化最常見和最簡單的用法,比較操作可以默認為<(小于號):

template<class InputIterator1, class InputIterator2, class OutputIterator>OutputIterator merge(InputIterator1 first1, InputIterator1 last1,                     InputIterator2 first2, InputIterator2 last2,                     OutputIterator result);

這并沒有減少復雜性,但是降低了面向很多用戶的表面上的復雜度。為了真正減少參數(shù)的數(shù)量,我們需要將參數(shù)綁定到高級別的抽象中。

template<class InputRange1, class InputRange2, class OutputIterator>OutputIterator merge(InputRange1 r1, InputRange2 r2, OutputIterator result);

將參數(shù)分組打包是一種減少參數(shù)數(shù)量的通常技術,這樣也可以增加檢查的機會。

或者,我們也可以使用concept( 在ISO技術規(guī)范中定義)來定義合并操作必須可用的三個類型。

譯者注:concept將會被C++20正式引入。

Mergeable{In1, In2, Out}OutputIterator merge(In1 r1, In2 r2, Out result);
Example(示例)

安全規(guī)則群組推薦將

void f(int* some_ints, int some_ints_length);  // BAD: C style, unsafe

with(替換為)

void f(gsl::span<int> some_ints);              // GOOD: safe, bounds-checked

這里,我們使用一個安全而且健壯的抽象,而且通常也可以減少參數(shù)的數(shù)量。

Note(注意)

多少參數(shù)算太多?爭取讓參數(shù)的個數(shù)少于4個。存在一些4個獨立參數(shù)是最佳表達方式的函數(shù),但不多。

可選項:使用較好的抽象:將參數(shù)分組并形成有意義的對象然后傳遞它(傳值或傳址)。

可選項:使用默然參數(shù)或重載以便更加通用的調(diào)用形式可以使用較少的參數(shù)。

Enforcement(實施建議)

  • Warn when a function declares two iterators (including pointers) of the same type instead of a range or a view.

    如果函數(shù)定義了相同類型的兩個迭代器(包括指針)而不是range或view。

  • (Not enforceable) This is a philosophical guideline that is infeasible to check directly.

       (非強制)這是一個事關編程哲學的準則,無法直接檢查。

到此,相信大家對“C++中為什么盡量不增加函數(shù)的參數(shù)個數(shù)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

標題名稱:C++中為什么盡量不增加函數(shù)的參數(shù)個數(shù)
轉(zhuǎn)載來源:http://jinyejixie.com/article18/jdosdp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化虛擬主機、關鍵詞優(yōu)化、響應式網(wǎng)站、云服務器做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
浏阳市| 沈丘县| 大理市| 吉首市| 绥江县| 信宜市| 宁武县| 游戏| 盘锦市| 吉木萨尔县| 高阳县| 灵台县| 乐平市| 武义县| 灵台县| 永济市| 阳谷县| 临泽县| 阿图什市| 湛江市| 右玉县| 通城县| 北流市| 元谋县| 大理市| 镇安县| 徐水县| 武山县| 崇礼县| 富平县| 重庆市| 万盛区| 武陟县| 姜堰市| 屏东市| 华坪县| 铜陵市| 连南| 边坝县| 鄂州市| 河曲县|