一、最高準則:無二義性
對該準則的理解
無二義是每一個計算機高級語言最為重要的原則,出現二義性的陳述句對計算機而言就是無法理解的陳述句,在編程程序中某一條陳述句如若不能保證排除二義性,那么編譯器在編譯程序中將會報錯,其根本目的是確保代碼無二義性以保證程式的正常運行,
該準則的具體體現
1)運算子的優先級與結合性:
\\\C++針對輸入的陳述句進行處理時一定要有一個固定的處理順序,只有這樣才能保證在任何時間這條陳述句在C++中的意義是相同的,針對3+5×4這條陳述句,是應該先計算5×4再加3,還是應該先計算3+5再計算×5呢,如果不規定運算子的優先級,那么結果就會產生二義性,顯然是十分不合理的,
int x = 3 + 5 * 4;
cout << x << endl;
此陳述句的結果只可能是23
\\\運算子的結合性規定了陳述句讀取的方向,上述例子的結合性為從左到右,當然也存在結合性為從右到左的例子,如賦值運算子、單目運算子、條件運算子,
具體運算子的優先級結合性可見網址:
https://blog.csdn.net/qq_38131333/article/details/81674642
(2)識別符號不能以數字開頭
double e = 3e3;
如果允許識別符號以數字開頭那么 3e3 既可表示識別符號(變數名),亦可表示數值:3*10^3, 編譯時會顯示二義性,
二、次高準則:高效性
對該準則的理解
高效性意味著在相同的時間內程式運行的更快,也意味著運行相同的程式所需要的時間和空間更少,C++產生之初,計算機的作業效率并不迅速,因此需要更高效的語言提高程式的運行速度,
該準則的具體體現
(1)陣列下標0索引,
是為了提高計算的效率,程式在取第i個變數的地址時,
0索引時:&a[i] = &a[0] + i * sizeof(a[0])
1索引時:&a[i] = &a[1] + (i-1)*sizeof(a[0])
很顯然1索引相對于0索引程式再取第i個變數的地址時多進行了一個減法運算,而再計算機中減法運算較為耗時,所以C++采用了陣列下標為0的索引來提高運行速度,
絕大多數編程語言,陣列都是1索引的,如C/C++,Java,Python,C#,
但也有語言是1索引的,最典型的就是MATLAB,
(2)邏輯短路
運算式1 || 運算式2,如果運算式1為TRUE,跳過對運算式2的判斷,整個運算式的運算結果為TRUE,(短路和)
運算式1 && 運算式2,如果運算式1為FALSE,跳過對運算式2的判斷,整個運算式的運算結果為FALSE,(短路與)
有效的減少了運算,提高了程式運行效率,
三、第三準則:合乎日常習慣
對該準則的理解
在悠久的歷史長河中,人們形成了一套符合大多數人的行為習慣和思維模式,而計算機高級語言作為一個供人類使用的語言,當然需要在必要的地方盡可能的貼合人們行為習慣與思維模式,一方面可以提高人們學習計算機語言的速度,另一方面可以減少產生由日常習慣引起的代碼錯誤,
一套背離人們日常習慣的計算機語言,無疑會給程式員的入門與編程帶來極大的不便性,
該準則的具體體現
1)代碼的書寫為從上至下,從左至右
2)某些特殊字符直接套用現實生活中的英文單詞(namespace、endl、if、break、cout等)
2)數學邏輯運算順序與實際匹配(乘除優先于加減)
四、第四準則:相似相同原則
對該準則的理解
現有物件A與B,A物件具有行為a,B物件具有行為b,如若行為a與行為b在形式與邏輯上有一定程度的相似性,那么在C++語言中會對A物件增加一個行為b,對B物件增加一個行為a
該準則的具體體現
初始化:
1、等號初始化:
int a = 5;
int a = i;
2、括號初始化:
int a(5);
int a(i);
3、串列初始化:
int a{5};
int a{i};
int a = {5};
int a = {i};
括號初始化,是變數與物件之間的“相似相同規則”
串列初始化,是變數與陣列之間的“相似相同規則”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/169343.html
標籤:其他
上一篇:當你走下愚昧之巔
下一篇:Spring底層原理探究
