C++程式語言的四個基本準則

2020-10-06 12:01:07

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++將變數、物件及陣列統一對待的原則的產物。