二、第二高準則:高效性
1.陣列下標0索引
2、邏輯短路
3、微調控制能力
4、編譯自主性
1.內建函式命名
2.二維陣列下標表示總行數和總列數
3.運算的優先順序
二義性是指乙個c++語句所表達的含義含有兩種或多種含義。這對於計算機執行計算而言時需要消除的。具體無二義性體現在一下幾點:
優先順序:運算子的優先順序決定了運算子用於值的順序,在c++中,運算子的優先順序解決了程式在運算一些含有兩個或多個運算子的語句時不知道應該先計算哪個的情況。
**示例:
int a=3+
4*5;
cout/輸出結果為23
結果為23而非35,這也是由於運算子之間具有一定的優先順序關係,從而就消除了這裡二義性的影響
結合性:決定了計算順序是左往右還是右往左,具體如下:
#include
using namespace std;
int main()
這裡輸出的結果為a=2,b=2,c=2,表明a=b=c是從右往左運算,而非從左往右,這就消除了二義性的影響
c++中識別符號不能以數字開頭,這也是便於區分變數與常量的區別,同時遵循無二義的準則。假如用數字開頭。不僅會讓計算機難以區分變數和常量,還可能會增加計算機運算時間。從而降低效率。
貪婪演算法是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,演算法得到的是在某種意義上的區域性最優解。
貪婪規則一定程度上可以減少**執行出現錯誤的可能,但是換個角度看可能會導致程式設計師在理解**是出現障礙。因此,在一定條件下,可以儘量減少運用貪婪規則的時候,這樣**也更容易讓其他人看懂。
c++語言將高效性作為次高準則,是因為c++語言出現時,計算機效能普遍較低,因此計算機效能是乙個重要的制約因素,是當時情境下的「主要矛盾」。
如果有兩個行為a與b,均滿足無二義的規則,且a比b高效,則c++語言會選擇a行為作為標準語法。
並非所有語言,都有對高效性的絕對準求。
高效性準則只對基礎的c++語法規則有效,在stl庫與模板中,已經不再是次高準則了。
高效性具體體現在:
0索引時:&a[i] = &a[0] + i * sizeof(a[0])
1索引時:&a[i] = &a[1] + (i-1)*sizeof(a[0])
這裡不難發現。1索引比0索引多計算了乙個減法,對於計算機而言,計算減法是更加複雜的,會明顯降低效率。在計算機內,加法是很簡單的,而減法則需要運用到補碼,這中間的計算過程,會大大減低執行效率,不符合高效性準則的初衷。在大多數程式語言來說,大部分都是採用0索引,例如:c、c++、python等,也有少部分使用1索引,主要原因應該是取決於開發者的任性。
邏輯短路是對於邏輯運算而言,是指,僅計算邏輯表示式中的一部分便能確定結果,而不對整個表示式進行計算的現象。
對於「&&」運算子,當第乙個運算元為false時,將不會判斷第二個運算元,因為此時無論第二個運算元為何,最後的運算結果一定是false;
對於「||」運算子,當第乙個運算元為true時,將不會判斷第二個運算元,因為此時無論第二個運算元為何,最後的運算結果一定是true。
在這裡,符合一定的條件,就會減少下一步的計算,這一目的也是為了計算機的高效性。
c與c++具有通常是組合語言才具有的微調控制能力,可以根據具體情況微調程式以獲得最大執行速度或最有效地使用記憶體。
編譯器具有一定的自主性而可以自行選擇先對函式中的哪個引數求值,從而提高編譯器的執行效率。
因為程式語言是最終給程式設計師使用的,一套不合乎日常習慣的規則,會給程式設計師的使用帶來極大的不便性,因為日常習慣的慣性是極其強大的,這樣會迫使程式設計師放棄該語言。
具體體現:
對於內建函式的命名往往是以這個函式的作用的英文命名的,符合日常習慣,在呼叫時也比較方便。
例如a[3][4]用下標3和4表示乙個3行4列的矩陣,合乎日常習慣。
這一點不但體現最高準則無二義性,也體現了合乎日常習慣準則,因為這大部分與數學中運算順序相契合,讓程式設計師更容易接受,學習。
c++中,如果有兩個不同的物件a與b,a有行為a,b有行為b,如果a與b兩種行為在邏輯上具有相似性,則c++會為物件a額外增加乙個行為b,也會將物件b額外增加乙個行為a。
具體體現:
(1)變數初始化
(2)陣列初始化
(3)列表初始化
(4)指標初始化
括號初始化,是變數與物件之間的「相似相同規則」;列表初始化,是變數與陣列之間的「相似相同規則」。
C 程式語言的四種基本準則
簡述 這個準則不僅僅是c 的準則,也是所有程式語言的最高準則,更是任何邏輯體系的最高準則。因為機器不像人,人的一句話在不同的語境可能還會有不同理解,但機器對一種語言的理解有且只有那麼一種 理解 方式,若是一句程式語言出現兩種意思,計算機無法選擇,最終出現錯誤。具體表現 1.運算子的優先順序與結合性 ...
C 程式語言的四個基本準則
二 次高準則 高效性 三 第三準則 合乎日常習慣 四 補充準則 相似相同規則 五 結語 對這個準則的理解 程式語言於計算機而言,通俗地說就是指令,若乙個指令出現歧義,計算機則會無法判斷該執行哪一種。倘若執行了其中一種,則可能與本來所需要的結果相悖,不符合實際需求。所以,程式語言的無二義性,可以使得我...
C 程式語言的四個基本準則
對這個準則的理解 這個準則,不僅是c 的準則,更是所有型別程式語言的最高準則。同一條c 語句不能同時具備兩種或多種含義,每一條c 語句只能通過一種方式執行,得到唯一結果。準則的具體體現 1 運算子的優先順序與結合性。優先順序是為了消除如5 6 7的表示式,是應該被當作 5 6 7還是5 6 7 的二...