簡述:這個準則不僅僅是c++的準則,也是所有程式語言的最高準則,更是任何邏輯體系的最高準則。因為機器不像人,人的一句話在不同的語境可能還會有不同理解,但機器對一種語言的理解有且只有那麼一種「理解」方式,若是一句程式語言出現兩種意思,計算機無法選擇,最終出現錯誤。
具體表現:
1.運算子的優先順序與結合性
優先順序與結合性本質上是為了消除二義性而設定的,如運算邏輯:
(1)運算子的優先順序能消除乙個算式的二義性,使其更合乎人的邏輯,如3+4*5,運算順序是先乘後加,消除先加後乘的二義性。
示例 :
int a=3+
4*5;cout<
輸出結果為23,而不是35或其它。
(2)運算子的結合性是指同一優先順序的運算子在表示式中的操作方向,如3-4+5,運算順序是先減後後加,而不是先加後減;又如x=y=z,應先將z的值幅值給y,再將y的值幅值給x;
示例:
int b=3-
4+5;
cout<
輸出結果為4,而不是-6或其它。
2.識別符號不能以數字開頭
邏輯上來講,若是識別符號以數字開頭,那計算機是無法判斷它到底是乙個數字還是乙個常量,這樣的話就會出現二義性。如3e4(30000),0x7c7d(16進製制數)等,這些數字本身就已經有了各自所代表的含義,若用作識別符號,將出錯,且c++本身並不允許。
3.貪心規則
「貪心」在程式設計中意味著「找捷徑」,也就是對於c++語言的乙個邏輯演算法,雖可能存在多個解決方案,但總是會優先選擇「最優解」。所謂「最優解」,即在正確的前提下更加精簡,且僅僅只針對被解決的這一種問題。因為是「最優解」,這樣就可以有效地避免走了其它彎路而把自己「繞暈」,也就避免了其它「路徑」可能產生的二義性。
簡述:因為c++語言出現時,計算機效能普遍較低,因此計算機效能是乙個重要的制約因素,是當時情境下的「主要矛盾」。 如果有兩個行為a與b,均滿足無二義的規則,且a比b高效,則c++語言會選擇a行為作為標準語法。
具體表現:
1.陣列下標0索引
陣列是一種線性表資料結構,用一組連續的記憶體空間,儲存一組相同型別的資料。在c++中,若int a[10];此時系統會給名為a的陣列一串連續的記憶體空間,如1000,1001,1002……1008,1009。對於索引下標,與其說是該陣列中的第幾個(這樣似乎更符合人的習慣),不如說它是一段長度或距離,或是乙個針對於首位址的「偏移量」。因為計算機不會直接確認所謂的「第幾個」是指數組中的哪乙個量,而是從首位址開始算起,距離首位址距離為0則為a[0],距離為1則為a[1],距離為9則為a[9]。因此用0索引更符合計算機的「習慣」,這樣做也會更加高效。
2.邏輯短路
對於運算子&&和||,如a&&b,當a為false(或0)時,整個運算結果就已經為false(或0),則計算機就不會再去判斷b,相當於b被「短路」了一樣,這就是邏輯短路。同理,a||b,若a為true(或1)時,整個運算結果為true(或1),則計算機不會再去判斷b。顯然,這種處理方式更加高效。
注:並非所有語言都有對高效性的絕對準求,且高效性準則只對基礎的c++語法規則有效,在stl庫與模板中,已經不再是次高準則了。
簡述: 程式語言最終是要給人使用的。若程式語言很不合乎日常習慣,將會給程式設計帶來極大的困難。因為人的理解力和解釋邏輯還是要與日常行為掛鉤,程式中若引入人的這種思維模式,則會大大便捷人們的使用,使程式設計變得更加高效。除一些特別的像上文所說的陣列0索引等外,大部分規則還是會與日常習慣相同,最簡單的例子正如加減乘除的運算優先順序等。
簡述:c++中,如果有兩個不同的物件a與b,a有行為a,b有行為b,如果a與b兩種行為在邏輯上具有相似性,則c++會為物件a額外增加乙個行為b,也會將物件b額外增加乙個行為a,就好像a與b互相學習,互相模仿一樣。在c++中,幾乎隨處可見這種「相似度」很高的編寫方法。
具體表現:
1. 變數的初始化
如定義變數a等於5,一般是int a=5;
但也有int a(5);(變數與物件之間的相似相同規則)
在c++11標準中,還有int a=;有int a;(變數與陣列的相似相同規則)
2. 陣列的初始化
給定陣列b[10],其初始化一般為b[10]=;(中括號內可以不填,則預設初始為0;也可以依次填入資料,用逗號隔開)
c++11標準中,初始化可以直接b[10];(陣列與變數的相似相同規則)
3. 指標的初始化
由上圖可見,變數有的指標同樣會有。
4. 引用初始化
所謂引用,相當於給變數改個名。如int a=5;int &b=a;
對於引用的初始化,除了有int &b=a;也有int &b(a);(引用與變數的相似相同規則)
5. 指標與陣列
對陣列進行元素訪問時,可以是a[5]=3;用指標時,也可以是*(a+5)=3;
在函式一節中,根據相似相同規則,void f(int a) 可以改寫為 void f(int *a)
C 程式語言的基本準則
二 第二高準則 高效性 1.陣列下標0索引 2 邏輯短路 3 微調控制能力 4 編譯自主性 1.內建函式命名 2.二維陣列下標表示總行數和總列數 3.運算的優先順序 二義性是指乙個c 語句所表達的含義含有兩種或多種含義。這對於計算機執行計算而言時需要消除的。具體無二義性體現在一下幾點 優先順序 運算...
C 程式語言的四個基本準則
二 次高準則 高效性 三 第三準則 合乎日常習慣 四 補充準則 相似相同規則 五 結語 對這個準則的理解 程式語言於計算機而言,通俗地說就是指令,若乙個指令出現歧義,計算機則會無法判斷該執行哪一種。倘若執行了其中一種,則可能與本來所需要的結果相悖,不符合實際需求。所以,程式語言的無二義性,可以使得我...
C 程式語言的四個基本準則
對這個準則的理解 這個準則,不僅是c 的準則,更是所有型別程式語言的最高準則。同一條c 語句不能同時具備兩種或多種含義,每一條c 語句只能通過一種方式執行,得到唯一結果。準則的具體體現 1 運算子的優先順序與結合性。優先順序是為了消除如5 6 7的表示式,是應該被當作 5 6 7還是5 6 7 的二...