-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
god的讀音分為英式和美式讀音:
英 [ɡɒd] 美 [ɡɑd]
n. 神;(大寫首字母時(shí))上帝
vt. 膜拜,崇拜
n. (God)人名;(索、阿拉伯)古德
例句如下:
The U.S. needs an honest-to-God 12-step program to recover its long-term 3.5% annual growth potential.
The Taiwanese-born director, who won previously for Brokeback Mountain in 2006, exclaimed: "Thank you, movie god!"
Such was their love, a love so sublime that only God's love surpasses it.
If it was what God wanted me to do, who was I to argue?
Is it desirable that the President of the United States should believe in God?
By God, investors, especially retired investors, are desperate for income to pay their bills.
You may not like our president but you'd better thank God he's in office.
Clerics thundered that it was a woman's God-given duty to suffer the pain of labor.
With God's help, we broke the pressure and scored two goals to reach the World Cup.
In yours, it's championing people who wanted the God-given right to use a gender-neutral bathroom.
They rob from God and His Children, so shall the same be upon them.
Ariel found that the mention of church or God scares people into being more truthful.
Campbell believes that many women have forgotten their biological, and for her, God-given function.
scares怎么讀(scares怎么讀英語)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于scares怎么讀的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國內(nèi)免費(fèi)在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、這個(gè)作業(yè)怎么做?閱讀理解 It
1-4: ADBA |
二、devc++格式為什么那么丑
1、設(shè)置更美觀的C++編譯器界面;
2、c++ 編碼規(guī)范
代碼風(fēng)格的重要性
頭文件
頭文件包含順序
優(yōu)先位置的包含文件
C系統(tǒng)文件
C++系統(tǒng)文件
其他庫的.h文件
本庫的.h文件
作用域
禁止使用 using 指示(using-directive)
禁止使用內(nèi)聯(lián)命名空間(inline namespace)
因?yàn)閮?nèi)聯(lián)的命名空間會(huì)內(nèi)部的標(biāo)識(shí)符放到外層作用域
內(nèi)聯(lián)命名空間主要用來保持跨版本的 ABI 兼容性
在頭文件中使用匿名空間導(dǎo)致違背 C++ 的唯一定義原則 (One Definition Rule (ODR)).
不應(yīng)該使用 using 指示引入整個(gè)命名空間的標(biāo)識(shí)符號(hào) ---- 會(huì)污染命名空間
不要在命名空間 std 內(nèi)聲明任何東西, 包括標(biāo)準(zhǔn)庫的類前置聲明. 在 std 命名空間聲明實(shí)體是未定義的行為, 會(huì)導(dǎo)致如不可移植. 聲明標(biāo)準(zhǔn)庫下的實(shí)體, 需要包含對(duì)應(yīng)的頭文件.
匿名命名空間和靜態(tài)空間(內(nèi)部鏈接屬性)
在 .cc 文件中定義一個(gè)不需要被外部引用的變量時(shí),可以將它們放在匿名命名空間或聲明為 static; 但是不要在 .h 文件中這么做
所有置于匿名命名空間的聲明都具有內(nèi)部鏈接性,函數(shù)和變量可以經(jīng)由聲明為 static 擁有內(nèi)部鏈接性,這意味著你在這個(gè)文件中聲明的這些標(biāo)識(shí)符都不能在另一個(gè)文件中被訪問。即使兩個(gè)文件聲明了完全一樣名字的標(biāo)識(shí)符,它們所指向的實(shí)體實(shí)際上是完全不同的。
靜態(tài)成員函數(shù), 全局函數(shù), 和非成員函數(shù)
將一系列函數(shù)直接置于命名空間中,不要用類的靜態(tài)方法模擬出命名空間的效果,類的靜態(tài)方法應(yīng)當(dāng)和類的實(shí)例或靜態(tài)數(shù)據(jù)緊密相關(guān).
局部變量
將函數(shù)變量盡可能置于最小作用域內(nèi), 并在變量聲明時(shí)進(jìn)行初始化.
提倡在盡可能小的作用域中聲明變量, 離第一次使用越近越好.
這樣做的好處是閱讀代碼可以更容易定位變量的聲明位置, 了解變量的初始值和類型,特別是利用初始化的方式代替聲明再賦值的方式.
警告: 如果變量是一個(gè)對(duì)象, 每次進(jìn)入作用域都要調(diào)用其構(gòu)造函數(shù), 每次退出作用域都要調(diào)用其析構(gòu)函數(shù). 這會(huì)導(dǎo)致效率降低.
靜態(tài)和全局變量
禁止定義靜態(tài)儲(chǔ)存周期非POD變量(原生數(shù)據(jù)類型 (POD : Plain Old Data)),禁止使用含有副作用的函數(shù)初始化POD全局變量,因?yàn)槎嗑幾g單元中的靜態(tài)變量執(zhí)行時(shí)的構(gòu)造和析構(gòu)順序是未明確的,這將導(dǎo)致代碼的不可移植.
靜態(tài)變量的構(gòu)造函數(shù)和析構(gòu)函數(shù)在C++中只有部分明確確定, 甚至隨著構(gòu)建變化而變化, 導(dǎo)致難以發(fā)現(xiàn)的bug.
盡量不要使用函數(shù)的返回值來初始化一個(gè)變量
同一個(gè)編譯單元內(nèi)是明確的,靜態(tài)初始化優(yōu)先于動(dòng)態(tài)初始化,初始化順序按照聲明順序進(jìn)行,銷毀則逆序。
不同的編譯單元之間初始化和銷毀順序?qū)儆谖疵鞔_行為 (unspecified behaviour)。
全局和靜態(tài)變量在程序中斷時(shí)會(huì)被析構(gòu), --- 析構(gòu)順序和構(gòu)造函數(shù)的調(diào)用順序相反。
quick_exit() 來代替 exit() 并中斷程序。quick_exit 不會(huì)執(zhí)行任何析構(gòu),也不會(huì)執(zhí)行 atexit() 所綁定的任何 handlers.
只允許 POD(原生數(shù)據(jù)類型) 類型的靜態(tài)變量
static 對(duì)象, 可以考慮在 main() 函數(shù)或 pthread_once() 內(nèi)初始化一個(gè)指針且永不回收, 只能使用raw指針.
別用智能指針,畢竟后者的析構(gòu)函數(shù)涉及不定順序問題
匿名命名空間說白了就是文件作用域,就像 C static 聲明的作用域一樣,后者已經(jīng)被 C++ 標(biāo)準(zhǔn)提倡棄用
局部變量在聲明的同時(shí)進(jìn)行顯式值初始化,比起隱式初始化再賦值的兩步過程要高效,同時(shí)也貫徹了計(jì)算機(jī)體系結(jié)構(gòu)重要的概念「局部性(locality)」
類
不要在構(gòu)造函數(shù)中調(diào)用虛函數(shù), 也不要在無法報(bào)出錯(cuò)誤時(shí)進(jìn)行可能失敗的初始化.
構(gòu)造函數(shù)的地址是無法被取得的, 因此, 舉例來說, 由構(gòu)造函數(shù)完成的工作是無法以簡單的方式交給其他線程的.
不要定義隱式類型轉(zhuǎn)換. 對(duì)于轉(zhuǎn)換運(yùn)算符和單參數(shù)構(gòu)造函數(shù), 請(qǐng)使用 explicit 關(guān)鍵字.
在類型定義中, 類型轉(zhuǎn)換運(yùn)算符和單參數(shù)構(gòu)造函數(shù)都應(yīng)當(dāng)用 explicit 進(jìn)行標(biāo)記. 一個(gè)例外是, 拷貝和移動(dòng)構(gòu)造函數(shù)不應(yīng)當(dāng)被標(biāo)記為 explicit, 因?yàn)樗鼈儾⒉粓?zhí)行類型轉(zhuǎn)換. 對(duì)于設(shè)計(jì)目的就是用于對(duì)其他類型進(jìn)行透明包裝的類來說, 隱式類型轉(zhuǎn)換有時(shí)是必要且合適的. 這時(shí)應(yīng)當(dāng)聯(lián)系項(xiàng)目組長并說明特殊情況.
僅當(dāng)只有數(shù)據(jù)成員時(shí)使用 struct, 其它一概使用 class.
為了和 STL 保持一致, 對(duì)于仿函數(shù)等特性可以不用 class 而是使用 struct.
不在構(gòu)造函數(shù)中做太多邏輯相關(guān)的初始化;
編譯器提供的默認(rèn)構(gòu)造函數(shù)不會(huì)對(duì)變量進(jìn)行初始化, 如果定義了其他構(gòu)造函數(shù), 編譯器不再提供, 需要編碼者自行提供默認(rèn)構(gòu)造函數(shù);
為避免隱式轉(zhuǎn)換, 需將單參數(shù)構(gòu)造函數(shù)聲明為 explicit;
為避免拷貝構(gòu)造函數(shù), 賦值操作的濫用和編譯器自動(dòng)生成, 可將其聲明為 private 且無需實(shí)現(xiàn);
僅在作為數(shù)據(jù)集合時(shí)使用 struct;
組合 > 實(shí)現(xiàn)繼承 > 接口繼承 > 私有繼承, 子類重載的虛函數(shù)也要聲明 virtual 關(guān)鍵字, 雖然編譯器允許不這樣做;
避免使用多重繼承, 使用時(shí), 除一個(gè)基類含有實(shí)現(xiàn)外, 其他基類均為純接口;
接口類類名以 Interface 為后綴, 除提供帶實(shí)現(xiàn)的虛析構(gòu)函數(shù), 靜態(tài)成員函數(shù)外, 其他均為純虛函數(shù), 不定義非靜態(tài)數(shù)據(jù)成員, 不提供構(gòu)造函數(shù), 提供的話, 聲明為 protected;
為降低復(fù)雜性, 盡量不重載操作符, 模板, 標(biāo)準(zhǔn)類中使用時(shí)提供文檔說明;
存取函數(shù)一般內(nèi)聯(lián)在頭文件中;
聲明次序: public -> protected -> private;
函數(shù)體盡量短小, 緊湊, 功能單一;
函數(shù)
在排列參數(shù)順序時(shí), 將所有的輸入?yún)?shù)置于輸出參數(shù)之前. 特別要注意, 在加入新參數(shù)時(shí)不要因?yàn)樗鼈兪切聟?shù)就置于參數(shù)列表最后, 而是仍然要按照前述的規(guī)則, 即將新的輸入?yún)?shù)也置于輸出參數(shù)之前.
傾向于編寫簡短, 凝練的函數(shù).
可以思索一下能不能在不影響程序結(jié)構(gòu)的前提下對(duì)其進(jìn)行分割.
所有按引用傳遞的參數(shù)必須加上 const.
定義引用參數(shù)可以防止出現(xiàn) (*pval)++ 這樣丑陋的代碼. 引用參數(shù)對(duì)于拷貝構(gòu)造函數(shù)這樣的應(yīng)用也是必需的. 同時(shí)也更明確地不接受空指針.
引用在語法上是值變量卻擁有指針的語義.
輸入?yún)?shù)是值參或 const 引用, 輸出參數(shù)為指針. 輸入?yún)?shù)可以是 const 指針, 但決不能是非 const 的引用參數(shù), 除非特殊要求, 比如 swap().
只允許在非虛函數(shù)中使用缺省參數(shù), 且必須保證缺省參數(shù)的值始終一致.
對(duì)于虛函數(shù), 不允許使用缺省參數(shù), 因?yàn)樵谔摵瘮?shù)中缺省參數(shù)不一定能正常工作.
只有在常規(guī)寫法 (返回類型前置) 不便于書寫或不便于閱讀時(shí)使用返回類型后置語法. --- 后置返回類型是顯式地指定 Lambda 表達(dá)式 的返回值的唯一方式.
來自Google的奇技
Google用了很多自己實(shí)現(xiàn)的技巧/工具C++代碼更加健壯
所有權(quán)與智能指針: 動(dòng)態(tài)分配出的對(duì)象最好有單一且固定的所有主, 并通過智能指針傳遞所有權(quán).
智能指針是重載了*和->運(yùn)算符以表現(xiàn)得像指針一樣的類
unique_ptr將所有權(quán)移動(dòng)給新所有主
shared_ptr表示動(dòng)態(tài)分配對(duì)象的所有權(quán), 但可以被共享, 也可以被復(fù)制
如果沒有很好的理由就不要使用共享版所有權(quán), 是為了避免開銷昂貴的拷貝操作.
不要使用auto_ptr, 使用shared_ptr代替它.
使用cpplint.py檢查代碼風(fēng)格, cpplint.py是一個(gè)用來分析源文件, 能檢查出多種風(fēng)格錯(cuò)誤的工具.
scoped_ptr 和 auto_ptr 已過時(shí). 現(xiàn)在是 shared_ptr 和 uniqued_ptr 的天下了.
AUR有對(duì)cpplint打包.
其他C++特性
引用參數(shù): 所有按引用傳遞的參數(shù)必須加上const
引用在語法上是值變量卻擁有指針的語義.
輸入?yún)?shù)是值參或 const 引用, 輸出參數(shù)為指針. 輸入?yún)?shù)可以是 const 指針, 但決不能是非 const 的引用參數(shù),除非用于交換.
有時(shí)候,在輸入形參中用 const T* 指針比 const T& 更明智.
右值的引用: 只在定義移動(dòng)構(gòu)造函數(shù)與移動(dòng)賦值操作時(shí)使用右值引用. 不要使用 std::forward.
右值引用是一種只能綁定到臨時(shí)對(duì)象的引用的一種, 其語法與傳統(tǒng)的引用語法相似.
用于定義移動(dòng)構(gòu)造函數(shù) (使用類的右值引用進(jìn)行構(gòu)造的函數(shù)) 使得移動(dòng)一個(gè)值而非拷貝之成為可能.
要高效率地使用某些標(biāo)準(zhǔn)庫類型, 例如 std::unique_ptr, std::move 是必需的.
函數(shù)重載: 若要用好函數(shù)重載,最好能讓讀者一看調(diào)用點(diǎn)(call site)就胸有成竹,不用花心思猜測調(diào)用的重載函數(shù)到底是哪一種。該規(guī)則適用于構(gòu)造函數(shù).
模板化代碼需要重載, 同時(shí)為使用者帶來便利.
缺省參數(shù): 我們不允許使用缺省函數(shù)參數(shù),少數(shù)極端情況除外。盡可能改用函數(shù)重載.
缺省參數(shù)會(huì)干擾函數(shù)簽名(function signature), 往往對(duì)不上所實(shí)際要調(diào)用的函數(shù)簽名
其一,位于 .cc 文件里的靜態(tài)函數(shù)或匿名空間函數(shù),畢竟都只能在局部文件里調(diào)用該函數(shù)了。
其二,可以在構(gòu)造函數(shù)里用缺省參數(shù),畢竟不可能取得它們的地址。
其三,可以用來模擬變長數(shù)組。
變長數(shù)組和alloca()
我們不允許使用變長數(shù)組和 alloca().
變長數(shù)組具有渾然天成的語法. 變長數(shù)組和 alloca() 也都很高效; 但是不是標(biāo)準(zhǔn)C++語法的一部分.
改用更安全的分配器(allocator),就像 std::vector 或 std::unique_ptr<T[]>
友元(friend)
我們?cè)试S合理的使用友元類及友元函數(shù).
通常友元應(yīng)該定義在同一文件內(nèi), 避免代碼讀者跑到其它文件查找使用該私有成員的類.
將一個(gè)單元測試類聲明成待測類的友元會(huì)很方便.
友元擴(kuò)大了 (但沒有打破) 類的封裝邊界. 某些情況下, 相對(duì)于將類成員聲明為 public, 使用友元是更好的選擇, 尤其是如果你只允許另一個(gè)類訪問該類的私有成員時(shí). 當(dāng)然, 大多數(shù)類都只應(yīng)該通過其提供的公有成員進(jìn)行互操作.
異常
我們不使用 C++ 異常.
異常允許應(yīng)用高層決定如何處理在底層嵌套函數(shù)中「不可能發(fā)生」的失敗(failures),不用管那些含糊且容易出錯(cuò)的錯(cuò)誤代碼.
異常是處理構(gòu)造函數(shù)失敗的唯一途徑.
異常會(huì)徹底擾亂程序的執(zhí)行流程并難以判斷,函數(shù)也許會(huì)在您意料不到的地方返回.
對(duì)于異常處理, 顯然不是短短幾句話能夠說清楚的, 以構(gòu)造函數(shù)為例, 很多 C++ 書籍上都提到當(dāng)構(gòu)造失敗時(shí)只有異??梢蕴幚? Google 禁止使用異常這一點(diǎn), 僅僅是為了自身的方便, 說大了, 無非是基于軟件管理成本上, 實(shí)際使用中還是自己決定
運(yùn)行時(shí)類型識(shí)別(run time type information RTTI)
RTTI 允許程序員在運(yùn)行時(shí)識(shí)別 C++ 類對(duì)象的類型. 它通過使用 typeid 或者 dynamic_cast 完成.
在單元測試中可以使用 RTTI, 但是在其他代碼中請(qǐng)盡量避免. 尤其是在新代碼中, 使用 RTTI 前務(wù)必三思. 如果你的代碼需要根據(jù)不同的對(duì)象類型執(zhí)行不同的行為的話, 請(qǐng)考慮用以下的兩種替代方案之一查詢類型.
虛函數(shù)可以根據(jù)子類類型的不同而執(zhí)行不同代碼.
類型轉(zhuǎn)型
使用 C++ 的類型轉(zhuǎn)換, 如 static_cast<>(). 不要使用 int y = (int)x 或 int y = int(x) 等轉(zhuǎn)換方式
C++ 采用了有別于 C 的類型轉(zhuǎn)換機(jī)制, 對(duì)轉(zhuǎn)換操作進(jìn)行歸類.
用 static_cast 替代 C 風(fēng)格的值轉(zhuǎn)換, 或某個(gè)類指針需要明確的向上轉(zhuǎn)換為父類指針時(shí).
用 const_cast 去掉 const 限定符.
用 reinterpret_cast 指針類型和整型或其它指針之間進(jìn)行不安全的相互轉(zhuǎn)換. 僅在你對(duì)所做一切了然于心時(shí)使用.
用 dynatic_cast 將派生類指針轉(zhuǎn)換為基類類型, 或?qū)⒒愔羔樲D(zhuǎn)換為派生類指針.
流
只在記錄日志時(shí)使用流.
流用來替代 printf() 和 scanf().
有了流, 在打印時(shí)不需要關(guān)心對(duì)象的類型.
流的構(gòu)造和析構(gòu)函數(shù)會(huì)自動(dòng)打開和關(guān)閉對(duì)應(yīng)的文件.
使用流還有很多利弊, 但代碼一致性勝過一切. 不要在代碼中使用流.
回想一下唯一性原則 (Only One Way): 我們希望在任何時(shí)候都只使用一種確定的 I/O 類型, 使代碼在所有 I/O 處都保持一致.
簡單性原則告誡我們必須從中選擇其一, 最后大多數(shù)決定采用 printf + read/write.
前置自增或自減
對(duì)于迭代器和其他模板對(duì)象使用前綴形式 (++i) 的自增, 自減運(yùn)算符.
不考慮返回值的話, 前置自增 (++i) 通常要比后置自增 (i++) 效率更高. 因?yàn)楹笾米栽?(或自減) 需要對(duì)表達(dá)式的值 i 進(jìn)行一次拷貝.
對(duì)簡單數(shù)值 (非對(duì)象), 兩種都無所謂. 對(duì)迭代器和模板類型, 使用前置自增 (自減).
const 用法
我們強(qiáng)烈建議你在任何可能的情況下都要使用 const. 此外有時(shí)改用 C++11 推出的 constexpr 更好.
在聲明的變量或參數(shù)前加上關(guān)鍵字 const 用于指明變量值不可被篡改 (如 const int foo ). 為類中的函數(shù)加上 const 限定符表明該函數(shù)不會(huì)修改類成員變量的狀態(tài)
大家更容易理解如何使用變量. 編譯器可以更好地進(jìn)行類型檢測, 相應(yīng)地, 也能生成更好的代碼.
如果函數(shù)不會(huì)修改傳你入的引用或指針類型參數(shù), 該參數(shù)應(yīng)聲明為 const.
盡可能將函數(shù)聲明為 const. 訪問函數(shù)應(yīng)該總是 const. 其他不會(huì)修改任何數(shù)據(jù)成員, 未調(diào)用非 const 函數(shù), 不會(huì)返回?cái)?shù)據(jù)成員非 const 指針或引用的函數(shù)也應(yīng)該聲明成 const.
如果數(shù)據(jù)成員在對(duì)象構(gòu)造之后不再發(fā)生變化, 可將其定義為 const.
關(guān)鍵字 mutable 可以使用, 但是在多線程中是不安全的, 使用時(shí)首先要考慮線程安全.
保持代碼的一致性: 也就是不要在一些地方把 const 寫在類型前面, 在其他地方又寫在后面, 確定一種寫法, 然后保持一致.
constexpr 用法
在 C++11 里,用 constexpr 來定義真正的常量,或?qū)崿F(xiàn)常量初始化
變量可以被聲明成 constexpr 以表示它是真正意義上的常量,即在編譯時(shí)和運(yùn)行時(shí)都不變。函數(shù)或構(gòu)造函數(shù)也可以被聲明成 constexpr, 以用來定義 constexpr 變量
靠 constexpr 特性,方才實(shí)現(xiàn)了 C++ 在接口上打造真正常量機(jī)制的可能。好好用 constexpr 來定義真・常量以及支持常量的函數(shù)。避免復(fù)雜的函數(shù)定義,以使其能夠與constexpr一起使用。 千萬別癡心妄想地想靠 constexpr 來強(qiáng)制代碼「內(nèi)聯(lián)
constexpr關(guān)鍵字詳解
constexpr編譯時(shí)常量
整數(shù)
C++ 內(nèi)建整型中, 僅使用 int. 如果程序中需要不同大小的變量, 可以使用 <stdint.h> 中長度精確的整型, 如 int16_t.如果您的變量可能不小于 2^31 (2GiB), 就用 64 位變量比如 int64_t. 此外要留意,哪怕您的值并不會(huì)超出 int 所能夠表示的范圍,在計(jì)算過程中也可能會(huì)溢出。所以拿不準(zhǔn)時(shí),干脆用更大的類型
C++ 沒有指定整型的大小. 通常人們假定 short 是 16 位, int 是 32 位, long 是 32 位, long long 是 64 位.
C++ 中整型大小因編譯器和體系結(jié)構(gòu)的不同而不同.
應(yīng)該使用斷言來保護(hù)數(shù)據(jù).
使用斷言來指出變量為非負(fù)數(shù), 而不是使用無符號(hào)型
64位下的可移植性
代碼應(yīng)該對(duì) 64 位和 32 位系統(tǒng)友好. 處理打印, 比較, 結(jié)構(gòu)體對(duì)齊時(shí)應(yīng)切記
持久化 - 將數(shù)據(jù)按字節(jié)流順序保存在磁盤文件或數(shù)據(jù)庫中.
gcc 中可使用 __attribute__((packed))使結(jié)構(gòu)體對(duì)齊
預(yù)處理宏
使用宏時(shí)要非常謹(jǐn)慎, 盡量以內(nèi)聯(lián)函數(shù), 枚舉和常量代替之.
宏意味著你和編譯器看到的代碼是不同的. 這可能會(huì)導(dǎo)致異常行為, 尤其因?yàn)楹昃哂腥肿饔糜?
下面給出的用法模式可以避免使用宏帶來的問題; 如果你要宏, 盡可能遵守:
不要在 .h 文件中定義宏.
在馬上要使用時(shí)才進(jìn)行 #define, 使用后要立即 #undef.
不要只是對(duì)已經(jīng)存在的宏使用#undef,選擇一個(gè)不會(huì)沖突的名稱;
不要試圖使用展開后會(huì)導(dǎo)致 C++ 構(gòu)造不穩(wěn)定的宏, 不然也至少要附上文檔說明其行為.
不要用 ## 處理函數(shù),類和變量的名字
0 , NULL 和 nullptr
整數(shù)用 0, 實(shí)數(shù)用 0.0, 指針用 nullptr 或 NULL, 字符 (串) 用 '\0'.
對(duì)于指針 (地址值), 到底是用 0, NULL 還是 nullptr. C++11 項(xiàng)目用 nullptr; C++03 項(xiàng)目則用 NULL, 畢竟它看起來像指針。實(shí)際上,一些 C++ 編譯器對(duì) NULL 的定義比較特殊,可以輸出有用的警告,特別是 sizeof(NULL) 就和 sizeof(0) 不一樣。
字符 (串) 用 '\0', 不僅類型正確而且可讀性好.
sizeof
盡可能用 sizeof(varname) 代替 sizeof(type).
auto
用 auto 繞過煩瑣的類型名,只要可讀性好就繼續(xù)用,別用在局部變量之外的地方
C++11 中,若變量被聲明成 auto, 那它的類型就會(huì)被自動(dòng)匹配成初始化表達(dá)式的類型
代碼要避免無所謂的重復(fù)
auto 只能用在局部變量里用。別用在文件作用域變量,命名空間作用域變量和類數(shù)據(jù)成員里。永遠(yuǎn)別列表初始化 auto 變量
auto 還可以和 C++11 特性「尾置返回類型(trailing return type)」一起用,不過后者只能用在 lambda 表達(dá)式里
初始化列表
C++11 中,該特性得到進(jìn)一步的推廣,任何對(duì)象類型都可以被列表初始化
用戶自定義類型也可以定義接收 std::initializer_list 的構(gòu)造函數(shù)和賦值運(yùn)算符,以自動(dòng)列表初始化
列表初始化也適用于常規(guī)數(shù)據(jù)類型的構(gòu)造,哪怕沒有接收 std::initializer_list 的構(gòu)造函數(shù)
Lambda表達(dá)式
適當(dāng)使用 lambda 表達(dá)式。別用默認(rèn) lambda 捕獲,所有捕獲都要顯式寫出來
Lambda 表達(dá)式是創(chuàng)建匿名函數(shù)對(duì)象的一種簡易途徑,常用于把函數(shù)當(dāng)參數(shù)傳
Lambdas, std::functions 和 std::bind 可以搭配成通用回調(diào)機(jī)制(general purpose callback mechanism);寫接收有界函數(shù)為參數(shù)的函數(shù)也很容易了
按 format 小用 lambda 表達(dá)式怡情。
禁用默認(rèn)捕獲,捕獲都要顯式寫出來。打比方,比起 [=](int x) {return x + n;}, 您該寫成 [n](int x) {return x + n;} 才對(duì),這樣讀者也好一眼看出 n 是被捕獲的值。
匿名函數(shù)始終要簡短,如果函數(shù)體超過了五行,那么還不如起名(acgtyrant 注:即把 lambda 表達(dá)式賦值給對(duì)象),或改用函數(shù)。
如果可讀性更好,就顯式寫出 lambd 的尾置返回類型,就像auto.
模板編程
不要使用復(fù)雜的模板編程
模板編程指的是利用c++ 模板實(shí)例化機(jī)制是圖靈完備性, 可以被用來實(shí)現(xiàn)編譯時(shí)刻的類型判斷的一系列編程技巧
模板編程的優(yōu)缺點(diǎn)
Boost庫
只使用 Boost 中被認(rèn)可的庫.
C++11
適當(dāng)用 C++11(前身是 C++0x)的庫和語言擴(kuò)展,在貴項(xiàng)目用 C++11 特性前三思可移植性
命名規(guī)約
最重要的一致性規(guī)則是命名管理.
類型, 變量, 函數(shù), 常量, 宏, 等等, 甚至. 我們大腦中的模式匹配引擎非常依賴這些命名規(guī)則.
命名規(guī)約的一致性更重要, 所以無論你認(rèn)為它們是否重要, 規(guī)則總歸是規(guī)則.
通用命名規(guī)則
函數(shù)命名, 變量命名, 文件命名要有描述性; 少用縮寫.
盡可能使用描述性的命名, 別心疼空間, 畢竟相比之下讓代碼易于新讀者理解更重要. 不要用只有項(xiàng)目開發(fā)者能理解的縮寫, 也不要通過砍掉幾個(gè)字母來縮寫單詞.
文件命名
文件名要全部小寫, 可以包含下劃線 () 或連字符 (-), 依照項(xiàng)目的約定. 如果沒有約定, 那么 “” 更好.
類型命名
類型名稱的每個(gè)單詞首字母均大寫, 不包含下劃線: MyExcitingClass, MyExcitingEnum.
所有類型命名 —— 類, 結(jié)構(gòu)體, 類型定義 (typedef), 枚舉, 類型模板參數(shù) —— 均使用相同約定, 即以大寫字母開始, 每個(gè)單詞首字母均大寫, 不包含下劃線.
變量命名
變量 (包括函數(shù)參數(shù)) 和數(shù)據(jù)成員名一律小寫, 單詞之間用下劃線連接.
類的成員變量以下劃線結(jié)尾, 但結(jié)構(gòu)體的就不用, 如: a_local_variable, a_struct_data_member, a_class_data_member_.
普通變量一律小寫
不管是靜態(tài)的還是非靜態(tài)的, 結(jié)構(gòu)體數(shù)據(jù)成員都可以和普通變量一樣, 不用像類那樣接下劃線
常量命名
聲明為 constexpr 或 const 的變量, 或在程序運(yùn)行期間其值始終保持不變的, 命名時(shí)以 “k” 開頭, 大小寫混合.
函數(shù)命名
常規(guī)函數(shù)使用大小寫混合, 取值和設(shè)值函數(shù)則要求與變量名匹配
一般來說, 函數(shù)名的每個(gè)單詞首字母大寫 (即 “駝峰變量名” 或 “帕斯卡變量名”), 沒有下劃線. 對(duì)于首字母縮寫的單詞, 更傾向于將它們視作一個(gè)單詞進(jìn)行首字母大寫 (例如, 寫作 StartRpc() 而非 StartRPC()).
命名空間命名
命名空間以小寫字母命名.
最高級(jí)命名空間的名字取決于項(xiàng)目名稱.
要注意避免嵌套命名空間的名字之間和常見的頂級(jí)命名空間的名字之間發(fā)生沖突.
注意 不使用縮寫作為名稱 的規(guī)則同樣適用于命名空間. 命名空間中的代碼極少需要涉及命名空間的名稱, 因此沒有必要在命名空間中使用縮寫.
枚舉命名
枚舉的命名應(yīng)當(dāng)和 常量 或 宏 一致: kEnumName 或是 ENUM_NAME.
單獨(dú)的枚舉值應(yīng)該優(yōu)先采用 常量 的命名方式. 但 宏 方式的命名也可以接受.
宏命名
宏命名像這樣命名: MY_MACRO_THAT_SCARES_SMALL_CHILDREN.
通常 不應(yīng)該 使用宏. 如果不得不用, 其命名像枚舉命名一樣全部大寫, 使用下劃線
感覺 Google 的命名約定很高明, 比如寫了簡單的類 QueryResult, 接著又可以直接定義一個(gè)變量 query_result, 區(qū)分度很好; 再次, 類內(nèi)變量以下劃線結(jié)尾, 那么就可以直接傳入同名的形參, 比如 TextQuery::TextQuery(std::string word) : word_(word) {} , 其中 word_ 自然是類內(nèi)私有成員.
注釋
注釋雖然寫起來很痛苦, 但對(duì)保證代碼可讀性至關(guān)重要.
注釋固然很重要, 但最好的代碼應(yīng)當(dāng)本身就是文檔. 有意義的類型名和變量名, 要遠(yuǎn)勝過要用注釋解釋的含糊不清的名字.
注釋風(fēng)格
使用//或/* ···*/, 統(tǒng)一風(fēng)格就好.
文件注釋:
在每個(gè)文件開頭加入版權(quán)公告, 文件注釋描述了該文件的內(nèi)容. 如果一個(gè)文件只聲明, 或?qū)崿F(xiàn), 或測試了一個(gè)對(duì)象, 并且這個(gè)對(duì)象已經(jīng)在它的聲明處進(jìn)行了詳細(xì)的注釋, 那么就沒必要再加上文件注釋. 除此之外的其他文件都需要文件注釋.
不要在 .h 和 .cc 之間復(fù)制注釋, 這樣的注釋偏離了注釋的實(shí)際意義.
類注釋:
每個(gè)類的定義都要附帶一份注釋, 描述類的功能和用法, 除非它的功能相當(dāng)明顯.
描述類用法的注釋應(yīng)當(dāng)和接口定義放在一起, 描述類的操作和實(shí)現(xiàn)的注釋應(yīng)當(dāng)和實(shí)現(xiàn)放在一起.
函數(shù)注釋:
函數(shù)聲明處的注釋描述函數(shù)功能; 定義處的注釋描述函數(shù)實(shí)現(xiàn).
基本上每個(gè)函數(shù)聲明處前都應(yīng)當(dāng)加上注釋, 描述函數(shù)的功能和用途. 只有在函數(shù)的功能簡單而明顯時(shí)才能省略這些注釋(例如, 簡單的取值和設(shè)值函數(shù)).
讓代碼自文檔化.
注意標(biāo)點(diǎn), 拼寫和語法; 寫的好的注釋比差的要易讀的多.
TODO注釋風(fēng)格
關(guān)于注釋風(fēng)格, 很多 C++ 的 coders 更喜歡行注釋, C coders 或許對(duì)塊注釋依然情有獨(dú)鐘, 或者在文件頭大段大段的注釋時(shí)使用塊注釋;
文件注釋可以炫耀你的成就, 也是為了捅了簍子別人可以找你;
注釋要言簡意賅, 不要拖沓冗余, 復(fù)雜的東西簡單化和簡單的東西復(fù)雜化都是要被鄙視的;
對(duì)于 Chinese coders 來說, 用英文注釋還是用中文注釋, it is a problem, 但不管怎樣, 注釋是為了讓別人看懂, 難道是為了炫耀編程語言之外的你的母語或外語水平嗎;
注釋不要太亂, 適當(dāng)?shù)目s進(jìn)才會(huì)讓人樂意看. 但也沒有必要規(guī)定注釋從第幾列開始 (我自己寫代碼的時(shí)候總喜歡這樣), UNIX/LINUX 下還可以約定是使用 tab 還是 space, 個(gè)人傾向于 space;
TODO 很不錯(cuò), 有時(shí)候, 注釋確實(shí)是為了標(biāo)記一些未完成的或完成的不盡如人意的地方, 這樣一搜索, 就知道還有哪些活要干, 日志都省了.
格式
每個(gè)人都可能有自己的代碼風(fēng)格和格式, 但如果一個(gè)項(xiàng)目中的所有人都遵循同一風(fēng)格的話, 這個(gè)項(xiàng)目就能更順利地進(jìn)行. 每個(gè)人未必能同意下述的每一處格式規(guī)則, 而且其中的不少規(guī)則需要一定時(shí)間的適應(yīng), 但整個(gè)項(xiàng)目服從統(tǒng)一的編程風(fēng)格是很重要的, 只有這樣才能讓所有人輕松地閱讀和理解代碼.
行長度:
每行最多80個(gè)字符
盡量不使用非 ASCII 字符, 使用時(shí)必須使用 UTF-8 編碼.
我們使用空格縮進(jìn). 不要在代碼中使用制表符. 你應(yīng)該設(shè)置編輯器將制表符轉(zhuǎn)為空格.
使用好的參數(shù)名.
只有在參數(shù)未被使用或者其用途非常明顯時(shí), 才能省略參數(shù)名.
如果返回類型和函數(shù)名在一行放不下, 分行.
如果返回類型與函數(shù)聲明或定義分行了, 不要縮進(jìn).
左圓括號(hào)總是和函數(shù)名在同一行.
函數(shù)名和左圓括號(hào)間永遠(yuǎn)沒有空格.
圓括號(hào)與參數(shù)間沒有空格.
左大括號(hào)總在最后一個(gè)參數(shù)同一行的末尾處, 不另起新行.
右大括號(hào)總是單獨(dú)位于函數(shù)最后一行, 或者與左大括號(hào)同一行.
右圓括號(hào)和左大括號(hào)間總是有一個(gè)空格.
所有形參應(yīng)盡可能對(duì)齊.
缺省縮進(jìn)為 2 個(gè)空格.
換行后的參數(shù)保持 4 個(gè)空格的縮進(jìn).
水平留白的使用根據(jù)在代碼中的位置決定. 永遠(yuǎn)不要在行尾添加沒意義的留白.
三、people怎么讀音
音標(biāo)為: 英音 [ˈpi:pl]、美音 [ˈpipəl]
解釋為: 名詞,人;人們;大家;(統(tǒng)稱)人民,國民;民族;種族;平民;雇員;客人;家人
動(dòng)詞,居住在;把…擠滿人;住滿居民
英文解釋:the ordinary men and women of a country
rather than those who govern or have a
special position in society
例句:
1. Many people may simply not want to do it.
許多人可能根本不想這樣做。
2. It's nice to have people of like mind around.
有志同道合的人在身邊真好。
3. And I think people see that for smoking as well.
我認(rèn)為,人們看待吸煙也是如此。
4. I say that we should never listen to these people.
我認(rèn)為,我們不應(yīng)該聽這些人的話。
5. When it's five o'clock, people leave their office.
五點(diǎn)鐘時(shí),人們離開辦公室。
四、god到底怎么讀?
以上就是關(guān)于scares怎么讀相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
vscode手機(jī)版官網(wǎng)(vscode手機(jī)版安卓下載)
chatGPT中文網(wǎng)收費(fèi)(chat transcripts)
長沙園林招聘網(wǎng)最新招聘(長沙園林招聘網(wǎng)最新招聘)