無二義性這個準則應該是所有語言中最重要的準則,即一門高階語言的設計,其首要考慮的問題就是如何消除二義性。
而所謂的二義性簡單點來說就是在同樣的語句中,可以有不同的理解。例如:3+45這個式子中如果沒有說明前,你可以理解為先45然後再加3,也可以理解為3+4後再乘5。
在沒有做出說明前,這個語句就是有二義性的,而當一們高階語言定義了運算子的優先順序後(*/的優先順序高於±),這個語句的理解就是唯一的。
綜合還說,無二義性就是消除二義性的意思,而高階語言中的無二義性就是消除語法規則以及語句中的二義性,即每個語句、每乙個語法的執行都是唯一的。
在語言c++中,很多語法規則的設定都是為了消除二義性而存在的。例如:變數名不可以用數字為開頭。
因為當變數名可以以數字為開頭的時候我們在理解某些變數名時會產生歧義:"10"是變數呢還是整型數值呢?「3e10」是數值呢,還是變數呢?而當我們規定變數名不可以用數字開頭時,這種情況的二義性就解決了。
而貪心規則也是如此,也主要是為了規避二義性。
這個準則就比較好理解,當我們完成了消除二義性的任務之後,我們首要解決的問題就是高效性。
一門計算機語言面向的物件是程式設計師,而程式設計師是要幹活的,如果一門計算機語言的語法規則晦澀難懂,使用繁瑣,那麼使用者在使用時的效率就會降低。在這個講究效率的社會上,低效終將是要淘汰的。就像是我們使用車去拉貨,當我們確保這輛車能動且安全(無二義性)的時候,我們就要考慮這輛車一次能拉多少貨,跑得快不快的問題。
而在c++中也有許多語法規則或者規定是為了程式編寫和執行的高效性而存在。
較為典型的就是:既然有了while(){}迴圈,為什麼還要有for(){}呢?
為什麼c語言中已經有了printf()和scanf()的輸出輸入語句,而「公升級版」的c語言,c++中還要有cin和cout呢?其根本原因還是在於後者編寫更方便。
其中關於c++體現執行高效性的有:陣列下標以0開始而不是以1開始。
在計算機記憶體中,陣列的空間是一段連續的空間,而當我們需要用到陣列中某個數值時,計算機就需要檢索查詢陣列中沒目標數值的位址。
如果陣列下標從0開始,那麼陣列中如a[i]的位址就為陣列首位址(a[0])+i*單個資料所佔位址。
如果陣列下標從1開始,那麼陣列中如a[i]的位址就為陣列首位址(a[0])+(i-1)*單個資料所佔位址。
這時,下標從1開始的陣列檢索陣列成員時的運算就比從0開始的。即陣列下標從0開始,執行起來更加的高效。
但是值得注意的是,並非所有的語言都一味的追求極致的高效性,如r語言中陣列下標就從1開始。
這個規則也比較容易理解,當一門高階語言滿足了無二義性且滿足了一定的高效性時,c++的語法規則就要滿足合乎程式設計師的日常使用習慣。高階語言的物件是編寫程式的人,如果其語法規則和規定不合乎使用者的習慣,那將給使用者帶來非常大的不便。例如如果語法規則規定在進行算術運算時先加減後乘除,那將會給使用者帶來非常大的不便。
而先乘除後加減,有括號先算括號這類語法規是符合使用者的理解習慣的,運算子優先順序的規定也在一定程度上體現了合乎日常使用這個準則。
除此之外還有高維陣列的定義及使用a[m][n]其中m代表行數,n代表列數。而高維陣列在儲存結構中的儲存是連續的,如a[m][0]與a[m-1][n-1]是緊鄰的。即本質上來說所有高維陣列都是一維的陣列。而語法規則中規定了高維陣列的使用也是為了合乎使用者的日常理解和使用習慣。
c++中相似相同準則則沒有前面三個還準則那麼重要,這個準則在c++中物件的使用**有所體現。
例如,有兩個不同的物件a、b,a有行為a,b有行為b,如果a與b兩種行為在邏輯上有相似性,則c++會為物件a額外增加乙個行為b,也會為物件b額外增加乙個行為a。這種規則可以有效的減少編譯器的工作量。
例如:int a[5]=;
則陣列a未賦值的空間,編譯器則自動為其賦值。
函式過載也在一定程度上體現了相似相同準則。
C 程式語言的四個基本準則及其具體體現
二義性是任何邏輯體系的最高準則,在c 中,如果出現定義 語句 邏輯自相矛盾時,程式便無法執行,數學界的三次數學危機,本質上就是為了消除 二義性 的爭端。準則的具體體現 1 運算子的優先順序與結合性。優先順序是為了消除諸如3 4 5 的表示式,是應該被當作 3 4 5 還是3 4 5 的二義性而設定的...
C 程式設計的四個基本準則
無二義性是任何一門邏輯科學應該遵循的基本準則。數學界的三次數學危機,本質上就是為了消除 二義性 的爭端。準則的具體體現 1 運算子的優先順序和結合性 優先順序是為了消除諸如3 4 5 的表示式,是應該被當作 3 4 5還是3 4 5 的二義性而制定的規則。例如 括號的優先順序高於加減乘除 int x...
C 程式設計的四個基本準則
1 最高準則 無二義性 對準則的理解 無二義,是c 程式語言的最高準則,同時也是所有型別程式語言的最高準則,即一串 不能有兩種不同的解釋,只能有一種解釋。一般情況下會通過將某些具有二義的行為定義為非法來實現。準則的具體體現 1 運算子的優先順序與結合性。優先順序是為了消除諸如1 2 3的表示式的二義...