0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Google編程風(fēng)格指南(三)

C語(yǔ)言專家集中營(yíng) ? 來(lái)源:未知 ? 作者:李倩 ? 2018-09-27 18:06 ? 次閱讀

4. 函數(shù)

4.1. 參數(shù)順序

總述

函數(shù)的參數(shù)順序?yàn)? 輸入?yún)?shù)在先, 后跟輸出參數(shù).

說(shuō)明

C/C++ 中的函數(shù)參數(shù)或者是函數(shù)的輸入, 或者是函數(shù)的輸出, 或兼而有之. 輸入?yún)?shù)通常是值參或const引用, 輸出參數(shù)或輸入/輸出參數(shù)則一般為非const指針. 在排列參數(shù)順序時(shí), 將所有的輸入?yún)?shù)置于輸出參數(shù)之前. 特別要注意, 在加入新參數(shù)時(shí)不要因?yàn)樗鼈兪切聟?shù)就置于參數(shù)列表最后, 而是仍然要按照前述的規(guī)則, 即將新的輸入?yún)?shù)也置于輸出參數(shù)之前.

這并非一個(gè)硬性規(guī)定. 輸入/輸出參數(shù) (通常是類或結(jié)構(gòu)體) 讓這個(gè)問(wèn)題變得復(fù)雜. 并且, 有時(shí)候?yàn)榱似渌瘮?shù)保持一致, 你可能不得不有所變通.

4.2. 編寫簡(jiǎn)短函數(shù)

總述

我們傾向于編寫簡(jiǎn)短, 凝練的函數(shù).

說(shuō)明

我們承認(rèn)長(zhǎng)函數(shù)有時(shí)是合理的, 因此并不硬性限制函數(shù)的長(zhǎng)度. 如果函數(shù)超過(guò) 40 行, 可以思索一下能不能在不影響程序結(jié)構(gòu)的前提下對(duì)其進(jìn)行分割.

即使一個(gè)長(zhǎng)函數(shù)現(xiàn)在工作的非常好, 一旦有人對(duì)其修改, 有可能出現(xiàn)新的問(wèn)題, 甚至導(dǎo)致難以發(fā)現(xiàn)的 bug. 使函數(shù)盡量簡(jiǎn)短, 以便于他人閱讀和修改代碼.

在處理代碼時(shí), 你可能會(huì)發(fā)現(xiàn)復(fù)雜的長(zhǎng)函數(shù). 不要害怕修改現(xiàn)有代碼: 如果證實(shí)這些代碼使用 / 調(diào)試起來(lái)很困難, 或者你只需要使用其中的一小段代碼, 考慮將其分割為更加簡(jiǎn)短并易于管理的若干函數(shù).

4.3. 引用參數(shù)

總述

所有按引用傳遞的參數(shù)必須加上const.

定義

在 C 語(yǔ)言中, 如果函數(shù)需要修改變量的值, 參數(shù)必須為指針, 如intfoo(int*pval). 在 C++ 中, 函數(shù)還可以聲明為引用參數(shù):intfoo(int&val).

優(yōu)點(diǎn)

定義引用參數(shù)可以防止出現(xiàn)(*pval)++這樣丑陋的代碼. 引用參數(shù)對(duì)于拷貝構(gòu)造函數(shù)這樣的應(yīng)用也是必需的. 同時(shí)也更明確地不接受空指針.

缺點(diǎn)

容易引起誤解, 因?yàn)橐迷谡Z(yǔ)法上是值變量卻擁有指針的語(yǔ)義.

結(jié)論

函數(shù)參數(shù)列表中, 所有引用參數(shù)都必須是const:

void Foo(const string &in, string *out);

事實(shí)上這在 Google Code 是一個(gè)硬性約定: 輸入?yún)?shù)是值參或const引用, 輸出參數(shù)為指針. 輸入?yún)?shù)可以是const指針, 但決不能是非const的引用參數(shù), 除非特殊要求, 比如swap().

有時(shí)候, 在輸入形參中用constT*指針比constT&更明智. 比如:

可能會(huì)傳遞空指針.

函數(shù)要把指針或?qū)Φ刂返囊觅x值給輸入形參.

總而言之, 大多時(shí)候輸入形參往往是constT&. 若用constT*則說(shuō)明輸入另有處理. 所以若要使用constT*, 則應(yīng)給出相應(yīng)的理由, 否則會(huì)使得讀者感到迷惑.

4.4. 函數(shù)重載

總述

若要使用函數(shù)重載, 則必須能讓讀者一看調(diào)用點(diǎn)就胸有成竹, 而不用花心思猜測(cè)調(diào)用的重載函數(shù)到底是哪一種. 這一規(guī)則也適用于構(gòu)造函數(shù).

定義

你可以編寫一個(gè)參數(shù)類型為conststring&的函數(shù), 然后用另一個(gè)參數(shù)類型為constchar*的函數(shù)對(duì)其進(jìn)行重載:

class MyClass { public: void Analyze(const string &text); void Analyze(const char *text, size_t textlen);};

優(yōu)點(diǎn)

通過(guò)重載參數(shù)不同的同名函數(shù), 可以令代碼更加直觀. 模板化代碼需要重載, 這同時(shí)也能為使用者帶來(lái)便利.

缺點(diǎn)

如果函數(shù)單靠不同的參數(shù)類型而重載 (acgtyrant 注:這意味著參數(shù)數(shù)量不變), 讀者就得十分熟悉 C++ 五花八門的匹配規(guī)則, 以了解匹配過(guò)程具體到底如何. 另外, 如果派生類只重載了某個(gè)函數(shù)的部分變體, 繼承語(yǔ)義就容易令人困惑.

結(jié)論

如果打算重載一個(gè)函數(shù), 可以試試改在函數(shù)名里加上參數(shù)信息. 例如, 用AppendString()和AppendInt()等, 而不是一口氣重載多個(gè)Append(). 如果重載函數(shù)的目的是為了支持不同數(shù)量的同一類型參數(shù), 則優(yōu)先考慮使用std::vector以便使用者可以用列表初始化指定參數(shù).

4.5. 缺省參數(shù)

總述

只允許在非虛函數(shù)中使用缺省參數(shù), 且必須保證缺省參數(shù)的值始終一致. 缺省參數(shù)與函數(shù)重載遵循同樣的規(guī)則. 一般情況下建議使用函數(shù)重載, 尤其是在缺省函數(shù)帶來(lái)的可讀性提升不能彌補(bǔ)下文中所提到的缺點(diǎn)的情況下.

優(yōu)點(diǎn)

有些函數(shù)一般情況下使用默認(rèn)參數(shù), 但有時(shí)需要又使用非默認(rèn)的參數(shù). 缺省參數(shù)為這樣的情形提供了便利, 使程序員不需要為了極少的例外情況編寫大量的函數(shù). 和函數(shù)重載相比, 缺省參數(shù)的語(yǔ)法更簡(jiǎn)潔明了, 減少了大量的樣板代碼, 也更好地區(qū)別了 “必要參數(shù)” 和 “可選參數(shù)”.

缺點(diǎn)

缺省參數(shù)實(shí)際上是函數(shù)重載語(yǔ)義的另一種實(shí)現(xiàn)方式, 因此所有不應(yīng)當(dāng)使用函數(shù)重載的理由也都適用于缺省參數(shù).

虛函數(shù)調(diào)用的缺省參數(shù)取決于目標(biāo)對(duì)象的靜態(tài)類型, 此時(shí)無(wú)法保證給定函數(shù)的所有重載聲明的都是同樣的缺省參數(shù).

缺省參數(shù)是在每個(gè)調(diào)用點(diǎn)都要進(jìn)行重新求值的, 這會(huì)造成生成的代碼迅速膨脹. 作為讀者, 一般來(lái)說(shuō)也更希望缺省的參數(shù)在聲明時(shí)就已經(jīng)被固定了, 而不是在每次調(diào)用時(shí)都可能會(huì)有不同的取值.

缺省參數(shù)會(huì)干擾函數(shù)指針, 導(dǎo)致函數(shù)簽名與調(diào)用點(diǎn)的簽名不一致. 而函數(shù)重載不會(huì)導(dǎo)致這樣的問(wèn)題.

結(jié)論

對(duì)于虛函數(shù), 不允許使用缺省參數(shù), 因?yàn)樵谔摵瘮?shù)中缺省參數(shù)不一定能正常工作. 如果在每個(gè)調(diào)用點(diǎn)缺省參數(shù)的值都有可能不同, 在這種情況下缺省函數(shù)也不允許使用. (例如, 不要寫像voidf(intn=counter++);這樣的代碼.)

在其他情況下, 如果缺省參數(shù)對(duì)可讀性的提升遠(yuǎn)遠(yuǎn)超過(guò)了以上提及的缺點(diǎn)的話, 可以使用缺省參數(shù). 如果仍有疑惑, 就使用函數(shù)重載.

4.6. 函數(shù)返回類型后置語(yǔ)法

總述

只有在常規(guī)寫法 (返回類型前置) 不便于書寫或不便于閱讀時(shí)使用返回類型后置語(yǔ)法.

定義

C++ 現(xiàn)在允許兩種不同的函數(shù)聲明方式. 以往的寫法是將返回類型置于函數(shù)名之前. 例如:

int foo(int x);

C++11 引入了這一新的形式. 現(xiàn)在可以在函數(shù)名前使用auto關(guān)鍵字, 在參數(shù)列表之后后置返回類型. 例如:

auto foo(int x) -> int;

后置返回類型為函數(shù)作用域. 對(duì)于像int這樣簡(jiǎn)單的類型, 兩種寫法沒(méi)有區(qū)別. 但對(duì)于復(fù)雜的情況, 例如類域中的類型聲明或者以函數(shù)參數(shù)的形式書寫的類型, 寫法的不同會(huì)造成區(qū)別.

優(yōu)點(diǎn)

后置返回類型是顯式地指定Lambda 表達(dá)式的返回值的唯一方式. 某些情況下, 編譯器可以自動(dòng)推導(dǎo)出 Lambda 表達(dá)式的返回類型, 但并不是在所有的情況下都能實(shí)現(xiàn). 即使編譯器能夠自動(dòng)推導(dǎo), 顯式地指定返回類型也能讓讀者更明了.

有時(shí)在已經(jīng)出現(xiàn)了的函數(shù)參數(shù)列表之后指定返回類型, 能夠讓書寫更簡(jiǎn)單, 也更易讀, 尤其是在返回類型依賴于模板參數(shù)時(shí). 例如:

template auto add(T t, U u) -> decltype(t + u);

對(duì)比下面的例子:

template decltype(declval() + declval()) add(T t, U u);

缺點(diǎn)

后置返回類型相對(duì)來(lái)說(shuō)是非常新的語(yǔ)法, 而且在 C 和 Java 中都沒(méi)有相似的寫法, 因此可能對(duì)讀者來(lái)說(shuō)比較陌生.

在已有的代碼中有大量的函數(shù)聲明, 你不可能把它們都用新的語(yǔ)法重寫一遍. 因此實(shí)際的做法只能是使用舊的語(yǔ)法或者新舊混用. 在這種情況下, 只使用一種版本是相對(duì)來(lái)說(shuō)更規(guī)整的形式.

結(jié)論

在大部分情況下, 應(yīng)當(dāng)繼續(xù)使用以往的函數(shù)聲明寫法, 即將返回類型置于函數(shù)名前. 只有在必需的時(shí)候 (如 Lambda 表達(dá)式) 或者使用后置語(yǔ)法能夠簡(jiǎn)化書寫并且提高易讀性的時(shí)候才使用新的返回類型后置語(yǔ)法. 但是后一種情況一般來(lái)說(shuō)是很少見的, 大部分時(shí)候都出現(xiàn)在相當(dāng)復(fù)雜的模板代碼中, 而多數(shù)情況下不鼓勵(lì)寫這樣復(fù)雜的模板代碼.

5. 來(lái)自 Google 的奇技

Google 用了很多自己實(shí)現(xiàn)的技巧 / 工具使 C++ 代碼更加健壯, 我們使用 C++ 的方式可能和你在其它地方見到的有所不同.

5.1. 所有權(quán)與智能指針

> 總述

動(dòng)態(tài)分配出的對(duì)象最好有單一且固定的所有主, 并通過(guò)智能指針傳遞所有權(quán).

> 定義

所有權(quán)是一種登記/管理動(dòng)態(tài)內(nèi)存和其它資源的技術(shù). 動(dòng)態(tài)分配對(duì)象的所有主是一個(gè)對(duì)象或函數(shù), 后者負(fù)責(zé)確保當(dāng)前者無(wú)用時(shí)就自動(dòng)銷毀前者. 所有權(quán)有時(shí)可以共享, 此時(shí)就由最后一個(gè)所有主來(lái)負(fù)責(zé)銷毀它. 甚至也可以不用共享, 在代碼中直接把所有權(quán)傳遞給其它對(duì)象.

智能指針是一個(gè)通過(guò)重載*和->運(yùn)算符以表現(xiàn)得如指針一樣的類. 智能指針類型被用來(lái)自動(dòng)化所有權(quán)的登記工作, 來(lái)確保執(zhí)行銷毀義務(wù)到位.std::unique_ptr是 C++11 新推出的一種智能指針類型, 用來(lái)表示動(dòng)態(tài)分配出的對(duì)象的獨(dú)一無(wú)二的所有權(quán); 當(dāng)std::unique_ptr離開作用域時(shí), 對(duì)象就會(huì)被銷毀.std::unique_ptr不能被復(fù)制, 但可以把它移動(dòng)(move)給新所有主.std::shared_ptr同樣表示動(dòng)態(tài)分配對(duì)象的所有權(quán), 但可以被共享, 也可以被復(fù)制; 對(duì)象的所有權(quán)由所有復(fù)制者共同擁有, 最后一個(gè)復(fù)制者被銷毀時(shí), 對(duì)象也會(huì)隨著被銷毀.

> 優(yōu)點(diǎn)

如果沒(méi)有清晰、邏輯條理的所有權(quán)安排, 不可能管理好動(dòng)態(tài)分配的內(nèi)存.

傳遞對(duì)象的所有權(quán), 開銷比復(fù)制來(lái)得小, 如果可以復(fù)制的話.

傳遞所有權(quán)也比”借用”指針或引用來(lái)得簡(jiǎn)單, 畢竟它大大省去了兩個(gè)用戶一起協(xié)調(diào)對(duì)象生命周期的工作.

如果所有權(quán)邏輯條理, 有文檔且不紊亂的話, 可讀性會(huì)有很大提升.

可以不用手動(dòng)完成所有權(quán)的登記工作, 大大簡(jiǎn)化了代碼, 也免去了一大波錯(cuò)誤之惱.

對(duì)于 const 對(duì)象來(lái)說(shuō), 智能指針簡(jiǎn)單易用, 也比深度復(fù)制高效.

> 缺點(diǎn)

不得不用指針(不管是智能的還是原生的)來(lái)表示和傳遞所有權(quán). 指針語(yǔ)義可要比值語(yǔ)義復(fù)雜得許多了, 特別是在 API 里:這時(shí)不光要操心所有權(quán), 還要顧及別名, 生命周期, 可變性以及其它大大小小的問(wèn)題.

其實(shí)值語(yǔ)義的開銷經(jīng)常被高估, 所以所有權(quán)傳遞帶來(lái)的性能提升不一定能彌補(bǔ)可讀性和復(fù)雜度的損失.

如果 API 依賴所有權(quán)的傳遞, 就會(huì)害得客戶端不得不用單一的內(nèi)存管理模型.

如果使用智能指針, 那么資源釋放發(fā)生的位置就會(huì)變得不那么明顯.

std::unique_ptr的所有權(quán)傳遞原理是 C++11 的 move 語(yǔ)法, 后者畢竟是剛剛推出的, 容易迷惑程序員.

如果原本的所有權(quán)設(shè)計(jì)已經(jīng)夠完善了, 那么若要引入所有權(quán)共享機(jī)制, 可能不得不重構(gòu)整個(gè)系統(tǒng).

所有權(quán)共享機(jī)制的登記工作在運(yùn)行時(shí)進(jìn)行, 開銷可能相當(dāng)大.

某些極端情況下 (例如循環(huán)引用), 所有權(quán)被共享的對(duì)象永遠(yuǎn)不會(huì)被銷毀.

智能指針并不能夠完全代替原生指針.

> 結(jié)論

如果必須使用動(dòng)態(tài)分配, 那么更傾向于將所有權(quán)保持在分配者手中. 如果其他地方要使用這個(gè)對(duì)象, 最好傳遞它的拷貝, 或者傳遞一個(gè)不用改變所有權(quán)的指針或引用. 傾向于使用std::unique_ptr來(lái)明確所有權(quán)傳遞, 例如:

std::unique_ptr FooFactory();void FooConsumer(std::unique_ptr ptr);

如果沒(méi)有很好的理由, 則不要使用共享所有權(quán). 這里的理由可以是為了避免開銷昂貴的拷貝操作, 但是只有當(dāng)性能提升非常明顯, 并且操作的對(duì)象是不可變的(比如說(shuō)std::shared_ptr)時(shí)候, 才能這么做. 如果確實(shí)要使用共享所有權(quán), 建議于使用std::shared_ptr.

不要使用std::auto_ptr, 使用std::unique_ptr代替它.

5.2. Cpplint

> 總述

使用cpplint.py檢查風(fēng)格錯(cuò)誤.

> 說(shuō)明

cpplint.py是一個(gè)用來(lái)分析源文件, 能檢查出多種風(fēng)格錯(cuò)誤的工具. 它不并完美, 甚至還會(huì)漏報(bào)和誤報(bào), 但它仍然是一個(gè)非常有用的工具. 在行尾加//NOLINT, 或在上一行加//NOLINTNEXTLINE, 可以忽略報(bào)錯(cuò).

某些項(xiàng)目會(huì)指導(dǎo)你如何使用他們的項(xiàng)目工具運(yùn)行cpplint.py. 如果你參與的項(xiàng)目沒(méi)有提供, 你可以單獨(dú)下載cpplint.py.

譯者(acgtyrant)筆記

把智能指針當(dāng)成對(duì)象來(lái)看待的話, 就很好領(lǐng)會(huì)它與所指對(duì)象之間的關(guān)系了.

原來(lái) Rust 的 Ownership 思想是受到了 C++ 智能指針的很大啟發(fā)啊.

scoped_ptr和auto_ptr已過(guò)時(shí). 現(xiàn)在是shared_ptr和uniqued_ptr的天下了.

按本文來(lái)說(shuō), 似乎除了智能指針, 還有其它所有權(quán)機(jī)制, 值得留意.

Arch Linux 用戶注意了, AUR 有對(duì) cpplint 打包.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Google
    +關(guān)注

    關(guān)注

    5

    文章

    1748

    瀏覽量

    57191
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3521

    瀏覽量

    93275
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73302

原文標(biāo)題:Google C++ 編程規(guī)范 - 3

文章出處:【微信號(hào):C_Expert,微信公眾號(hào):C語(yǔ)言專家集中營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    JAVA編程實(shí)例:多種風(fēng)格的窗口

    JAVA編程實(shí)例:多種風(fēng)格的窗口 
    發(fā)表于 12-06 12:37

    MATLAB 編程風(fēng)格指南

    thebeginning.”(良好的寫作規(guī)范的程序比糟糕的寫作規(guī)范的要好,因?yàn)樗麄兙哂休^少的錯(cuò)誤、易于調(diào)試與修改,因此,從一開始就考慮風(fēng)格是很重要的)。本指南列舉的MATLAB 代碼編寫的建議在
    發(fā)表于 09-22 16:19

    Google C++編程指南

    Google C++編程指南目標(biāo):增強(qiáng)代碼一致性,創(chuàng)建通用的、必需的習(xí)慣用語(yǔ)和模式可以使代碼更加容易理解C++是一門包含大量高級(jí)特性的巨型語(yǔ)言,某些情況下,我們會(huì)限制甚至禁止使用某些特性使代碼簡(jiǎn)化
    發(fā)表于 11-29 09:15

    MATLAB編程風(fēng)格指南

    有關(guān) MATLAB代碼的建議通常強(qiáng)調(diào)的是效率,譬如說(shuō)有關(guān)“不要用循環(huán)”等的建議,本指南與之不同。本指南主要考慮的是代碼(格式)的正確性、清晰性與通用性。本指南的目的在
    發(fā)表于 07-18 10:54 ?0次下載

    linux內(nèi)核C語(yǔ)言的編程風(fēng)格

    linux 內(nèi)核C語(yǔ)言的編程風(fēng)格
    發(fā)表于 09-26 14:22 ?0次下載

    Google編程風(fēng)格指南(一)

    使代碼易于管理的方法之一是加強(qiáng)代碼一致性. 讓任何程序員都可以快速讀懂你的代碼這點(diǎn)非常重要. 保持統(tǒng)一編程風(fēng)格并遵守約定意味著可以很容易根據(jù) “模式匹配” 規(guī)則來(lái)推斷各種標(biāo)識(shí)符的含義. 創(chuàng)建通用
    的頭像 發(fā)表于 09-27 17:57 ?3027次閱讀

    Google編程風(fēng)格指南(二)

    鼓勵(lì)在 .cc 文件內(nèi)使用匿名命名空間或 static 聲明. 使用具名的命名空間時(shí), 其名稱可基于項(xiàng)目名或相對(duì)路徑. 禁止使用 using 指示(using-directive)。禁止使用內(nèi)聯(lián)命名空間(inline namespace)。
    的頭像 發(fā)表于 09-27 18:01 ?2513次閱讀

    Google編程風(fēng)格指南(四)

    用于定義移動(dòng)構(gòu)造函數(shù) (使用類的右值引用進(jìn)行構(gòu)造的函數(shù)) 使得移動(dòng)一個(gè)值而非拷貝之成為可能. 例如, 如果 v1 是一個(gè) vector, 則 auto v2(std::move(v1)) 將很可能不再進(jìn)行大量的數(shù)據(jù)復(fù)制而只是簡(jiǎn)單地進(jìn)行指針操作, 在某些情況下這將帶來(lái)大幅度的性能提升.
    的頭像 發(fā)表于 09-27 18:08 ?2788次閱讀

    Google編程風(fēng)格指南(五)

    所有具有靜態(tài)存儲(chǔ)類型的變量 (例如靜態(tài)變量或全局變量, 參見 存儲(chǔ)類型) 都應(yīng)當(dāng)以此方式命名. 對(duì)于其他存儲(chǔ)類型的變量, 如自動(dòng)變量等, 這條規(guī)則是可選的. 如果不采用這條規(guī)則, 就按照一般的變量命名規(guī)則.
    的頭像 發(fā)表于 09-27 18:15 ?2388次閱讀

    Google編程風(fēng)格指南(六)

    即使是英文, 也不應(yīng)將用戶界面的文本硬編碼到源代碼中, 因此非 ASCII 字符應(yīng)當(dāng)很少被用到. 特殊情況下可以適當(dāng)包含此類字符. 例如, 代碼分析外部數(shù)據(jù)文件時(shí), 可以適當(dāng)硬編碼數(shù)據(jù)文件中作為分隔符的非 ASCII 字符串; 更常見的是 (不需要本地化的) 單元測(cè)試代碼可能包含非 ASCII 字符串. 此類情況下, 應(yīng)使用 UTF-8 編碼, 因?yàn)楹芏喙ぞ叨伎梢岳斫夂吞幚?UTF-8 編碼.
    的頭像 發(fā)表于 09-27 18:18 ?2644次閱讀

    Google C++編程風(fēng)格指南PDF版免費(fèi)下載

    Google的項(xiàng)目大多使用C++開發(fā)。每一個(gè)C++程序員也都知道, C++具有很多強(qiáng)大的語(yǔ)言特性,但這種強(qiáng)大不可避免的導(dǎo)致它的復(fù)雜,而復(fù)雜性會(huì)使得代碼更容易出現(xiàn)bug.難于閱讀和維護(hù)。
    發(fā)表于 03-06 08:00 ?0次下載
    <b class='flag-5'>Google</b> C++<b class='flag-5'>編程</b><b class='flag-5'>風(fēng)格</b><b class='flag-5'>指南</b>PDF版免費(fèi)下載

    Google C++編程風(fēng)格指南PDF電子書免費(fèi)下載

    Google 的開源項(xiàng)目大多使用 C++開發(fā)。每一個(gè) C++程序員也都知道,C++具有很多強(qiáng)大的語(yǔ)言特性,但這種強(qiáng)大不可避免的導(dǎo)致它的復(fù)雜,這種復(fù)雜會(huì)使得代碼更易于出現(xiàn) bug、難于閱讀和維護(hù)。本
    發(fā)表于 12-12 08:00 ?1次下載
    <b class='flag-5'>Google</b> C++<b class='flag-5'>編程</b><b class='flag-5'>風(fēng)格</b><b class='flag-5'>指南</b>PDF電子書免費(fèi)下載

    Verilog HIDL的RTL設(shè)計(jì)風(fēng)格指南資源下載

    Verilog HIDL的RTL設(shè)計(jì)風(fēng)格指南資源下載
    發(fā)表于 04-13 10:09 ?9次下載

    西門子S7-1200和S7-1500編程風(fēng)格指南

    西門子S7-1200和S7-1500編程風(fēng)格指南分享
    發(fā)表于 08-17 17:30 ?19次下載

    Google Python代碼風(fēng)格指南

    1 背景 Python是谷歌主要使用的動(dòng)態(tài)語(yǔ)言,本風(fēng)格指導(dǎo)列舉了使用Python編程時(shí)應(yīng)該做和不該做的事項(xiàng)(dos nothing on first line # 縮進(jìn)4個(gè)空格,首行括號(hào)后無(wú)內(nèi)容
    的頭像 發(fā)表于 11-03 10:20 ?2960次閱讀