C++編程語言的四個基本準則
一、最高準則:無二義性,
對這個準則的理解:同一條C++陳述句不能同時具備兩種或多種含義,每一條C++陳述句只能通過一種方式執行,得到唯一結果,
準則的具體體現:
(1)運算子的優先級與結合性,
優先級是為了消除諸如3+4*5是應被當做(3+4)*5還是3+(4 * 5)的二義性而制定的規則,
示例代碼:
int x=3+4*5
結合性是為了消除諸如x=y=z是應先執行y=z還是x=y的二義性而制定的規則,
示例代碼:
int x,y=1,z=2;
x=y=z;
(2)識別符號不能以數字開頭,
假設識別符號能以數字開頭,那么諸如“0123”、“0x19A”這類“識別符號”就無法被區分是常量還是變數,這條規則的制定很好地消除了此類二義性,
(3)貪心規則,
貪心規則是指,在對問題求解時,總是做出在當前看來是最好的選擇,也就是說,不從整體最優上加以考慮,演算法得到的是在某種意義上的區域最優解,由于演算法得到的是問題的最優解,故可以消除存在其它非最優解的二義性,
二、次高準則:高效性
對這個準則的理解:高效性規則是為了保證程式的運行時間和儲存空間盡可能節約而制定的,簡化了程式的執行方式和程序,可以很好地避免時間和空間的浪費,
準則的具體體現:
(1)陣列下標0索引,
陣列是一段連續的空間,要求a[i]就是求它的地址,然后找到它,
如果從0開始,則a[i]的地址= 首地址 + i*每個資料所占的長度;
如果從1開始,則a[i]的地址= 首地址 + (i-1)*每個資料所占的長度,
顯然以0索引的方式可以更高效地計算,
(2)邏輯短路,
例如當使用邏輯運算子&&時若運算子左邊條件不成立,則不會對運算子右邊條件進行判斷,保證了程式的高效運行,
舉個例子:
int a=1,b=2,c=3;
if(a>b&&b++)
a++;
由于a>b不成立,故運算子&&右邊b++不會執行,b仍為2,
三、第三準則:合乎日常習慣
對這個準則的理解:程式設計語言最終是給程式員使用的,一套不合乎日常習慣的規則會給程式員的使用帶來極大的不便,因為日常習慣的慣性是極其強大的,故一套合乎日常習慣的規則對于程式員的使用是極其重要的,可以讓程式員得心應手地使用該語言,創造出更富有價值的程式,
準則的具體體現:
(1)運算的優先級
在數學中,乘法的優先級高于加法,先計算乘法再計算加法,在C++中也是如此,符合日常習慣,給撰寫帶來了極大方便,
示例:
int x=3+4*5
(2)二維陣列下標表示總行數和總列數,
例如a[3][4]用下標3和4表示一個3行4列的矩陣,合乎日常習慣,
四、補充規則:相似相同規則
對這個規則的理解:如果有兩個不同的物件具有相似的行為,那么C++會為這兩個物件額外增加對方的行為,使得這兩個不同物件具有對方的相同行為,有利于程式的簡化,
準則的具體體現:
(1)C++的三類初始化方式:等號初始化、括號初始化、串列初始化,
等號初始化:
int k=5;
int k=i;
括號初始化:
int k(5);
int k(i);
串列初始化:
int j{i};
int j{5};
int j={i};
int j={5};
括號初始化是變數與物件之間的“相似相同規則”;串列初始化是變數與陣列之間的“相似相同規則”,本質上是C++將變數、物件及陣列統一對待的原則的產物,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/159750.html
標籤:其他
下一篇:spring應用手冊-IOC(XML配置實作)-(35)-context:component-scan的scoped-proxy屬性
